From d9016019860affeb09453f8484a571d66ebfbe71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20G=C5=82ownia?= Date: Fri, 16 Sep 2022 14:26:40 +0200 Subject: [PATCH] chore: add pagination hangdling to derived data provier --- libs/fills/src/lib/fills-data-provider.ts | 31 ++++++++++--------- libs/fills/src/lib/fills-manager.tsx | 8 ++--- .../order-data-provider.ts | 2 +- .../order-list-manager/order-list-manager.tsx | 6 ++-- .../src/lib/generic-data-provider.ts | 7 +++-- libs/trades/src/lib/trades-container.tsx | 6 ++-- libs/trades/src/lib/trades-data-provider.ts | 2 +- libs/trades/src/lib/trades-table.tsx | 5 ++- 8 files changed, 36 insertions(+), 31 deletions(-) diff --git a/libs/fills/src/lib/fills-data-provider.ts b/libs/fills/src/lib/fills-data-provider.ts index 2bef7d182..fcb45bd94 100644 --- a/libs/fills/src/lib/fills-data-provider.ts +++ b/libs/fills/src/lib/fills-data-provider.ts @@ -136,10 +136,8 @@ export type TradeWithMarketEdge = { node: TradeWithMarket; }; -const getData = ( - responseData: Fills -): Fills_party_tradesConnection_edges[] | null => - responseData.party?.tradesConnection?.edges || null; +const getData = (responseData: Fills): Fills_party_tradesConnection_edges[] => + responseData.party?.tradesConnection?.edges || []; const getPageInfo = (responseData: Fills): PageInfo | null => responseData.party?.tradesConnection?.pageInfo || null; @@ -160,20 +158,23 @@ export const fillsProvider = makeDataProvider({ }); export const fillsWithMarketProvider = makeDerivedDataProvider< - TradeWithMarketEdge[], + (TradeWithMarketEdge | null)[], TradeWithMarket[] >( [fillsProvider, marketsProvider], - (partsData): TradeWithMarketEdge[] => - (partsData[0] as Fills_party_tradesConnection_edges[]).map((edge) => ({ - cursor: edge.cursor, - node: { - ...edge.node, - market: (partsData[1] as Market[]).find( - (market) => market.id === edge.node.market.id - ), - }, - })), + (partsData): (TradeWithMarketEdge | null)[] => + (partsData[0] as ReturnType)?.map( + (edge) => + edge && { + cursor: edge.cursor, + node: { + ...edge.node, + market: (partsData[1] as Market[]).find( + (market) => market.id === edge.node.market.id + ), + }, + } + ) || null, (parts): TradeWithMarket[] | undefined => { if (!parts[0].isUpdate) { return; diff --git a/libs/fills/src/lib/fills-manager.tsx b/libs/fills/src/lib/fills-manager.tsx index 298a70253..2da7bba31 100644 --- a/libs/fills/src/lib/fills-manager.tsx +++ b/libs/fills/src/lib/fills-manager.tsx @@ -20,7 +20,7 @@ interface FillsManagerProps { export const FillsManager = ({ partyId }: FillsManagerProps) => { const gridRef = useRef(null); - const dataRef = useRef(null); + const dataRef = useRef<(TradeWithMarketEdge | null)[] | null>(null); const totalCountRef = useRef(undefined); const newRows = useRef(0); const scrolledToTop = useRef(true); @@ -44,7 +44,7 @@ export const FillsManager = ({ partyId }: FillsManagerProps) => { data, delta, }: { - data: TradeWithMarketEdge[]; + data: (TradeWithMarketEdge | null)[] | null; delta: TradeWithMarket[]; }) => { if (!gridRef.current?.api) { @@ -70,7 +70,7 @@ export const FillsManager = ({ partyId }: FillsManagerProps) => { data, totalCount, }: { - data: TradeWithMarketEdge[]; + data: (TradeWithMarketEdge | null)[] | null; totalCount?: number; }) => { dataRef.current = data; @@ -83,7 +83,7 @@ export const FillsManager = ({ partyId }: FillsManagerProps) => { const variables = useMemo(() => ({ partyId }), [partyId]); const { data, error, loading, load, totalCount } = useDataProvider< - TradeWithMarketEdge[], + (TradeWithMarketEdge | null)[], TradeWithMarket[] >({ dataProvider: fillsWithMarketProvider, update, insert, variables }); totalCountRef.current = totalCount; diff --git a/libs/orders/src/lib/components/order-data-provider/order-data-provider.ts b/libs/orders/src/lib/components/order-data-provider/order-data-provider.ts index 46ae062b4..0accf076b 100644 --- a/libs/orders/src/lib/components/order-data-provider/order-data-provider.ts +++ b/libs/orders/src/lib/components/order-data-provider/order-data-provider.ts @@ -153,7 +153,7 @@ export const ordersWithMarketProvider = makeDerivedDataProvider< >( [ordersProvider, marketsProvider], (partsData): OrderWithMarketEdge[] => - (partsData[0] as Orders_party_ordersConnection_edges[]).map((edge) => ({ + (partsData[0] as Parameters['0']).map((edge) => ({ cursor: edge.cursor, node: { ...edge.node, diff --git a/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx b/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx index 7ec8b6469..4085746c3 100644 --- a/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx +++ b/libs/orders/src/lib/components/order-list-manager/order-list-manager.tsx @@ -16,7 +16,7 @@ interface OrderListManagerProps { export const OrderListManager = ({ partyId }: OrderListManagerProps) => { const gridRef = useRef(null); - const dataRef = useRef(null); + const dataRef = useRef<(OrderWithMarketEdge | null)[] | null>(null); const totalCountRef = useRef(undefined); const newRows = useRef(0); const scrolledToTop = useRef(true); @@ -41,7 +41,7 @@ export const OrderListManager = ({ partyId }: OrderListManagerProps) => { data, delta, }: { - data: OrderWithMarketEdge[]; + data: (OrderWithMarketEdge | null)[]; delta: OrderWithMarket[]; }) => { if (!gridRef.current?.api) { @@ -67,7 +67,7 @@ export const OrderListManager = ({ partyId }: OrderListManagerProps) => { data, totalCount, }: { - data: OrderWithMarketEdge[]; + data: (OrderWithMarketEdge | null)[]; totalCount?: number; }) => { dataRef.current = data; diff --git a/libs/react-helpers/src/lib/generic-data-provider.ts b/libs/react-helpers/src/lib/generic-data-provider.ts index d5dc7a405..aa7ad74ac 100644 --- a/libs/react-helpers/src/lib/generic-data-provider.ts +++ b/libs/react-helpers/src/lib/generic-data-provider.ts @@ -507,7 +507,7 @@ function makeDerivedDataProviderInternal( error, loading, loaded, - pageInfo: null, + pageInfo: parts[0]?.pageInfo || null, ...updateData, }); }; @@ -518,7 +518,7 @@ function makeDerivedDataProviderInternal( notify(callback, updateData); }); - const combine = (updatedPartIndex?: number) => { + const combine = (updatedPartIndex: number) => { let delta: Delta | undefined; let isUpdate = false; const isInsert = false; @@ -538,7 +538,7 @@ function makeDerivedDataProviderInternal( variables ) : data; - if (newLoaded && updatedPartIndex !== undefined) { + if (newLoaded) { const updatedPart = parts[updatedPartIndex]; if (updatedPart.isUpdate && updatedPart.delta && combineDelta) { delta = combineDelta(parts, variables); @@ -613,6 +613,7 @@ function makeDerivedDataProviderInternal( subscription.reload(forceReset) ), flush: () => notify(callback), + load: subscriptions && subscriptions[0]?.load, }; }; } diff --git a/libs/trades/src/lib/trades-container.tsx b/libs/trades/src/lib/trades-container.tsx index 8c2a0fe5d..6ffb72db3 100644 --- a/libs/trades/src/lib/trades-container.tsx +++ b/libs/trades/src/lib/trades-container.tsx @@ -20,7 +20,7 @@ interface TradesContainerProps { export const TradesContainer = ({ marketId }: TradesContainerProps) => { const gridRef = useRef(null); - const dataRef = useRef(null); + const dataRef = useRef<(TradeWithMarketEdge | null)[] | null>(null); const totalCountRef = useRef(undefined); const newRows = useRef(0); const scrolledToTop = useRef(true); @@ -49,7 +49,7 @@ export const TradesContainer = ({ marketId }: TradesContainerProps) => { data, delta, }: { - data: TradeWithMarketEdge[]; + data: (TradeWithMarketEdge | null)[]; delta: TradeWithMarket[]; }) => { if (!gridRef.current?.api) { @@ -75,7 +75,7 @@ export const TradesContainer = ({ marketId }: TradesContainerProps) => { data, totalCount, }: { - data: TradeWithMarketEdge[]; + data: (TradeWithMarketEdge | null)[]; totalCount?: number; }) => { dataRef.current = data; diff --git a/libs/trades/src/lib/trades-data-provider.ts b/libs/trades/src/lib/trades-data-provider.ts index e2b4ddcf7..66dc07374 100644 --- a/libs/trades/src/lib/trades-data-provider.ts +++ b/libs/trades/src/lib/trades-data-provider.ts @@ -126,7 +126,7 @@ export const tradesProvider = makeDataProvider({ }); export const tradesWithMarketProvider = makeDerivedDataProvider< - TradeWithMarketEdge[], + (TradeWithMarketEdge | null)[], TradeWithMarket[] >( [tradesProvider, marketsProvider], diff --git a/libs/trades/src/lib/trades-table.tsx b/libs/trades/src/lib/trades-table.tsx index 43c677e79..78b93fdec 100644 --- a/libs/trades/src/lib/trades-table.tsx +++ b/libs/trades/src/lib/trades-table.tsx @@ -39,7 +39,10 @@ const changeCellClass = }; export interface GetRowsParams extends Omit { - successCallback(rowsThisBlock: TradeWithMarket[], lastRow?: number): void; + successCallback( + rowsThisBlock: (TradeWithMarket | null)[], + lastRow?: number + ): void; } export interface Datasource extends IDatasource {