Handle storage with optional modifiers (#717)

* Handle storage with optional modifiers

* Storage docs indicate Option

* Cleanup Option logic

* Convert Optional derive to use Option

* Bump version, update changelog

* Update CHANGELOG description

* Enum.spec.js -> Enum.spec.ts

* Add isEmpty to primitive types
This commit is contained in:
Jaco Greeff
2019-02-19 13:47:36 +01:00
committed by GitHub
parent 4f17047c77
commit f807a93e87
40 changed files with 259 additions and 96 deletions
@@ -6,7 +6,7 @@ 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 { Option, ReferendumInfo, ReferendumIndex } from '@polkadot/types/index';
import { drr } from '../util/drr';
@@ -16,27 +16,32 @@ import { drr } from '../util/drr';
* A [[ReferendumInfo]] with an additional `index` field
*/
export class ReferendumInfoExtended extends ReferendumInfo {
private _index: ReferendumIndex;
constructor (info: ReferendumInfo, index: BN | number) {
constructor (info: any) {
super(info);
this._index = new ReferendumIndex(index);
this.set('index', new ReferendumIndex(info.index));
}
/**
* @description Convenience getter, returns the referendumIndex
*/
get index (): ReferendumIndex {
return this._index;
return this.get('index') as ReferendumIndex;
}
}
export function referendumInfo (api: ApiInterface$Rx) {
return (id: BN | number): Observable<ReferendumInfoExtended> => {
return (api.query.democracy.referendumInfoOf(id) as Observable<ReferendumInfo>)
return (index: BN | number): Observable<Option<ReferendumInfoExtended>> => {
return (api.query.democracy.referendumInfoOf(index) as Observable<Option<ReferendumInfo>>)
.pipe(
map((info) => new ReferendumInfoExtended(info, id)),
map((info) =>
new Option<ReferendumInfoExtended>(
ReferendumInfoExtended,
info.isSome
? { ...info.toJSON(), index }
: null
)
),
drr()
);
};
@@ -5,6 +5,7 @@
import BN from 'bn.js';
import { combineLatest, Observable, of } from 'rxjs';
import { ApiInterface$Rx } from '@polkadot/api/types';
import { Option } from '@polkadot/types/index';
import { drr } from '../util/drr';
import { referendumInfo, ReferendumInfoExtended } from './referendumInfo';
@@ -12,7 +13,7 @@ import { referendumInfo, ReferendumInfoExtended } from './referendumInfo';
export function referendumInfos (api: ApiInterface$Rx) {
const referendumInfoOf = referendumInfo(api);
return (ids: Array<BN | number> = []): Observable<Array<ReferendumInfoExtended>> => {
return (ids: Array<BN | number> = []): Observable<Array<Option<ReferendumInfoExtended>>> => {
return !ids || !ids.length
? of([]).pipe(drr())
: combineLatest(
@@ -5,14 +5,14 @@
import { combineLatest, Observable, of } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { ApiInterface$Rx } from '@polkadot/api/types';
import { ReferendumIndex } from '@polkadot/types/index';
import { Option, ReferendumIndex } from '@polkadot/types/index';
import { drr } from '../util/drr';
import { ReferendumInfoExtended } from './referendumInfo';
import { referendumInfos } from './referendumInfos';
export function referendums (api: ApiInterface$Rx) {
return (): Observable<Array<ReferendumInfoExtended>> =>
return (): Observable<Array<Option<ReferendumInfoExtended>>> =>
(combineLatest(
api.query.democracy.nextTally(),
api.query.democracy.referendumCount()