import type { Asset } from '@vegaprotocol/assets'; import { useDataProvider } from '@vegaprotocol/react-helpers'; import { AsyncRenderer } from '@vegaprotocol/ui-toolkit'; import type { AgGridReact } from 'ag-grid-react'; import { useRef, useMemo, useCallback, memo } from 'react'; import type { AccountFields } from './accounts-data-provider'; import { aggregatedAccountsDataProvider } from './accounts-data-provider'; import type { GetRowsParams } from './accounts-table'; import { AccountTable } from './accounts-table'; interface AccountManagerProps { partyId: string; onClickAsset: (asset?: string | Asset) => void; onClickWithdraw?: (assetId?: string) => void; onClickDeposit?: (assetId?: string) => void; } export const AccountManager = memo( ({ onClickAsset, onClickWithdraw, onClickDeposit, partyId, }: AccountManagerProps) => { const gridRef = useRef(null); const dataRef = useRef(null); const variables = useMemo(() => ({ partyId }), [partyId]); const update = useCallback( ({ data }: { data: AccountFields[] | null }) => { dataRef.current = data; gridRef.current?.api?.refreshInfiniteCache(); return true; }, [gridRef] ); const { data, loading, error } = useDataProvider({ dataProvider: aggregatedAccountsDataProvider, update, variables, }); const getRows = async ({ successCallback, startRow, endRow, }: GetRowsParams) => { const rowsThisBlock = dataRef.current ? dataRef.current.slice(startRow, endRow) : []; const lastRow = dataRef.current?.length ?? -1; successCallback(rowsThisBlock, lastRow); }; return ( ); } ); export default memo(AccountManager);