3bf5d823ee
* chore: update account, fills and orders subscriptions in data providers * chore: update account, fills and orders subscriptions in data providers * fixing console-lite * fixing types in general - regen * chore: update account, fills and orders subscriptions in data providers * fixed console-lite unit tests, uncommented quote name * chore: update account, fills and orders subscriptions in data providers * type aligning of assets and proposals * fixes liquidity data provider * fixed accounts build errors and unit tests * regen types, removed market name * regen types * fixed positions * chore: handle updates in derived market provider, update orders * removed taker fee mapping (renamed to maker fee) * chore: update account, fills and orders subscriptions in data providers * chore: update account, fills and orders subscriptions in data providers * chore: fix Order type * chore: fix possible null types * chore: revert order-list.stories.tsx * chore: derivedDataProvider fixes * fills unit tests fixes * orders unit tests fixes * added eslint ingore for generated files in liquidity * added unique key to the list element of simple market toolbar * changed main-branch-name to develop for pr workflows * removed redundant waitFor * increased test timeout to 10s * removed mocked response * chore: disable simple market list tests * chore: fix e2e projects mock types * feat: [subscription-update] - uncomment some console-lite tests * cypress: trading-accounts * chore: replace market candles with candlesConnection * chore: ignore gql errors, to be reverted after candlesConnectio n will be fixed * feat: [subscription-update] - improve wrongly renamed hook * feat: [subscription-update] - improve wrongly renamed hook * feat: [subscription-update] - improve wrongly renamed hook 3 * chore: add pagination hangdling to derived data provier * cypress: trading-fills * feat: [stagnet3 api update] - remove redundant command in tests * feat: [stagnet3 api update] - remove redundant command in tests * chore: fix trading orders e2e tests * chore: fix console lite e2e mocks * chore: fix market-trade tests * chore: use markets only in market selector, change Instrument cache policy * chore: fix market-selector tests * feat: [subscription-update] - improve ag grid conf for unit tests * feat: [subscription-update] - improve ag grid conf for unit tests * chore: fix candle types in console lite market mocks * chore: revert error policy ignore * chore: revert jest timeout * chore: remove unused AccountFields * chore: revert remove unused AccountFields * chore: simplify node subscription probe * chore: remove unused generated types in candles-chart * chore: improve useMarketsList mock * feat: [subscription-update] - increase jest timeout * feat: [subscription-update] - fix jest timeout * feat: [subscription-update] - fix jest timeout * feat: [subscription-update] - try to fix failing test again * chore: fix candles-chart types * feat: [subscription-update] - temporary skip failing test * feat: [subscription-update] - temporary skip failing test * feat: [subscription-update] - temporary skip failing test * feat: [subscription-update] - fix failling int test * feat: [subscription-update] - try to restore commented unit tests * feat: [subscription-update] - try to restore commented unit tests * feat: [subscription-update] - improve fixed unit tests Co-authored-by: asiaznik <artur@vegaprotocol.io> Co-authored-by: maciek <maciek@vegaprotocol.io>
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import { useRef, useCallback, useMemo } from 'react';
|
|
import { produce } from 'immer';
|
|
import merge from 'lodash/merge';
|
|
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
|
import { useDataProvider, addSummaryRows } from '@vegaprotocol/react-helpers';
|
|
import type {
|
|
AccountFieldsFragment,
|
|
AccountEventsSubscription,
|
|
} from './__generated___/Accounts';
|
|
|
|
import type { AgGridReact } from 'ag-grid-react';
|
|
import {
|
|
AccountsTable,
|
|
getGroupId,
|
|
getGroupSummaryRow,
|
|
} from './accounts-table';
|
|
import { accountsDataProvider, getId } from './accounts-data-provider';
|
|
|
|
interface AccountsManagerProps {
|
|
partyId: string;
|
|
}
|
|
|
|
export const AccountsManager = ({ partyId }: AccountsManagerProps) => {
|
|
const gridRef = useRef<AgGridReact | null>(null);
|
|
const variables = useMemo(() => ({ partyId }), [partyId]);
|
|
const update = useCallback(
|
|
({ delta: deltas }: { delta: AccountEventsSubscription['accounts'] }) => {
|
|
const update: AccountFieldsFragment[] = [];
|
|
const add: AccountFieldsFragment[] = [];
|
|
if (!gridRef.current?.api) {
|
|
return false;
|
|
}
|
|
const api = gridRef.current.api;
|
|
deltas.forEach((delta) => {
|
|
const rowNode = api.getRowNode(getId(delta));
|
|
if (rowNode) {
|
|
const updatedData = produce<AccountFieldsFragment>(
|
|
rowNode.data,
|
|
(draft: AccountFieldsFragment) => {
|
|
merge(draft, delta);
|
|
}
|
|
);
|
|
if (updatedData !== rowNode.data) {
|
|
update.push(updatedData);
|
|
}
|
|
} else {
|
|
// #TODO handle new account (or leave it to data provider to handle it)
|
|
}
|
|
});
|
|
if (update.length || add.length) {
|
|
gridRef.current.api.applyTransactionAsync({
|
|
update,
|
|
add,
|
|
addIndex: 0,
|
|
});
|
|
}
|
|
if (add.length) {
|
|
addSummaryRows(
|
|
gridRef.current.api,
|
|
gridRef.current.columnApi,
|
|
getGroupId,
|
|
getGroupSummaryRow
|
|
);
|
|
}
|
|
return true;
|
|
},
|
|
[gridRef]
|
|
);
|
|
const { data, error, loading } = useDataProvider<
|
|
AccountFieldsFragment[],
|
|
AccountEventsSubscription['accounts']
|
|
>({ dataProvider: accountsDataProvider, update, variables });
|
|
return (
|
|
<AsyncRenderer loading={loading} error={error} data={data}>
|
|
<AccountsTable ref={gridRef} data={data} />
|
|
</AsyncRenderer>
|
|
);
|
|
};
|