fix(datagrid): prevent unmount of aggrid on theme change (#3588)
This commit is contained in:
parent
7a99ded8e9
commit
eefcc96149
@ -4,7 +4,7 @@ import { t } from '@vegaprotocol/i18n';
|
|||||||
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReact } from 'ag-grid-react';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import type { VegaICellRendererParams } from '@vegaprotocol/datagrid';
|
import type { VegaICellRendererParams } from '@vegaprotocol/datagrid';
|
||||||
import { useRef, useLayoutEffect } from 'react';
|
import { useRef, useLayoutEffect } from 'react';
|
||||||
import { BREAKPOINT_MD } from '../../config/breakpoints';
|
import { BREAKPOINT_MD } from '../../config/breakpoints';
|
||||||
|
@ -3,7 +3,7 @@ import { t } from '@vegaprotocol/i18n';
|
|||||||
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReact } from 'ag-grid-react';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import type {
|
import type {
|
||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
VegaValueGetterParams,
|
VegaValueGetterParams,
|
||||||
|
@ -3,7 +3,7 @@ import { VoteProgress } from '@vegaprotocol/proposals';
|
|||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReact } from 'ag-grid-react';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import type {
|
import type {
|
||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
@import 'ag-grid-community/dist/styles/ag-grid.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham-dark.css';
|
||||||
|
|
||||||
/* You can add global styles to this file, and also import other style files */
|
/* You can add global styles to this file, and also import other style files */
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@ -11,3 +15,43 @@
|
|||||||
.react-markdown-container a:before {
|
.react-markdown-container a:before {
|
||||||
content: '🔗 ';
|
content: '🔗 ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* AG GRID - Do not edit without updating other global stylesheets for each app */
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-root-wrapper {
|
||||||
|
border: solid 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-react-container {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-cell,
|
||||||
|
.vega-ag-grid .ag-full-width-row .ag-cell-wrapper.ag-row-group {
|
||||||
|
line-height: calc(min(var(--ag-line-height, 26px), 26px) - 4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Light variables */
|
||||||
|
.ag-theme-balham {
|
||||||
|
--ag-background-color: theme(colors.white);
|
||||||
|
--ag-border-color: theme(colors.neutral[300]);
|
||||||
|
--ag-header-background-color: theme(colors.white);
|
||||||
|
--ag-odd-row-background-color: theme(colors.white);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[300]);
|
||||||
|
--ag-row-border-color: theme(colors.white);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[100]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark variables */
|
||||||
|
.ag-theme-balham-dark {
|
||||||
|
--ag-background-color: theme(colors.black);
|
||||||
|
--ag-border-color: theme(colors.neutral[700]);
|
||||||
|
--ag-header-background-color: theme(colors.black);
|
||||||
|
--ag-odd-row-background-color: theme(colors.black);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[600]);
|
||||||
|
--ag-row-border-color: theme(colors.black);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[800]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
@ -3,7 +3,7 @@ import { forwardRef, useMemo, useRef, useState } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { Button, Icon } from '@vegaprotocol/ui-toolkit';
|
import { Button, Icon } from '@vegaprotocol/ui-toolkit';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import { useAppState } from '../../../../contexts/app-state/app-state-context';
|
import { useAppState } from '../../../../contexts/app-state/app-state-context';
|
||||||
import { BigNumber } from '../../../../lib/bignumber';
|
import { BigNumber } from '../../../../lib/bignumber';
|
||||||
import {
|
import {
|
||||||
@ -17,7 +17,6 @@ import {
|
|||||||
} from '../../shared';
|
} from '../../shared';
|
||||||
import {
|
import {
|
||||||
defaultColDef,
|
defaultColDef,
|
||||||
NODE_LIST_GRID_STYLES,
|
|
||||||
PendingStakeRenderer,
|
PendingStakeRenderer,
|
||||||
stakedTotalPercentage,
|
stakedTotalPercentage,
|
||||||
StakeShareRenderer,
|
StakeShareRenderer,
|
||||||
@ -382,12 +381,14 @@ export const ConsensusValidatorsTable = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div data-testid="consensus-validators-table">
|
<div
|
||||||
|
data-testid="consensus-validators-table"
|
||||||
|
className="validators-table"
|
||||||
|
>
|
||||||
{nodes.length > 0 && (
|
{nodes.length > 0 && (
|
||||||
<AgGrid
|
<AgGrid
|
||||||
domLayout="autoHeight"
|
domLayout="autoHeight"
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
customThemeParams={NODE_LIST_GRID_STYLES}
|
|
||||||
getRowHeight={(params: RowHeightParams) => getRowHeight(params)}
|
getRowHeight={(params: RowHeightParams) => getRowHeight(params)}
|
||||||
defaultColDef={defaultColDef}
|
defaultColDef={defaultColDef}
|
||||||
tooltipShowDelay={0}
|
tooltipShowDelay={0}
|
||||||
|
@ -79,17 +79,6 @@ export interface ValidatorsTableProps {
|
|||||||
validatorsView: ValidatorsView;
|
validatorsView: ValidatorsView;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Custom styling to account for the scrollbar. This is needed because the
|
|
||||||
// AG Grid places the scrollbar over the bottom validator, which obstructs
|
|
||||||
export const NODE_LIST_GRID_STYLES = `
|
|
||||||
.ag-theme-balham-dark .ag-body-horizontal-scroll {
|
|
||||||
opacity: 0.75;
|
|
||||||
}
|
|
||||||
.ag-theme-balham-dark *:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const stakedTotalPercentage = (stakeScore: string) =>
|
export const stakedTotalPercentage = (stakeScore: string) =>
|
||||||
formatNumberPercentage(toBigNum(stakeScore, 0).times(100), 2);
|
formatNumberPercentage(toBigNum(stakeScore, 0).times(100), 2);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { forwardRef, useMemo, useRef } from 'react';
|
import { forwardRef, useMemo, useRef } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import { useAppState } from '../../../../contexts/app-state/app-state-context';
|
import { useAppState } from '../../../../contexts/app-state/app-state-context';
|
||||||
import { BigNumber } from '../../../../lib/bignumber';
|
import { BigNumber } from '../../../../lib/bignumber';
|
||||||
import {
|
import {
|
||||||
@ -13,7 +13,6 @@ import {
|
|||||||
} from '../../shared';
|
} from '../../shared';
|
||||||
import {
|
import {
|
||||||
defaultColDef,
|
defaultColDef,
|
||||||
NODE_LIST_GRID_STYLES,
|
|
||||||
StakeNeededForPromotionRenderer,
|
StakeNeededForPromotionRenderer,
|
||||||
stakedTotalPercentage,
|
stakedTotalPercentage,
|
||||||
ValidatorFields,
|
ValidatorFields,
|
||||||
@ -248,11 +247,13 @@ export const StandbyPendingValidatorsTable = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div data-testid="standby-pending-validators-table">
|
<div
|
||||||
|
data-testid="standby-pending-validators-table"
|
||||||
|
className="validators-table"
|
||||||
|
>
|
||||||
<AgGrid
|
<AgGrid
|
||||||
domLayout="autoHeight"
|
domLayout="autoHeight"
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
customThemeParams={NODE_LIST_GRID_STYLES}
|
|
||||||
rowHeight={68}
|
rowHeight={68}
|
||||||
defaultColDef={defaultColDef}
|
defaultColDef={defaultColDef}
|
||||||
tooltipShowDelay={0}
|
tooltipShowDelay={0}
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
@import 'ag-grid-community/dist/styles/ag-grid.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham-dark.css';
|
||||||
|
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
@ -19,3 +23,43 @@
|
|||||||
@apply border-vega-dark-200;
|
@apply border-vega-dark-200;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* AG GRID - Do not edit without updating other global stylesheets for each app */
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-root-wrapper {
|
||||||
|
border: solid 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-react-container {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-cell,
|
||||||
|
.vega-ag-grid .ag-full-width-row .ag-cell-wrapper.ag-row-group {
|
||||||
|
line-height: calc(min(var(--ag-line-height, 26px), 26px) - 4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Light variables */
|
||||||
|
.ag-theme-balham {
|
||||||
|
--ag-background-color: theme(colors.white);
|
||||||
|
--ag-border-color: theme(colors.neutral[300]);
|
||||||
|
--ag-header-background-color: theme(colors.white);
|
||||||
|
--ag-odd-row-background-color: theme(colors.white);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[300]);
|
||||||
|
--ag-row-border-color: theme(colors.white);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[100]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark variables */
|
||||||
|
.ag-theme-balham-dark {
|
||||||
|
--ag-background-color: theme(colors.black);
|
||||||
|
--ag-border-color: theme(colors.neutral[700]);
|
||||||
|
--ag-header-background-color: theme(colors.black);
|
||||||
|
--ag-odd-row-background-color: theme(colors.black);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[600]);
|
||||||
|
--ag-row-border-color: theme(colors.black);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[800]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
@ -4,7 +4,7 @@ import type {
|
|||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import { MarketState, MarketStateMapping } from '@vegaprotocol/types';
|
import { MarketState, MarketStateMapping } from '@vegaprotocol/types';
|
||||||
|
@ -12,7 +12,9 @@ export const Proposed = () => {
|
|||||||
const externalLink = tokenLink(TOKEN_NEW_MARKET_PROPOSAL);
|
const externalLink = tokenLink(TOKEN_NEW_MARKET_PROPOSAL);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ProposalsList />
|
<div className="min-h-[200px]">
|
||||||
|
<ProposalsList />
|
||||||
|
</div>
|
||||||
<ExternalLink className="py-4 px-[11px] text-sm" href={externalLink}>
|
<ExternalLink className="py-4 px-[11px] text-sm" href={externalLink}>
|
||||||
{t('Propose a new market')}
|
{t('Propose a new market')}
|
||||||
</ExternalLink>
|
</ExternalLink>
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
@import 'ag-grid-community/dist/styles/ag-grid.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham.css';
|
||||||
|
@import 'ag-grid-community/dist/styles/ag-theme-balham-dark.css';
|
||||||
|
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
@ -24,7 +28,8 @@ html.dark {
|
|||||||
@apply border-vega-light-200 dark:border-vega-dark-200;
|
@apply border-vega-light-200 dark:border-vega-dark-200;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Styles for charts */
|
/* PENNANT */
|
||||||
|
|
||||||
html [data-theme='dark'] {
|
html [data-theme='dark'] {
|
||||||
--pennant-color-danger: theme('colors.vega.pink.DEFAULT');
|
--pennant-color-danger: theme('colors.vega.pink.DEFAULT');
|
||||||
|
|
||||||
@ -71,3 +76,43 @@ html [data-theme='light'] {
|
|||||||
--pennant-color-depth-sell-fill: theme('colors.vega.pink.400');
|
--pennant-color-depth-sell-fill: theme('colors.vega.pink.400');
|
||||||
--pennant-color-depth-sell-stroke: theme('colors.vega.pink.550');
|
--pennant-color-depth-sell-stroke: theme('colors.vega.pink.550');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* AG GRID - Do not edit without updating other global stylesheets for each app */
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-root-wrapper {
|
||||||
|
border: solid 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-react-container {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vega-ag-grid .ag-cell,
|
||||||
|
.vega-ag-grid .ag-full-width-row .ag-cell-wrapper.ag-row-group {
|
||||||
|
line-height: calc(min(var(--ag-line-height, 26px), 26px) - 4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Light variables */
|
||||||
|
.ag-theme-balham {
|
||||||
|
--ag-background-color: theme(colors.white);
|
||||||
|
--ag-border-color: theme(colors.neutral[300]);
|
||||||
|
--ag-header-background-color: theme(colors.white);
|
||||||
|
--ag-odd-row-background-color: theme(colors.white);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[300]);
|
||||||
|
--ag-row-border-color: theme(colors.white);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[100]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark variables */
|
||||||
|
.ag-theme-balham-dark {
|
||||||
|
--ag-background-color: theme(colors.black);
|
||||||
|
--ag-border-color: theme(colors.neutral[700]);
|
||||||
|
--ag-header-background-color: theme(colors.black);
|
||||||
|
--ag-odd-row-background-color: theme(colors.black);
|
||||||
|
--ag-header-column-separator-color: theme(colors.neutral[600]);
|
||||||
|
--ag-row-border-color: theme(colors.black);
|
||||||
|
--ag-row-hover-color: theme(colors.neutral[800]);
|
||||||
|
--ag-font-size: 12px;
|
||||||
|
}
|
||||||
|
@ -23,7 +23,7 @@ describe('AccountManager', () => {
|
|||||||
data: [],
|
data: [],
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.mockImplementationOnce((args) => {
|
.mockImplementation((args) => {
|
||||||
return {
|
return {
|
||||||
data: [
|
data: [
|
||||||
{ asset: { id: 'a1' }, party: { id: 't1' } },
|
{ asset: { id: 'a1' }, party: { id: 't1' } },
|
||||||
@ -49,7 +49,7 @@ describe('AccountManager', () => {
|
|||||||
(helpers.useDataProvider as jest.Mock).mock.calls[0][0].variables
|
(helpers.useDataProvider as jest.Mock).mock.calls[0][0].variables
|
||||||
.partyId
|
.partyId
|
||||||
).toEqual('partyOne');
|
).toEqual('partyOne');
|
||||||
await act(() => {
|
await act(async () => {
|
||||||
rerender(
|
rerender(
|
||||||
<AccountManager
|
<AccountManager
|
||||||
partyId="partyTwo"
|
partyId="partyTwo"
|
||||||
@ -66,7 +66,7 @@ describe('AccountManager', () => {
|
|||||||
|
|
||||||
it('update method should return proper result', async () => {
|
it('update method should return proper result', async () => {
|
||||||
let rerenderer: (ui: React.ReactElement) => void;
|
let rerenderer: (ui: React.ReactElement) => void;
|
||||||
await act(() => {
|
await act(async () => {
|
||||||
const { rerender } = render(
|
const { rerender } = render(
|
||||||
<AccountManager
|
<AccountManager
|
||||||
partyId="partyOne"
|
partyId="partyOne"
|
||||||
@ -79,7 +79,7 @@ describe('AccountManager', () => {
|
|||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(screen.getByText('No accounts')).toBeInTheDocument();
|
expect(screen.getByText('No accounts')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
await act(() => {
|
await act(async () => {
|
||||||
rerenderer(
|
rerenderer(
|
||||||
<AccountManager
|
<AccountManager
|
||||||
partyId="partyOne"
|
partyId="partyOne"
|
||||||
|
@ -22,7 +22,7 @@ import {
|
|||||||
} from '@vegaprotocol/ui-toolkit';
|
} from '@vegaprotocol/ui-toolkit';
|
||||||
import { TooltipCellComponent } from '@vegaprotocol/ui-toolkit';
|
import { TooltipCellComponent } from '@vegaprotocol/ui-toolkit';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
CenteredGridCellWrapper,
|
CenteredGridCellWrapper,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
|
@ -11,7 +11,7 @@ import type {
|
|||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { progressBarCellRendererSelector } from '@vegaprotocol/datagrid';
|
import { progressBarCellRendererSelector } from '@vegaprotocol/datagrid';
|
||||||
import { AgGridDynamic as AgGrid, PriceCell } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid, PriceCell } from '@vegaprotocol/datagrid';
|
||||||
import type { ValueFormatterParams } from 'ag-grid-community';
|
import type { ValueFormatterParams } from 'ag-grid-community';
|
||||||
import { accountValuesComparator } from './accounts-table';
|
import { accountValuesComparator } from './accounts-table';
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
export * from './lib/ag-grid/ag-grid-dynamic';
|
|
||||||
export * from './lib/ag-grid/ag-grid-lazy';
|
export * from './lib/ag-grid/ag-grid-lazy';
|
||||||
|
|
||||||
export * from './lib/cells/cumulative-vol-cell';
|
export * from './lib/cells/cumulative-vol-cell';
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
import type { ReactNode } from 'react';
|
|
||||||
import colors from 'tailwindcss/colors';
|
|
||||||
import 'ag-grid-community/dist/styles/ag-theme-balham-dark.css';
|
|
||||||
|
|
||||||
const agGridDarkVariables = `
|
|
||||||
.ag-theme-balham-dark {
|
|
||||||
--ag-background-color: ${colors.black};
|
|
||||||
--ag-border-color: ${colors.neutral[700]};
|
|
||||||
--ag-header-background-color: ${colors.black};
|
|
||||||
--ag-odd-row-background-color: ${colors.black};
|
|
||||||
--ag-header-column-separator-color: ${colors.neutral[600]};
|
|
||||||
--ag-row-border-color:${colors.black};
|
|
||||||
--ag-row-hover-color: ${colors.neutral[800]};
|
|
||||||
--ag-font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham-dark .ag-root-wrapper {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham-dark .ag-row {
|
|
||||||
border-width: 1px 0;
|
|
||||||
border-bottom: 1px solid transparent;
|
|
||||||
}
|
|
||||||
.ag-theme-balham-dark .ag-row.no-hover, .ag-theme-balham-dark .ag-row.no-hover:hover {
|
|
||||||
background: black;
|
|
||||||
}
|
|
||||||
.ag-theme-balham-dark .ag-react-container {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham-dark .ag-cell, .ag-theme-balham-dark .ag-full-width-row .ag-cell-wrapper.ag-row-group {
|
|
||||||
line-height: calc(min(var(--ag-line-height, 26px), 26px) - 4px);
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const AgGrid = ({
|
|
||||||
children,
|
|
||||||
customThemeParams,
|
|
||||||
}: {
|
|
||||||
children: ReactNode;
|
|
||||||
customThemeParams?: string;
|
|
||||||
}) => (
|
|
||||||
<>
|
|
||||||
<style>{agGridDarkVariables}</style>
|
|
||||||
{customThemeParams && <style>{customThemeParams}</style>}
|
|
||||||
{children}
|
|
||||||
</>
|
|
||||||
);
|
|
@ -1,59 +0,0 @@
|
|||||||
import type { ReactNode, FunctionComponent } from 'react';
|
|
||||||
import dynamic from 'next/dynamic';
|
|
||||||
import type { AgGridReactProps, AgReactUiProps } from 'ag-grid-react';
|
|
||||||
import { AgGridReact } from 'ag-grid-react';
|
|
||||||
import { useThemeSwitcher } from '@vegaprotocol/react-helpers';
|
|
||||||
import 'ag-grid-community/dist/styles/ag-grid.css';
|
|
||||||
|
|
||||||
interface GridProps {
|
|
||||||
children: ReactNode;
|
|
||||||
customThemeParams: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const AgGridLightTheme = dynamic<GridProps>(
|
|
||||||
() => import('./ag-grid-light').then((mod) => mod.AgGrid),
|
|
||||||
{ ssr: false }
|
|
||||||
) as FunctionComponent<GridProps>;
|
|
||||||
|
|
||||||
const AgGridDarkTheme = dynamic(
|
|
||||||
() => import('./ag-grid-dark').then((mod) => mod.AgGrid),
|
|
||||||
{ ssr: false }
|
|
||||||
) as FunctionComponent<GridProps>;
|
|
||||||
|
|
||||||
export const AgGridThemed = ({
|
|
||||||
style,
|
|
||||||
className,
|
|
||||||
gridRef,
|
|
||||||
customThemeParams = '',
|
|
||||||
...props
|
|
||||||
}: (AgGridReactProps | AgReactUiProps) & {
|
|
||||||
style?: React.CSSProperties;
|
|
||||||
className?: string;
|
|
||||||
gridRef?: React.ForwardedRef<AgGridReact>;
|
|
||||||
customThemeParams?: string;
|
|
||||||
}) => {
|
|
||||||
const { theme } = useThemeSwitcher();
|
|
||||||
const defaultProps = {
|
|
||||||
rowHeight: 22,
|
|
||||||
headerHeight: 22,
|
|
||||||
enableCellTextSelection: true,
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={`${className ?? ''} ${
|
|
||||||
theme === 'dark' ? 'ag-theme-balham-dark' : 'ag-theme-balham'
|
|
||||||
}`}
|
|
||||||
style={style}
|
|
||||||
>
|
|
||||||
{theme === 'dark' ? (
|
|
||||||
<AgGridDarkTheme customThemeParams={customThemeParams}>
|
|
||||||
<AgGridReact {...defaultProps} {...props} ref={gridRef} />
|
|
||||||
</AgGridDarkTheme>
|
|
||||||
) : (
|
|
||||||
<AgGridLightTheme customThemeParams={customThemeParams}>
|
|
||||||
<AgGridReact {...defaultProps} {...props} ref={gridRef} />
|
|
||||||
</AgGridLightTheme>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,29 +0,0 @@
|
|||||||
import * as React from 'react';
|
|
||||||
import dynamic from 'next/dynamic';
|
|
||||||
|
|
||||||
import type {
|
|
||||||
AgGridReactProps,
|
|
||||||
AgReactUiProps,
|
|
||||||
AgGridReact,
|
|
||||||
} from 'ag-grid-react';
|
|
||||||
|
|
||||||
type Props = (AgGridReactProps | AgReactUiProps) & {
|
|
||||||
style?: React.CSSProperties;
|
|
||||||
className?: string;
|
|
||||||
gridRef?: React.Ref<AgGridReact>;
|
|
||||||
customThemeParams?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
// https://stackoverflow.com/questions/69433673/nextjs-reactdomserver-does-not-yet-support-suspense
|
|
||||||
const AgGridDynamicInternal = dynamic<Props>(
|
|
||||||
() => import('./ag-grid-dynamic-themed').then((mod) => mod.AgGridThemed),
|
|
||||||
{
|
|
||||||
ssr: false,
|
|
||||||
// https://nextjs.org/docs/messages/invalid-dynamic-suspense
|
|
||||||
// suspense: true
|
|
||||||
}
|
|
||||||
) as React.FunctionComponent<Props>;
|
|
||||||
|
|
||||||
export const AgGridDynamic = React.forwardRef<AgGridReact, Props>(
|
|
||||||
(props, ref) => <AgGridDynamicInternal {...props} gridRef={ref} />
|
|
||||||
);
|
|
@ -1,45 +1,30 @@
|
|||||||
import * as React from 'react';
|
|
||||||
import type { AgGridReactProps, AgReactUiProps } from 'ag-grid-react';
|
import type { AgGridReactProps, AgReactUiProps } from 'ag-grid-react';
|
||||||
import { AgGridReact } from 'ag-grid-react';
|
import { AgGridReact } from 'ag-grid-react';
|
||||||
import { useThemeSwitcher } from '@vegaprotocol/react-helpers';
|
import { useThemeSwitcher } from '@vegaprotocol/react-helpers';
|
||||||
import 'ag-grid-community/dist/styles/ag-grid.css';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
const AgGridLightTheme = React.lazy(() =>
|
export const AgGridThemed = ({
|
||||||
import('./ag-grid-light').then((module) => ({
|
style,
|
||||||
default: module.AgGrid,
|
gridRef,
|
||||||
}))
|
...props
|
||||||
);
|
}: (AgGridReactProps | AgReactUiProps) & {
|
||||||
|
style?: React.CSSProperties;
|
||||||
const AgGridDarkTheme = React.lazy(() =>
|
gridRef?: React.ForwardedRef<AgGridReact>;
|
||||||
import('./ag-grid-dark').then((module) => ({
|
}) => {
|
||||||
default: module.AgGrid,
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
|
|
||||||
export const AgGridThemed = React.forwardRef<
|
|
||||||
AgGridReact,
|
|
||||||
(AgGridReactProps | AgReactUiProps) & {
|
|
||||||
style?: React.CSSProperties;
|
|
||||||
className?: string;
|
|
||||||
}
|
|
||||||
>(({ style, className, ...props }, ref) => {
|
|
||||||
const { theme } = useThemeSwitcher();
|
const { theme } = useThemeSwitcher();
|
||||||
|
const defaultProps = {
|
||||||
|
rowHeight: 22,
|
||||||
|
headerHeight: 22,
|
||||||
|
enableCellTextSelection: true,
|
||||||
|
};
|
||||||
|
const wrapperClasses = classNames('vega-ag-grid', {
|
||||||
|
'ag-theme-balham': theme === 'light',
|
||||||
|
'ag-theme-balham-dark': theme === 'dark',
|
||||||
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div className={wrapperClasses} style={style}>
|
||||||
className={`${className ?? ''} ${
|
<AgGridReact {...defaultProps} {...props} ref={gridRef} />
|
||||||
theme === 'dark' ? 'ag-theme-balham-dark' : 'ag-theme-balham'
|
|
||||||
}`}
|
|
||||||
style={style}
|
|
||||||
>
|
|
||||||
{theme === 'dark' ? (
|
|
||||||
<AgGridDarkTheme>
|
|
||||||
<AgGridReact {...props} ref={ref} enableCellTextSelection={true} />
|
|
||||||
</AgGridDarkTheme>
|
|
||||||
) : (
|
|
||||||
<AgGridLightTheme>
|
|
||||||
<AgGridReact {...props} ref={ref} enableCellTextSelection={true} />
|
|
||||||
</AgGridLightTheme>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
});
|
};
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
import * as React from 'react';
|
import { forwardRef, lazy } from 'react';
|
||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReactProps, AgGridReact } from 'ag-grid-react';
|
||||||
|
|
||||||
export const AgGridLazyInternal = React.lazy(() =>
|
type Props = AgGridReactProps & {
|
||||||
|
style?: React.CSSProperties;
|
||||||
|
gridRef?: React.Ref<AgGridReact>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const AgGridLazyInternal = lazy(() =>
|
||||||
import('./ag-grid-lazy-themed').then((module) => ({
|
import('./ag-grid-lazy-themed').then((module) => ({
|
||||||
default: module.AgGridThemed,
|
default: module.AgGridThemed,
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
export const AgGridLazy = React.forwardRef<AgGridReact>((props, ref) => (
|
export const AgGridLazy = forwardRef<AgGridReact, Props>((props, ref) => (
|
||||||
<AgGridLazyInternal {...props} ref={ref} />
|
<AgGridLazyInternal {...props} gridRef={ref} />
|
||||||
));
|
));
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
import type { ReactNode } from 'react';
|
|
||||||
import colors from 'tailwindcss/colors';
|
|
||||||
import 'ag-grid-community/dist/styles/ag-theme-balham.css';
|
|
||||||
|
|
||||||
const agGridLightVariables = `
|
|
||||||
.ag-theme-balham {
|
|
||||||
--ag-background-color: ${colors.white};
|
|
||||||
--ag-border-color: ${colors.neutral[300]};
|
|
||||||
--ag-header-background-color: ${colors.white};
|
|
||||||
--ag-odd-row-background-color: ${colors.white};
|
|
||||||
--ag-header-column-separator-color: ${colors.neutral[300]};
|
|
||||||
--ag-row-border-color: ${colors.white};
|
|
||||||
--ag-row-hover-color: ${colors.neutral[100]};
|
|
||||||
--ag-font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham .ag-root-wrapper {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham .ag-row {
|
|
||||||
border-width: 1px 0;
|
|
||||||
border-bottom: 1px solid transparent;
|
|
||||||
}
|
|
||||||
.ag-theme-balham .ag-row.no-hover, .ag-theme-balham .ag-row.no-hover:hover {
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
.ag-theme-balham .ag-react-container {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ag-theme-balham .ag-cell, .ag-theme-balham .ag-full-width-row .ag-cell-wrapper.ag-row-group {
|
|
||||||
line-height: calc(min(var(--ag-line-height, 26px), 26px) - 4px);
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const AgGrid = ({
|
|
||||||
children,
|
|
||||||
customThemeParams,
|
|
||||||
}: {
|
|
||||||
children: ReactNode;
|
|
||||||
customThemeParams?: string;
|
|
||||||
}) => (
|
|
||||||
<>
|
|
||||||
<style>{agGridLightVariables}</style>
|
|
||||||
{customThemeParams && <style>{customThemeParams}</style>}
|
|
||||||
{children}
|
|
||||||
</>
|
|
||||||
);
|
|
@ -8,7 +8,7 @@ import {
|
|||||||
} from '@vegaprotocol/utils';
|
} from '@vegaprotocol/utils';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReact } from 'ag-grid-react';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import type {
|
import type {
|
||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
|
@ -15,7 +15,7 @@ import { t } from '@vegaprotocol/i18n';
|
|||||||
import * as Schema from '@vegaprotocol/types';
|
import * as Schema from '@vegaprotocol/types';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
positiveClassNames,
|
positiveClassNames,
|
||||||
negativeClassNames,
|
negativeClassNames,
|
||||||
MarketNameCell,
|
MarketNameCell,
|
||||||
|
@ -10,7 +10,7 @@ import type {
|
|||||||
TypedDataAgGrid,
|
TypedDataAgGrid,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
DateRangeFilter,
|
DateRangeFilter,
|
||||||
SetFilter,
|
SetFilter,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
|
@ -9,7 +9,7 @@ import type {
|
|||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
TypedDataAgGrid,
|
TypedDataAgGrid,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import { TooltipCellComponent } from '@vegaprotocol/ui-toolkit';
|
import { TooltipCellComponent } from '@vegaprotocol/ui-toolkit';
|
||||||
import type { AgGridReact } from 'ag-grid-react';
|
import type { AgGridReact } from 'ag-grid-react';
|
||||||
import { AgGridColumn } from 'ag-grid-react';
|
import { AgGridColumn } from 'ag-grid-react';
|
||||||
|
@ -8,7 +8,7 @@ import type {
|
|||||||
TypedDataAgGrid,
|
TypedDataAgGrid,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
PriceFlashCell,
|
PriceFlashCell,
|
||||||
MarketNameCell,
|
MarketNameCell,
|
||||||
SetFilter,
|
SetFilter,
|
||||||
|
@ -10,7 +10,7 @@ import { AgGridColumn } from 'ag-grid-react';
|
|||||||
import BigNumber from 'bignumber.js';
|
import BigNumber from 'bignumber.js';
|
||||||
import { memo, forwardRef } from 'react';
|
import { memo, forwardRef } from 'react';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
SetFilter,
|
SetFilter,
|
||||||
DateRangeFilter,
|
DateRangeFilter,
|
||||||
negativeClassNames,
|
negativeClassNames,
|
||||||
|
@ -10,7 +10,7 @@ import type {
|
|||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { ProgressBarCell } from '@vegaprotocol/datagrid';
|
import { ProgressBarCell } from '@vegaprotocol/datagrid';
|
||||||
import {
|
import {
|
||||||
AgGridDynamic as AgGrid,
|
AgGridLazy as AgGrid,
|
||||||
DateRangeFilter,
|
DateRangeFilter,
|
||||||
PriceFlashCell,
|
PriceFlashCell,
|
||||||
signedNumberCssClass,
|
signedNumberCssClass,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import { useDataProvider } from '@vegaprotocol/react-helpers';
|
import { useDataProvider } from '@vegaprotocol/react-helpers';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import * as Types from '@vegaprotocol/types';
|
import * as Types from '@vegaprotocol/types';
|
||||||
@ -9,13 +9,6 @@ import type { AgGridReact } from 'ag-grid-react';
|
|||||||
import { useColumnDefs } from './use-column-defs';
|
import { useColumnDefs } from './use-column-defs';
|
||||||
import type { ProposalListFieldsFragment } from '../proposals-data-provider/__generated__/Proposals';
|
import type { ProposalListFieldsFragment } from '../proposals-data-provider/__generated__/Proposals';
|
||||||
|
|
||||||
// prevent cutting filter windows by auto-height layout
|
|
||||||
const CUSTOM_GRID_STYLES = `
|
|
||||||
.ag-layout-auto-height {
|
|
||||||
min-height: 200px !important;
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
|
|
||||||
export const getNewMarketProposals = (data: ProposalListFieldsFragment[]) =>
|
export const getNewMarketProposals = (data: ProposalListFieldsFragment[]) =>
|
||||||
data.filter((proposal) =>
|
data.filter((proposal) =>
|
||||||
[
|
[
|
||||||
@ -58,7 +51,6 @@ export const ProposalsList = () => {
|
|||||||
suppressLoadingOverlay
|
suppressLoadingOverlay
|
||||||
suppressNoRowsOverlay
|
suppressNoRowsOverlay
|
||||||
onFilterChanged={onFilterChanged}
|
onFilterChanged={onFilterChanged}
|
||||||
customThemeParams={CUSTOM_GRID_STYLES}
|
|
||||||
/>
|
/>
|
||||||
<div className="pointer-events-none absolute inset-0">
|
<div className="pointer-events-none absolute inset-0">
|
||||||
<AsyncRenderer
|
<AsyncRenderer
|
||||||
|
@ -5,7 +5,7 @@ import type {
|
|||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
VegaValueFormatterParams,
|
VegaValueFormatterParams,
|
||||||
} from '@vegaprotocol/datagrid';
|
} from '@vegaprotocol/datagrid';
|
||||||
import { AgGridDynamic as AgGrid, NumericCell } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid, NumericCell } from '@vegaprotocol/datagrid';
|
||||||
import {
|
import {
|
||||||
addDecimal,
|
addDecimal,
|
||||||
addDecimalsFormatNumber,
|
addDecimalsFormatNumber,
|
||||||
|
@ -10,7 +10,7 @@ import {
|
|||||||
import { useBottomPlaceholder } from '@vegaprotocol/react-helpers';
|
import { useBottomPlaceholder } from '@vegaprotocol/react-helpers';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import { AgGridDynamic as AgGrid } from '@vegaprotocol/datagrid';
|
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
|
||||||
import type {
|
import type {
|
||||||
TypedDataAgGrid,
|
TypedDataAgGrid,
|
||||||
VegaICellRendererParams,
|
VegaICellRendererParams,
|
||||||
|
Loading…
Reference in New Issue
Block a user