From 8bf5e51725c00bb9eb73ae5ed2d61284d23e5323 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 25 Mar 2020 08:41:26 +0100 Subject: [PATCH] Return Observable when no referendums (#2090) * Return Observable when no referendums * Small ordering cleanups --- .../api-derive/src/democracy/referendums.ts | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/api-derive/src/democracy/referendums.ts b/packages/api-derive/src/democracy/referendums.ts index bb3a1876aa..3c51769845 100644 --- a/packages/api-derive/src/democracy/referendums.ts +++ b/packages/api-derive/src/democracy/referendums.ts @@ -21,13 +21,13 @@ function votesPrev (api: ApiInterfaceRx, referendumId: BN): Observable, Vote[], DerivedBalancesAccount[]]> => combineLatest([ of(votersFor), - !votersFor || !votersFor.length - ? of([] as Vote[]) - : api.query.democracy.voteOf.multi( + votersFor.length + ? api.query.democracy.voteOf.multi( votersFor.map((accountId): [BN | number, AccountId] => [referendumId, accountId] ) - ), + ) + : of([]), api.derive.balances.votingBalances(votersFor) ]) ), @@ -36,7 +36,7 @@ function votesPrev (api: ApiInterfaceRx, referendumId: BN): Observable { +function retrieveDerived (api: ApiInterfaceRx, totalIssuance: Balance, earliest: ReferendumIndex, referendumCount: ReferendumIndex): Observable<[BN, DerivedReferendum[]]> { return combineLatest([ - of(totalIssuance), + of(bnSqrt(totalIssuance)), referendumCount.gt(earliest) ? referendumInfos(api, [ ...Array(referendumCount.sub(earliest).toNumber()) @@ -128,17 +128,19 @@ function retrieveDerived (api: ApiInterfaceRx, totalIssuance: Balance, earliest: ]); } -function retrieveVotes (api: ApiInterfaceRx, totalIssuance: Balance, referendums: DerivedReferendum[]): Observable<[Balance, DerivedReferendum[], DerivedReferendumVote[][]]> { +function retrieveVotes (api: ApiInterfaceRx, sqrtElectorate: BN, referendums: DerivedReferendum[]): Observable<[BN, DerivedReferendum[], DerivedReferendumVote[][]]> { return combineLatest([ - of(totalIssuance), + of(sqrtElectorate), of(referendums), - combineLatest( - referendums.map((referendum): Observable => - api.query.democracy.votingOf - ? votesCurr(api, referendum.index) - : votesPrev(api, referendum.index) + referendums.length + ? combineLatest( + referendums.map((referendum): Observable => + api.query.democracy.votingOf + ? votesCurr(api, referendum.index) + : votesPrev(api, referendum.index) + ) ) - ) + : of([]) ]); } @@ -153,18 +155,16 @@ export function referendums (api: ApiInterfaceRx): () => Observable retrieveDerived(api, totalIssuance, earliest, referendumCount) ), - switchMap(([totalIssuance, referendums]) => - retrieveVotes(api, totalIssuance, referendums) + switchMap(([sqrtElectorate, referendums]) => + retrieveVotes(api, sqrtElectorate, referendums) ), - map(([totalIssuance, referendums, votes]) => { - const sqrtElectorate = bnSqrt(totalIssuance); - - return referendums.map((referendum, index): DerivedReferendumExt => ({ + map(([sqrtElectorate, referendums, votes]) => + referendums.map((referendum, index): DerivedReferendumExt => ({ ...referendum, ...calcVotes(sqrtElectorate, referendum, votes[index]) - })); - }) + })) + ) ) - : of([] as DerivedReferendumExt[]) + : of([]) ); }