From b40d7a301ea9e7db49643f0356d4ec3825691f89 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sat, 9 Feb 2019 07:54:50 +0200 Subject: [PATCH] Return ReferendumIndex along with info (derive) (#669) * Return ReferendumIndex along with info (derive) * Rename index * Doc rename --- .../src/democracy/referendumInfo.ts | 44 +++++++++++++++++++ .../src/democracy/referendumInfos.ts | 13 +++--- .../api-derive/src/democracy/referendums.ts | 7 +-- 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 packages/api-derive/src/democracy/referendumInfo.ts diff --git a/packages/api-derive/src/democracy/referendumInfo.ts b/packages/api-derive/src/democracy/referendumInfo.ts new file mode 100644 index 0000000000..cb2671b02c --- /dev/null +++ b/packages/api-derive/src/democracy/referendumInfo.ts @@ -0,0 +1,44 @@ +// Copyright 2017-2019 @polkadot/api-derive authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import BN from 'bn.js'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { ApiInterface$Rx } from '@polkadot/api/types'; +import { ReferendumInfo, ReferendumIndex } from '@polkadot/types/index'; + +import { drr } from '../util/drr'; + +/** + * @name ReferendumInfoExtended + * @description + * A [[ReferendumInfo]] with an additional `index` field + */ +export class ReferendumInfoExtended extends ReferendumInfo { + private _index: ReferendumIndex; + + constructor (info: ReferendumInfo, index: BN | number) { + super(info); + + this._index = new ReferendumIndex(index); + } + + /** + * @description Convenience getter, returns the referendumIndex + */ + get index (): ReferendumIndex { + return this._index; + } +} + +export function referendumInfo (api: ApiInterface$Rx) { + return (id: BN | number): Observable => { + return (api.query.democracy.referendumInfoOf(id) as Observable) + .pipe( + map((info) => new ReferendumInfoExtended(info, id)), + drr() + ); + }; + +} diff --git a/packages/api-derive/src/democracy/referendumInfos.ts b/packages/api-derive/src/democracy/referendumInfos.ts index d9e9faf1a8..bd7668c32b 100644 --- a/packages/api-derive/src/democracy/referendumInfos.ts +++ b/packages/api-derive/src/democracy/referendumInfos.ts @@ -4,22 +4,19 @@ import BN from 'bn.js'; import { combineLatest, Observable, of } from 'rxjs'; -import { filter } from 'rxjs/operators'; import { ApiInterface$Rx } from '@polkadot/api/types'; -import { ReferendumInfo } from '@polkadot/types/index'; import { drr } from '../util/drr'; +import { referendumInfo, ReferendumInfoExtended } from './referendumInfo'; export function referendumInfos (api: ApiInterface$Rx) { - return (ids: Array = []): Observable> => { + const referendumInfoOf = referendumInfo(api); + + return (ids: Array = []): Observable> => { return !ids || !ids.length ? of([]).pipe(drr()) : combineLatest( - ids.map( - (id) => (api.query.democracy.referendumInfoOf(id) as Observable).pipe( - filter((info) => !!info) - ) - ) + ids.map((id) => referendumInfoOf(id)) ).pipe( drr() ); diff --git a/packages/api-derive/src/democracy/referendums.ts b/packages/api-derive/src/democracy/referendums.ts index 298acb2f9a..336743178a 100644 --- a/packages/api-derive/src/democracy/referendums.ts +++ b/packages/api-derive/src/democracy/referendums.ts @@ -5,13 +5,14 @@ import { combineLatest, Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { ApiInterface$Rx } from '@polkadot/api/types'; -import { ReferendumIndex, ReferendumInfo } from '@polkadot/types/index'; +import { ReferendumIndex } from '@polkadot/types/index'; -import { referendumInfos } from './referendumInfos'; import { drr } from '../util/drr'; +import { ReferendumInfoExtended } from './referendumInfo'; +import { referendumInfos } from './referendumInfos'; export function referendums (api: ApiInterface$Rx) { - return (): Observable> => + return (): Observable> => (combineLatest( api.query.democracy.nextTally(), api.query.democracy.referendumCount()