From ab8b381d8b3ad4f6c2eb85398b935cdfb92b9ef2 Mon Sep 17 00:00:00 2001 From: Alex D Date: Sun, 28 Feb 2021 11:53:35 +0300 Subject: [PATCH] =?UTF-8?q?modified=20api-derive=20balances=20to=20allow?= =?UTF-8?q?=20use=20of=20custom=20balance=20storages=20=E2=80=A6=20(#3223)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * modified api-derive balances to allow use of custom balance storages via derives; current implementation only works with standard call signatures * type predicate as filter value --- packages/api-derive/src/balances/account.ts | 8 +++++++- packages/api-derive/src/balances/all.ts | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/api-derive/src/balances/account.ts b/packages/api-derive/src/balances/account.ts index 47a06b123d..ea663b0928 100644 --- a/packages/api-derive/src/balances/account.ts +++ b/packages/api-derive/src/balances/account.ts @@ -55,7 +55,13 @@ function queryBalancesFree (api: ApiInterfaceRx, accountId: AccountId): Observab } function queryBalancesAccount (api: ApiInterfaceRx, accountId: AccountId, modules: string[] = ['balances']): Observable { - const balances = modules.map((m): QueryableStorageMultiArg<'rxjs'> => [api.query[m].account, accountId]); + const balances = modules.map( + (m): QueryableStorageMultiArg<'rxjs'> => [ + (api.derive[m as 'balances'] as unknown as ApiInterfaceRx['query']['balances'])?.account ?? api.query[m].account, + accountId + ] + ); + const extract = (data: AccountData[]) => data.map(({ feeFrozen, free, miscFrozen, reserved }): BalanceResult => [free, reserved, feeFrozen, miscFrozen]); diff --git a/packages/api-derive/src/balances/all.ts b/packages/api-derive/src/balances/all.ts index 7c1629188d..e97fe7d4a1 100644 --- a/packages/api-derive/src/balances/all.ts +++ b/packages/api-derive/src/balances/all.ts @@ -112,11 +112,17 @@ function queryOld (api: ApiInterfaceRx, accountId: AccountId): Observable(nullable: T): nullable is NonNullable => !!nullable; + // current (balances, vesting) function queryCurrent (api: ApiInterfaceRx, accountId: AccountId, balanceInstances: string[] = ['balances']): Observable { - const lockCalls = balanceInstances.map((m) => api.query[m].locks); + const lockCalls = balanceInstances.map( + (m): ApiInterfaceRx['query']['balances']['locks'] | undefined => + (api.derive[m as 'balances'] as unknown as ApiInterfaceRx['query']['balances'])?.locks ?? api.query[m as 'balances']?.locks + ); + const lockEmpty = lockCalls.map((c) => !c); - const lockQueries = lockCalls.filter((c) => c).map((c): QueryableStorageMultiArg<'rxjs'> => [c, accountId]); + const lockQueries = lockCalls.filter(isNonNullable).map((c): QueryableStorageMultiArg<'rxjs'> => [c, accountId]); return ( api.query.vesting?.vesting