From 07cd537c597736cabd27d185d20a69b7ee6c439a Mon Sep 17 00:00:00 2001 From: belopash Date: Tue, 11 Jun 2024 19:30:53 +0500 Subject: [PATCH] fix: correctly filter empty delegations --- src/api/subsquid-network-squid/api.graphql | 26 ++++--- src/api/subsquid-network-squid/graphql.tsx | 74 ++++++++++--------- .../subsquid-network-squid/workers-graphql.ts | 44 ++++++----- 3 files changed, 79 insertions(+), 65 deletions(-) diff --git a/src/api/subsquid-network-squid/api.graphql b/src/api/subsquid-network-squid/api.graphql index ef41f61..507694e 100644 --- a/src/api/subsquid-network-squid/api.graphql +++ b/src/api/subsquid-network-squid/api.graphql @@ -171,7 +171,7 @@ query workerOwner($workerId: String!) { query myWorkerDelegations($address: String!, $workerId: String!) { workerById(id: $workerId) { - delegations(where: { realOwner: { id_eq: $address }, deposit_gt: 0 }) { + delegations(where: { realOwner: { id_eq: $address }, deposit_gt: 0 }) { claimableReward claimedReward deposit @@ -209,17 +209,19 @@ query myAssets($address: String!) { } query myDelegations($address: String!) { - workers(where: { delegations_some: { realOwner: { id_eq: $address } } }) { - ...WorkerFragment - delegations(where: { realOwner: { id_eq: $address } }) { - claimableReward - claimedReward - deposit - locked - owner { - id - type - } + delegations(where: { realOwner: { id_eq: $address }, deposit_gt: 0 }) { + claimableReward + claimedReward + deposit + locked + owner { + id + type + } + worker { + ...WorkerFragment + totalDelegation + capedDelegation } } } diff --git a/src/api/subsquid-network-squid/graphql.tsx b/src/api/subsquid-network-squid/graphql.tsx index 1c80e79..b15d310 100644 --- a/src/api/subsquid-network-squid/graphql.tsx +++ b/src/api/subsquid-network-squid/graphql.tsx @@ -5743,31 +5743,31 @@ export type MyDelegationsQueryVariables = Exact<{ export type MyDelegationsQuery = { __typename?: 'Query'; - workers: Array<{ - __typename?: 'Worker'; - version?: string; - createdAt: string; - uptime90Days?: number; - apr?: number; - stakerApr?: number; - totalDelegation: string; - capedDelegation: string; - id: string; - name?: string; - peerId: string; - status: WorkerStatus; - online?: boolean; - jailed?: boolean; - dialOk?: boolean; - jailReason?: string; - delegations: Array<{ - __typename?: 'Delegation'; - claimableReward: string; - claimedReward: string; - deposit: string; - locked?: boolean; - owner: { __typename?: 'Account'; id: string; type: AccountType }; - }>; + delegations: Array<{ + __typename?: 'Delegation'; + claimableReward: string; + claimedReward: string; + deposit: string; + locked?: boolean; + owner: { __typename?: 'Account'; id: string; type: AccountType }; + worker: { + __typename?: 'Worker'; + totalDelegation: string; + capedDelegation: string; + version?: string; + createdAt: string; + uptime90Days?: number; + apr?: number; + stakerApr?: number; + id: string; + name?: string; + peerId: string; + status: WorkerStatus; + online?: boolean; + jailed?: boolean; + dialOk?: boolean; + jailReason?: string; + }; }>; }; @@ -6441,17 +6441,19 @@ export const useMyAssetsQuery = ( export const MyDelegationsDocument = ` query myDelegations($address: String!) { - workers(where: {delegations_some: {realOwner: {id_eq: $address}}}) { - ...WorkerFragment - delegations(where: {realOwner: {id_eq: $address}}) { - claimableReward - claimedReward - deposit - locked - owner { - id - type - } + delegations(where: {realOwner: {id_eq: $address}, deposit_gt: 0}) { + claimableReward + claimedReward + deposit + locked + owner { + id + type + } + worker { + ...WorkerFragment + totalDelegation + capedDelegation } } } diff --git a/src/api/subsquid-network-squid/workers-graphql.ts b/src/api/subsquid-network-squid/workers-graphql.ts index e232600..da8fcbc 100644 --- a/src/api/subsquid-network-squid/workers-graphql.ts +++ b/src/api/subsquid-network-squid/workers-graphql.ts @@ -9,6 +9,7 @@ import { useAccount } from '@network/useAccount.ts'; import { useSquidDataSource } from './datasource'; import { ClaimType, + MyDelegationsQuery, useAllWorkersQuery, useMyClaimsQuery, useMyDelegationsQuery, @@ -19,6 +20,7 @@ import { useWorkerDelegationInfoQuery, useWorkerOwnerQuery, Worker, + WorkerFragmentFragment, } from './graphql'; import { useNetworkSettings } from './settings-graphql'; @@ -332,15 +334,6 @@ export function useMyClaimsAvailable({ source }: { source?: string } = {}) { }; } -// type ArrayElement = -// ArrayType extends readonly (infer ElementType)[] ? ElementType : never; - -// type Delegation = { -// worker: BlockchainApiWorker; -// totalReward: any; -// delegations: Omit, 'worker'>[]; -// }; - export function useMyDelegations() { const { address } = useAccount(); const { isPending: isSettingsLoading } = useNetworkSettings(); @@ -351,17 +344,34 @@ export function useMyDelegations() { }); const workers = useMemo(() => { - return ( - data?.workers.map(w => { - return { - ...w, + type W = WorkerFragmentFragment & + Pick & { + delegations: Omit[]; + }; + + const workers: Map = new Map(); + data?.delegations.map(d => { + let worker = workers.get(d.worker.id); + if (!worker) { + worker = { + ...d.worker, + delegations: [], delegationCapacity: calculateDelegationCapacity({ - totalDelegation: w.totalDelegation, - capedDelegation: w.capedDelegation, + totalDelegation: d.worker.totalDelegation, + capedDelegation: d.worker.capedDelegation, }), }; - }) || [] - ); + workers.set(worker.id, worker); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const delegation = { + ...d, + worker: undefined, + }; + delete delegation['worker']; + worker.delegations.push(delegation); + }); + return [...workers.values()]; }, [data]); return {