Account info derive (#1523)

This commit is contained in:
Jaco Greeff
2019-10-28 11:14:21 +01:00
committed by GitHub
parent d1b2664071
commit b69d8ec789
4 changed files with 47 additions and 1 deletions
@@ -6,3 +6,4 @@ export * from './idAndIndex';
export * from './idToIndex';
export * from './indexToId';
export * from './indexes';
export * from './info';
+1 -1
View File
@@ -2,11 +2,11 @@
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import { ApiInterfaceRx } from '@polkadot/api/types';
import { AccountId, AccountIndex } from '@polkadot/types/interfaces';
import { Observable } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { ApiInterfaceRx } from '@polkadot/api/types';
import { ENUMSET_SIZE } from '@polkadot/types/primitive/Generic/AccountIndex';
import { createType } from '@polkadot/types';
+41
View File
@@ -0,0 +1,41 @@
// 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 { ApiInterfaceRx } from '@polkadot/api/types';
import { AccountId, Balance } from '@polkadot/types/interfaces';
import { Codec } from '@polkadot/types/types';
import { DeriveAccountInfo } from '../types';
import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
import { Bytes, Option, u32 } from '@polkadot/types';
import { u8aToString } from '@polkadot/util';
import { drr } from '../util/drr';
type Result = Option<[Bytes, Balance] & Codec>;
function formatNickname (api: ApiInterfaceRx, result: Result): string | undefined {
return result.isSome
? u8aToString(result.unwrap()[0]).substr(0, (api.consts.nicks.maxLength as u32).toNumber())
: undefined;
}
/**
* @name info
* @description Returns aux. info with regards to an account, current that includes the nickname
*/
export function info (api: ApiInterfaceRx): (address?: AccountId | string | null) => Observable<DeriveAccountInfo> {
// TODO We would really like to pass in an Address or AccountIndex here as well
return (address?: AccountId | string | null): Observable<DeriveAccountInfo> => {
return address && api.query.nicks
? api.query.nicks.nameOf<Result>(address).pipe(
map((result): DeriveAccountInfo => ({
nickname: formatNickname(api, result)
})),
drr()
)
: of({} as DeriveAccountInfo);
};
}
+4
View File
@@ -7,6 +7,10 @@ import { AccountId, Balance, BlockNumber, EraIndex, Exposure, Index, RewardDesti
import BN from 'bn.js';
import { u32 } from '@polkadot/types';
export interface DeriveAccountInfo {
nickname?: string;
}
export interface DerivedBalances {
accountId: AccountId;
accountNonce: Index;