* Add 6x to conviction * Add derive.democracy.proposals * Proposal decoding * Don't return empty proposals * Rework referendumInfo * Update referendumInfo extraction
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
// 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 { ReferendumInfo } from '@polkadot/types/interfaces/democracy';
|
|
import { DerivedReferendum } from '../types';
|
|
|
|
import BN from 'bn.js';
|
|
import { Observable, combineLatest, of } from 'rxjs';
|
|
import { map, switchMap } from 'rxjs/operators';
|
|
import { ApiInterfaceRx } from '@polkadot/api/types';
|
|
import { Option, Vec } from '@polkadot/types';
|
|
|
|
import { memo } from '../util';
|
|
import { retrieveInfo } from './referendumInfo';
|
|
|
|
export function referendumInfos (api: ApiInterfaceRx): (ids?: (BN | number)[]) => Observable<DerivedReferendum[]> {
|
|
return memo((ids: (BN | number)[] = []): Observable<DerivedReferendum[]> =>
|
|
(
|
|
!ids || !ids.length
|
|
? of([] as Option<ReferendumInfo>[])
|
|
: api.query.democracy.referendumInfoOf.multi(ids) as Observable<Vec<Option<ReferendumInfo>>>
|
|
).pipe(
|
|
switchMap((infos): Observable<(DerivedReferendum | null)[]> =>
|
|
combineLatest(
|
|
...ids.map((id, index): Observable<DerivedReferendum | null> =>
|
|
retrieveInfo(api, id, infos[index])
|
|
)
|
|
)
|
|
),
|
|
map((infos): DerivedReferendum[] =>
|
|
infos.filter((referendum): boolean => !!referendum) as DerivedReferendum[]
|
|
)
|
|
));
|
|
}
|