chore(trading): remove unnecessary forwarding of grid refs (#4486)

This commit is contained in:
Matthew Russell 2023-08-04 11:08:28 +01:00 committed by GitHub
parent 015e0188ec
commit 1041864ad8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 1082 additions and 1181 deletions

View File

@ -4,12 +4,9 @@ import { depositsProvider } from '@vegaprotocol/deposits';
import { t } from '@vegaprotocol/i18n'; import { t } from '@vegaprotocol/i18n';
import { useDataProvider } from '@vegaprotocol/data-provider'; import { useDataProvider } from '@vegaprotocol/data-provider';
import { useVegaWallet } from '@vegaprotocol/wallet'; import { useVegaWallet } from '@vegaprotocol/wallet';
import { useRef } from 'react';
import type { AgGridReact } from 'ag-grid-react';
import { useSidebar, ViewType } from '../../components/sidebar'; import { useSidebar, ViewType } from '../../components/sidebar';
export const DepositsContainer = () => { export const DepositsContainer = () => {
const gridRef = useRef<AgGridReact | null>(null);
const { pubKey, isReadOnly } = useVegaWallet(); const { pubKey, isReadOnly } = useVegaWallet();
const { data, error } = useDataProvider({ const { data, error } = useDataProvider({
dataProvider: depositsProvider, dataProvider: depositsProvider,
@ -24,7 +21,6 @@ export const DepositsContainer = () => {
<div className="h-full"> <div className="h-full">
<DepositsTable <DepositsTable
rowData={data} rowData={data}
ref={gridRef}
overlayNoRowsTemplate={error ? error.message : t('No deposits')} overlayNoRowsTemplate={error ? error.message : t('No deposits')}
/> />
{!isReadOnly && ( {!isReadOnly && (

View File

@ -118,7 +118,6 @@ export const AccountManager = ({
onMarketClick, onMarketClick,
gridProps, gridProps,
}: AccountManagerProps) => { }: AccountManagerProps) => {
const gridRef = useRef<AgGridReact | null>(null);
const [breakdownAssetId, setBreakdownAssetId] = useState<string>(); const [breakdownAssetId, setBreakdownAssetId] = useState<string>();
const { data, error } = useDataProvider({ const { data, error } = useDataProvider({
dataProvider: aggregatedAccountsDataProvider, dataProvider: aggregatedAccountsDataProvider,
@ -138,7 +137,6 @@ export const AccountManager = ({
return ( return (
<div className="relative h-full"> <div className="relative h-full">
<AccountTable <AccountTable
ref={gridRef}
rowData={data} rowData={data}
onClickAsset={onClickAsset} onClickAsset={onClickAsset}
onClickDeposit={onClickDeposit} onClickDeposit={onClickDeposit}

View File

@ -1,4 +1,4 @@
import { forwardRef, useMemo, useCallback } from 'react'; import { useMemo, useCallback } from 'react';
import { import {
addDecimalsFormatNumber, addDecimalsFormatNumber,
addDecimalsFormatNumberQuantum, addDecimalsFormatNumberQuantum,
@ -21,7 +21,7 @@ import type {
RowHeightParams, RowHeightParams,
ColDef, ColDef,
} from 'ag-grid-community'; } from 'ag-grid-community';
import type { AgGridReact, AgGridReactProps } from 'ag-grid-react'; import type { AgGridReactProps } from 'ag-grid-react';
import type { AccountFields } from './accounts-data-provider'; import type { AccountFields } from './accounts-data-provider';
import type { Asset } from '@vegaprotocol/types'; import type { Asset } from '@vegaprotocol/types';
import { CenteredGridCellWrapper } from '@vegaprotocol/datagrid'; import { CenteredGridCellWrapper } from '@vegaprotocol/datagrid';
@ -75,9 +75,7 @@ export interface AccountTableProps extends AgGridReactProps {
pinnedAsset?: PinnedAsset; pinnedAsset?: PinnedAsset;
} }
export const AccountTable = forwardRef<AgGridReact, AccountTableProps>( export const AccountTable = ({
(
{
onClickAsset, onClickAsset,
onClickWithdraw, onClickWithdraw,
onClickDeposit, onClickDeposit,
@ -87,9 +85,7 @@ export const AccountTable = forwardRef<AgGridReact, AccountTableProps>(
isReadOnly, isReadOnly,
pinnedAsset, pinnedAsset,
...props ...props
}, }: AccountTableProps) => {
ref
) => {
const pinnedRow = useMemo(() => { const pinnedRow = useMemo(() => {
if (!pinnedAsset) { if (!pinnedAsset) {
return; return;
@ -312,7 +308,6 @@ export const AccountTable = forwardRef<AgGridReact, AccountTableProps>(
{...props} {...props}
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
getRowId={({ data }: { data: AccountFields }) => data.asset.id} getRowId={({ data }: { data: AccountFields }) => data.asset.id}
ref={ref}
tooltipShowDelay={500} tooltipShowDelay={500}
rowData={data} rowData={data}
defaultColDef={{ defaultColDef={{
@ -326,5 +321,4 @@ export const AccountTable = forwardRef<AgGridReact, AccountTableProps>(
pinnedTopRowData={pinnedRow ? [pinnedRow] : undefined} pinnedTopRowData={pinnedRow ? [pinnedRow] : undefined}
/> />
); );
} };
);

View File

@ -21,5 +21,4 @@ export * from './lib/type-helpers';
export * from './lib/cells/grid-progress-bar'; export * from './lib/cells/grid-progress-bar';
export * from './lib/ag-grid-update';
export * from './lib/use-datagrid-events'; export * from './lib/use-datagrid-events';

View File

@ -1,20 +0,0 @@
import type { MutableRefObject, RefObject } from 'react';
import type { AgGridReact } from 'ag-grid-react';
type AnyArray = Array<any> | null; // eslint-disable-line @typescript-eslint/no-explicit-any
export const isXOrWasEmpty = (prev?: AnyArray, curr?: AnyArray) =>
Boolean(Number(!!prev?.length) ^ Number(!!curr?.length));
export const updateGridData = (
dataRef: MutableRefObject<AnyArray>,
data: AnyArray,
gridRef: RefObject<AgGridReact>
) => {
const rerender = isXOrWasEmpty(dataRef.current, data);
dataRef.current = data;
if (gridRef.current?.api?.getModel().getType() === 'infinite') {
gridRef.current?.api?.refreshInfiniteCache();
}
return !rerender;
};

View File

@ -1,4 +1,4 @@
import { forwardRef, useMemo } from 'react'; import { useMemo } from 'react';
import { import {
addDecimalsFormatNumber, addDecimalsFormatNumber,
getDateTimeFormat, getDateTimeFormat,
@ -6,7 +6,6 @@ import {
isNumeric, isNumeric,
} from '@vegaprotocol/utils'; } from '@vegaprotocol/utils';
import type { ColDef } from 'ag-grid-community'; import type { ColDef } from 'ag-grid-community';
import type { AgGridReact } from 'ag-grid-react';
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid'; import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
import type { import type {
VegaICellRendererParams, VegaICellRendererParams,
@ -17,10 +16,9 @@ import type { DepositFieldsFragment } from './__generated__/Deposit';
import { EtherscanLink } from '@vegaprotocol/environment'; import { EtherscanLink } from '@vegaprotocol/environment';
import { DepositStatusMapping } from '@vegaprotocol/types'; import { DepositStatusMapping } from '@vegaprotocol/types';
export const DepositsTable = forwardRef< export const DepositsTable = (
AgGridReact, props: TypedDataAgGrid<DepositFieldsFragment>
TypedDataAgGrid<DepositFieldsFragment> ) => {
>((props, ref) => {
const columnDefs = useMemo<ColDef[]>( const columnDefs = useMemo<ColDef[]>(
() => [ () => [
{ headerName: 'Asset', field: 'asset.symbol' }, { headerName: 'Asset', field: 'asset.symbol' },
@ -79,11 +77,10 @@ export const DepositsTable = forwardRef<
); );
return ( return (
<AgGrid <AgGrid
ref={ref}
defaultColDef={{ flex: 1 }} defaultColDef={{ flex: 1 }}
columnDefs={columnDefs} columnDefs={columnDefs}
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
{...props} {...props}
/> />
); );
}); };

View File

@ -1,8 +1,7 @@
import { t } from '@vegaprotocol/i18n'; import { t } from '@vegaprotocol/i18n';
import type * as Schema from '@vegaprotocol/types'; import type * as Schema from '@vegaprotocol/types';
import type { FilterChangedEvent } from 'ag-grid-community'; import type { FilterChangedEvent } from 'ag-grid-community';
import type { AgGridReact } from 'ag-grid-react'; import { useCallback, useState, useMemo } from 'react';
import { useCallback, useRef, useState, useMemo } from 'react';
import { subDays, formatRFC3339 } from 'date-fns'; import { subDays, formatRFC3339 } from 'date-fns';
import { ledgerEntriesProvider } from './ledger-entries-data-provider'; import { ledgerEntriesProvider } from './ledger-entries-data-provider';
import type { LedgerEntriesQueryVariables } from './__generated__/LedgerEntries'; import type { LedgerEntriesQueryVariables } from './__generated__/LedgerEntries';
@ -32,7 +31,6 @@ export const LedgerManager = ({
partyId: string; partyId: string;
gridProps: ReturnType<typeof useDataGridEvents>; gridProps: ReturnType<typeof useDataGridEvents>;
}) => { }) => {
const gridRef = useRef<AgGridReact | null>(null);
const [filter, setFilter] = useState<Filter>(defaultFilter); const [filter, setFilter] = useState<Filter>(defaultFilter);
const variables = useMemo<LedgerEntriesQueryVariables>( const variables = useMemo<LedgerEntriesQueryVariables>(
@ -64,7 +62,6 @@ export const LedgerManager = ({
return ( return (
<div className="h-full relative"> <div className="h-full relative">
<LedgerTable <LedgerTable
ref={gridRef}
rowData={data} rowData={data}
overlayNoRowsTemplate={error ? error.message : t('No entries')} overlayNoRowsTemplate={error ? error.message : t('No entries')}
{...gridProps} {...gridProps}

View File

@ -14,7 +14,6 @@ import {
DateRangeFilter, DateRangeFilter,
SetFilter, SetFilter,
} from '@vegaprotocol/datagrid'; } from '@vegaprotocol/datagrid';
import type { AgGridReact } from 'ag-grid-react';
import type * as Types from '@vegaprotocol/types'; import type * as Types from '@vegaprotocol/types';
import type { ColDef } from 'ag-grid-community'; import type { ColDef } from 'ag-grid-community';
import { import {
@ -23,7 +22,7 @@ import {
TransferTypeMapping, TransferTypeMapping,
} from '@vegaprotocol/types'; } from '@vegaprotocol/types';
import type { LedgerEntry } from './ledger-entries-data-provider'; import type { LedgerEntry } from './ledger-entries-data-provider';
import { forwardRef, useMemo } from 'react'; import { useMemo } from 'react';
import { formatRFC3339, subDays } from 'date-fns'; import { formatRFC3339, subDays } from 'date-fns';
export const TransferTooltipCellComponent = ({ export const TransferTooltipCellComponent = ({
@ -45,8 +44,7 @@ const dateRangeFilterParams = {
}; };
type LedgerEntryProps = TypedDataAgGrid<LedgerEntry>; type LedgerEntryProps = TypedDataAgGrid<LedgerEntry>;
export const LedgerTable = forwardRef<AgGridReact, LedgerEntryProps>( export const LedgerTable = (props: LedgerEntryProps) => {
(props, ref) => {
const columnDefs = useMemo<ColDef[]>( const columnDefs = useMemo<ColDef[]>(
() => [ () => [
{ {
@ -187,7 +185,6 @@ export const LedgerTable = forwardRef<AgGridReact, LedgerEntryProps>(
return ( return (
<AgGrid <AgGrid
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
ref={ref}
tooltipShowDelay={500} tooltipShowDelay={500}
defaultColDef={{ defaultColDef={{
resizable: true, resizable: true,
@ -202,5 +199,4 @@ export const LedgerTable = forwardRef<AgGridReact, LedgerEntryProps>(
{...props} {...props}
/> />
); );
} };
);

View File

@ -1,11 +1,9 @@
import React, { forwardRef } from 'react';
import type { TypedDataAgGrid } from '@vegaprotocol/datagrid'; import type { TypedDataAgGrid } from '@vegaprotocol/datagrid';
import { import {
AgGridLazy as AgGrid, AgGridLazy as AgGrid,
PriceFlashCell, PriceFlashCell,
MarketNameCell, MarketNameCell,
} from '@vegaprotocol/datagrid'; } from '@vegaprotocol/datagrid';
import type { AgGridReact } from 'ag-grid-react';
import type { MarketMaybeWithData } from '../../markets-provider'; import type { MarketMaybeWithData } from '../../markets-provider';
import { OracleStatus } from './oracle-status'; import { OracleStatus } from './oracle-status';
import { useColumnDefs } from './use-column-defs'; import { useColumnDefs } from './use-column-defs';
@ -43,14 +41,15 @@ const defaultColDef = {
filterParams: { buttons: ['reset'] }, filterParams: { buttons: ['reset'] },
minWidth: 100, minWidth: 100,
}; };
type Props = TypedDataAgGrid<MarketMaybeWithData> & {
export const MarketListTable = forwardRef<
AgGridReact,
TypedDataAgGrid<MarketMaybeWithData> & {
onMarketClick: (marketId: string, metaKey?: boolean) => void; onMarketClick: (marketId: string, metaKey?: boolean) => void;
SuccessorMarketRenderer?: React.FC<{ value: string }>; SuccessorMarketRenderer?: React.FC<{ value: string }>;
} };
>(({ onMarketClick, SuccessorMarketRenderer, ...props }, ref) => { export const MarketListTable = ({
onMarketClick,
SuccessorMarketRenderer,
...props
}: Props) => {
const columnDefs = useColumnDefs({ onMarketClick }); const columnDefs = useColumnDefs({ onMarketClick });
const components = { const components = {
PriceFlashCell, PriceFlashCell,
@ -61,7 +60,6 @@ export const MarketListTable = forwardRef<
<AgGrid <AgGrid
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
getRowId={getRowId} getRowId={getRowId}
ref={ref}
defaultColDef={defaultColDef} defaultColDef={defaultColDef}
columnDefs={columnDefs} columnDefs={columnDefs}
suppressCellFocus suppressCellFocus
@ -69,6 +67,6 @@ export const MarketListTable = forwardRef<
{...props} {...props}
/> />
); );
}); };
export default MarketListTable; export default MarketListTable;

View File

@ -1,6 +1,5 @@
import type { MouseEvent } from 'react'; import type { MouseEvent } from 'react';
import React, { useEffect, useRef } from 'react'; import React, { useEffect } from 'react';
import type { AgGridReact } from 'ag-grid-react';
import type { CellClickedEvent } from 'ag-grid-community'; import type { CellClickedEvent } from 'ag-grid-community';
import { t } from '@vegaprotocol/i18n'; import { t } from '@vegaprotocol/i18n';
import { MarketListTable } from './market-list-table'; import { MarketListTable } from './market-list-table';
@ -18,8 +17,6 @@ export const MarketsContainer = ({
onSelect, onSelect,
SuccessorMarketRenderer, SuccessorMarketRenderer,
}: MarketsContainerProps) => { }: MarketsContainerProps) => {
const gridRef = useRef<AgGridReact | null>(null);
const { data, error, reload } = useDataProvider({ const { data, error, reload } = useDataProvider({
dataProvider, dataProvider,
variables: undefined, variables: undefined,
@ -37,7 +34,6 @@ export const MarketsContainer = ({
return ( return (
<div className="h-full relative"> <div className="h-full relative">
<MarketListTable <MarketListTable
ref={gridRef}
rowData={data} rowData={data}
onCellClicked={(cellEvent: CellClickedEvent) => { onCellClicked={(cellEvent: CellClickedEvent) => {
const { data, column, event } = cellEvent; const { data, column, event } = cellEvent;

View File

@ -2,17 +2,13 @@ import { render, screen, act } from '@testing-library/react';
import { StopOrdersManager } from './stop-orders-manager'; import { StopOrdersManager } from './stop-orders-manager';
import * as useDataProviderHook from '@vegaprotocol/data-provider'; import * as useDataProviderHook from '@vegaprotocol/data-provider';
import type { StopOrder } from '../order-data-provider/stop-orders-data-provider'; import type { StopOrder } from '../order-data-provider/stop-orders-data-provider';
import * as stopOrdersTableMock from '../stop-orders-table/stop-orders-table';
import { forwardRef } from 'react';
import type { VegaWalletContextShape } from '@vegaprotocol/wallet'; import type { VegaWalletContextShape } from '@vegaprotocol/wallet';
import { VegaWalletContext } from '@vegaprotocol/wallet'; import { VegaWalletContext } from '@vegaprotocol/wallet';
import { MockedProvider } from '@apollo/client/testing'; import { MockedProvider } from '@apollo/client/testing';
// @ts-ignore StopOrdersTable is read only but we need to override with the forwardRef to jest.mock('../stop-orders-table/stop-orders-table', () => ({
// avoid warnings about padding refs StopOrdersTable: () => <div>StopOrdersTable</div>,
stopOrdersTableMock.StopOrdersTable = forwardRef(() => ( }));
<div>StopOrdersTable</div>
));
const generateJsx = () => { const generateJsx = () => {
const pubKey = '0x123'; const pubKey = '0x123';

View File

@ -8,7 +8,7 @@ import { t } from '@vegaprotocol/i18n';
import * as Schema from '@vegaprotocol/types'; import * as Schema from '@vegaprotocol/types';
import { ButtonLink } from '@vegaprotocol/ui-toolkit'; import { ButtonLink } from '@vegaprotocol/ui-toolkit';
import type { ForwardedRef } from 'react'; import type { ForwardedRef } from 'react';
import { memo, forwardRef, useMemo } from 'react'; import { memo, useMemo } from 'react';
import { import {
AgGridLazy as AgGrid, AgGridLazy as AgGrid,
SetFilter, SetFilter,
@ -36,9 +36,7 @@ export type StopOrdersTableProps = TypedDataAgGrid<StopOrder> & {
export const StopOrdersTable = memo< export const StopOrdersTable = memo<
StopOrdersTableProps & { ref?: ForwardedRef<AgGridReact> } StopOrdersTableProps & { ref?: ForwardedRef<AgGridReact> }
>( >(({ onCancel, onMarketClick, ...props }: StopOrdersTableProps) => {
forwardRef<AgGridReact, StopOrdersTableProps>(
({ onCancel, onMarketClick, ...props }, ref) => {
const showAllActions = !props.isReadOnly; const showAllActions = !props.isReadOnly;
const columnDefs: ColDef[] = useMemo( const columnDefs: ColDef[] = useMemo(
() => [ () => [
@ -70,10 +68,7 @@ export const StopOrdersTable = memo<
data.market.decimalPlaces data.market.decimalPlaces
)}`; )}`;
} }
if ( if (data && value?.__typename === 'StopOrderTrailingPercentOffset') {
data &&
value?.__typename === 'StopOrderTrailingPercentOffset'
) {
return `${t('Mark')} ${ return `${t('Mark')} ${
data?.triggerDirection === data?.triggerDirection ===
Schema.StopOrderTriggerDirection.TRIGGER_DIRECTION_FALLS_BELOW Schema.StopOrderTriggerDirection.TRIGGER_DIRECTION_FALLS_BELOW
@ -186,9 +181,7 @@ export const StopOrdersTable = memo<
valueFormatted: string; valueFormatted: string;
data: StopOrder; data: StopOrder;
}) => ( }) => (
<span data-testid={`order-status-${data?.id}`}> <span data-testid={`order-status-${data?.id}`}>{valueFormatted}</span>
{valueFormatted}
</span>
), ),
minWidth: 100, minWidth: 100,
}, },
@ -222,10 +215,7 @@ export const StopOrdersTable = memo<
}, },
valueFormatter: ({ valueFormatter: ({
value, value,
}: VegaValueFormatterParams< }: VegaValueFormatterParams<StopOrder, 'submission.timeInForce'>) => {
StopOrder,
'submission.timeInForce'
>) => {
return value ? Schema.OrderTimeInForceCode[value] : ''; return value ? Schema.OrderTimeInForceCode[value] : '';
}, },
minWidth: 150, minWidth: 150,
@ -279,7 +269,6 @@ export const StopOrdersTable = memo<
return ( return (
<AgGrid <AgGrid
ref={ref}
defaultColDef={{ defaultColDef={{
resizable: true, resizable: true,
sortable: true, sortable: true,
@ -295,6 +284,4 @@ export const StopOrdersTable = memo<
{...props} {...props}
/> />
); );
} });
)
);

View File

@ -1,5 +1,5 @@
import classNames from 'classnames'; import classNames from 'classnames';
import { forwardRef, useMemo } from 'react'; import { useMemo } from 'react';
import type { CSSProperties, ReactNode } from 'react'; import type { CSSProperties, ReactNode } from 'react';
import type { ColDef } from 'ag-grid-community'; import type { ColDef } from 'ag-grid-community';
import type { import type {
@ -33,7 +33,6 @@ import {
addDecimalsFormatNumber, addDecimalsFormatNumber,
} 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 { Position } from './positions-data-providers'; import type { Position } from './positions-data-providers';
import * as Schema from '@vegaprotocol/types'; import * as Schema from '@vegaprotocol/types';
import { PositionStatus, PositionStatusMapping } from '@vegaprotocol/types'; import { PositionStatus, PositionStatusMapping } from '@vegaprotocol/types';
@ -87,9 +86,7 @@ AmountCell.displayName = 'AmountCell';
export const getRowId = ({ data }: { data: Position }) => export const getRowId = ({ data }: { data: Position }) =>
`${data.partyId}-${data.marketId}`; `${data.partyId}-${data.marketId}`;
export const PositionsTable = forwardRef<AgGridReact, Props>( export const PositionsTable = ({
(
{
onClose, onClose,
onMarketClick, onMarketClick,
multipleKeys, multipleKeys,
@ -97,16 +94,13 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
pubKeys, pubKeys,
pubKey, pubKey,
...props ...props
}, }: Props) => {
ref
) => {
const { open: openAssetDetailsDialog } = useAssetDetailsDialogStore(); const { open: openAssetDetailsDialog } = useAssetDetailsDialogStore();
return ( return (
<AgGrid <AgGrid
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
overlayNoRowsTemplate={t('No positions')} overlayNoRowsTemplate={t('No positions')}
getRowId={getRowId} getRowId={getRowId}
ref={ref}
tooltipShowDelay={500} tooltipShowDelay={500}
defaultColDef={{ defaultColDef={{
resizable: true, resizable: true,
@ -154,10 +148,7 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
valueGetter: ({ data }: VegaValueGetterParams<Position>) => { valueGetter: ({ data }: VegaValueGetterParams<Position>) => {
return !data?.notional return !data?.notional
? undefined ? undefined
: toBigNum( : toBigNum(data.notional, data.marketDecimalPlaces).toNumber();
data.notional,
data.marketDecimalPlaces
).toNumber();
}, },
valueFormatter: ({ valueFormatter: ({
data, data,
@ -213,10 +204,7 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
data.marketTradingMode === data.marketTradingMode ===
Schema.MarketTradingMode.TRADING_MODE_OPENING_AUCTION Schema.MarketTradingMode.TRADING_MODE_OPENING_AUCTION
? undefined ? undefined
: toBigNum( : toBigNum(data.markPrice, data.marketDecimalPlaces).toNumber();
data.markPrice,
data.marketDecimalPlaces
).toNumber();
}, },
valueFormatter: ({ valueFormatter: ({
data, data,
@ -318,9 +306,7 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
valueFormatter: ({ valueFormatter: ({
value, value,
}: VegaValueFormatterParams<Position, 'currentLeverage'>) => }: VegaValueFormatterParams<Position, 'currentLeverage'>) =>
value === undefined value === undefined ? '' : formatNumber(value.toString(), 1),
? ''
: formatNumber(value.toString(), 1),
minWidth: 100, minWidth: 100,
}, },
multipleKeys multipleKeys
@ -422,9 +408,7 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
onClose && !isReadOnly onClose && !isReadOnly
? { ? {
...COL_DEFS.actions, ...COL_DEFS.actions,
cellRenderer: ({ cellRenderer: ({ data }: VegaICellRendererParams<Position>) => {
data,
}: VegaICellRendererParams<Position>) => {
return ( return (
<div className="flex gap-2 items-center justify-end"> <div className="flex gap-2 items-center justify-end">
{data?.openVolume && {data?.openVolume &&
@ -462,8 +446,7 @@ export const PositionsTable = forwardRef<AgGridReact, Props>(
])} ])}
/> />
); );
} };
);
export default PositionsTable; export default PositionsTable;

View File

@ -1,9 +1,7 @@
import React from 'react'; import React from 'react';
import { useRef } from 'react';
import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid'; import { AgGridLazy as AgGrid } from '@vegaprotocol/datagrid';
import { t } from '@vegaprotocol/i18n'; import { t } from '@vegaprotocol/i18n';
import * as Types from '@vegaprotocol/types'; import * as Types from '@vegaprotocol/types';
import type { AgGridReact } from 'ag-grid-react';
import { useColumnDefs } from './use-column-defs'; import { useColumnDefs } from './use-column-defs';
import type { ProposalListFieldsFragment } from '../../lib/proposals-data-provider/__generated__/Proposals'; import type { ProposalListFieldsFragment } from '../../lib/proposals-data-provider/__generated__/Proposals';
import { useProposalsListQuery } from '../../lib/proposals-data-provider/__generated__/Proposals'; import { useProposalsListQuery } from '../../lib/proposals-data-provider/__generated__/Proposals';
@ -25,7 +23,6 @@ interface ProposalListProps {
export const ProposalsList = ({ export const ProposalsList = ({
SuccessorMarketRenderer, SuccessorMarketRenderer,
}: ProposalListProps) => { }: ProposalListProps) => {
const gridRef = useRef<AgGridReact | null>(null);
const { data } = useProposalsListQuery({ const { data } = useProposalsListQuery({
variables: { variables: {
proposalType: Types.ProposalType.TYPE_NEW_MARKET, proposalType: Types.ProposalType.TYPE_NEW_MARKET,
@ -40,7 +37,6 @@ export const ProposalsList = ({
return ( return (
<div className="relative h-full"> <div className="relative h-full">
<AgGrid <AgGrid
ref={gridRef}
className="w-full h-full" className="w-full h-full"
columnDefs={columnDefs} columnDefs={columnDefs}
rowData={filteredData} rowData={filteredData}

View File

@ -1,6 +1,4 @@
import { useDataProvider } from '@vegaprotocol/data-provider'; import { useDataProvider } from '@vegaprotocol/data-provider';
import type { AgGridReact } from 'ag-grid-react';
import { useRef } from 'react';
import { tradesWithMarketProvider } from './trades-data-provider'; import { tradesWithMarketProvider } from './trades-data-provider';
import { TradesTable } from './trades-table'; import { TradesTable } from './trades-table';
import { useCreateOrderStore } from '@vegaprotocol/orders'; import { useCreateOrderStore } from '@vegaprotocol/orders';
@ -11,7 +9,6 @@ interface TradesContainerProps {
} }
export const TradesContainer = ({ marketId }: TradesContainerProps) => { export const TradesContainer = ({ marketId }: TradesContainerProps) => {
const gridRef = useRef<AgGridReact | null>(null);
const useOrderStoreRef = useCreateOrderStore(); const useOrderStoreRef = useCreateOrderStore();
const updateOrder = useOrderStoreRef((store) => store.update); const updateOrder = useOrderStoreRef((store) => store.update);
@ -22,7 +19,6 @@ export const TradesContainer = ({ marketId }: TradesContainerProps) => {
return ( return (
<TradesTable <TradesTable
ref={gridRef}
rowData={data} rowData={data}
onClick={(price?: string) => { onClick={(price?: string) => {
if (price) { if (price) {

View File

@ -1,7 +1,5 @@
import type { AgGridReact } from 'ag-grid-react';
import { useMemo } from 'react'; import { useMemo } from 'react';
import type { ColDef } from 'ag-grid-community'; import type { ColDef } from 'ag-grid-community';
import { forwardRef } from 'react';
import type { import type {
VegaICellRendererParams, VegaICellRendererParams,
VegaValueFormatterParams, VegaValueFormatterParams,
@ -48,8 +46,7 @@ interface Props extends AgGridReactProps {
onClick?: (price?: string) => void; onClick?: (price?: string) => void;
} }
export const TradesTable = forwardRef<AgGridReact, Props>( export const TradesTable = ({ onClick, ...props }: Props) => {
({ onClick, ...props }, ref) => {
const columnDefs = useMemo<ColDef[]>( const columnDefs = useMemo<ColDef[]>(
() => [ () => [
{ {
@ -125,7 +122,6 @@ export const TradesTable = forwardRef<AgGridReact, Props>(
<AgGrid <AgGrid
style={{ width: '100%', height: '100%' }} style={{ width: '100%', height: '100%' }}
getRowId={({ data }) => data.id} getRowId={({ data }) => data.id}
ref={ref}
defaultColDef={{ defaultColDef={{
flex: 1, flex: 1,
}} }}
@ -133,5 +129,4 @@ export const TradesTable = forwardRef<AgGridReact, Props>(
{...props} {...props}
/> />
); );
} };
);

View File

@ -1,5 +1,4 @@
import { useEffect, useRef, useState, useMemo } from 'react'; import { useEffect, useRef, useState, useMemo } from 'react';
import type { AgGridReact } from 'ag-grid-react';
import type { ColDef } from 'ag-grid-community'; import type { ColDef } from 'ag-grid-community';
import { import {
addDecimalsFormatNumber, addDecimalsFormatNumber,
@ -40,7 +39,6 @@ export const WithdrawalsTable = ({
ready?: TimestampedWithdrawals; ready?: TimestampedWithdrawals;
delayed?: TimestampedWithdrawals; delayed?: TimestampedWithdrawals;
}) => { }) => {
const gridRef = useRef<AgGridReact | null>(null);
const createWithdrawApproval = useEthWithdrawApprovalsStore( const createWithdrawApproval = useEthWithdrawApprovalsStore(
(store) => store.create (store) => store.create
); );
@ -146,7 +144,6 @@ export const WithdrawalsTable = ({
CompleteCell, CompleteCell,
}} }}
suppressCellFocus suppressCellFocus
ref={gridRef}
{...props} {...props}
/> />
); );