Initial add from apps

This commit is contained in:
Jaco Greeff
2018-12-05 11:35:28 +01:00
commit 21c47a7d3a
79 changed files with 15785 additions and 0 deletions
@@ -0,0 +1,9 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { accountKey } from '../defaults';
import genericSubject from './genericSubject';
export default genericSubject(accountKey, true);
@@ -0,0 +1,9 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { addressKey } from '../defaults';
import genericSubject from './genericSubject';
export default genericSubject(addressKey);
@@ -0,0 +1,16 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { BehaviorSubject } from 'rxjs';
const subject = new BehaviorSubject(false);
export default {
isDevelopment: (): boolean =>
subject.getValue(),
set: (isDevelopment: boolean): void => {
subject.next(isDevelopment);
},
subject
};
@@ -0,0 +1,61 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { BehaviorSubject } from 'rxjs';
import { SubjectInfo, AddressSubject, SingleAddress } from './types';
import { KeyringJson } from '../types';
import store from 'store';
import createOptionItem from '../options/item';
import development from './development';
export default function genericSubject (keyCreator: (address: string) => string, withTest: boolean = false): AddressSubject {
let current: SubjectInfo = {};
const subject = new BehaviorSubject({});
const next = (): void => {
const isDevMode = development.isDevelopment();
subject.next(
Object
.keys(current)
.reduce((filtered, key) => {
const { json: { meta: { isTesting = false } = {} } = {} } = current[key];
if (!withTest || isDevMode || isTesting !== true) {
filtered[key] = current[key];
}
return filtered;
}, {} as SubjectInfo)
);
};
development.subject.subscribe(next);
return {
add: (address: string, json: KeyringJson): SingleAddress => {
current = { ...current };
current[address] = {
json,
option: createOptionItem(address, json.meta.name)
};
store.set(keyCreator(address), json);
next();
return current[address];
},
remove: (address: string) => {
current = { ...current };
delete current[address];
store.remove(keyCreator(address));
next();
},
subject
};
}
@@ -0,0 +1,19 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
import accounts from './accounts';
import addresses from './addresses';
export default combineLatest(
accounts.subject,
addresses.subject
).pipe(
map(([accounts, addresses]) => ({
accounts,
addresses
}))
);
@@ -0,0 +1,33 @@
// Copyright 2017-2018 @polkadot/ui-keyring 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 { BehaviorSubject } from 'rxjs';
import { KeyringSectionOption } from '../options/types';
import { KeyringJson } from '../types';
export type SingleAccount = {
json: KeyringJson,
option: KeyringSectionOption
};
export type SingleAddress = {
json: KeyringJson,
option: KeyringSectionOption
};
export type SubjectInfo = {
[index: string]: SingleAddress
};
export type AccountSubject = {
add: (account: string, json: KeyringJson) => SingleAccount,
remove: (account: string) => void,
subject: BehaviorSubject<SubjectInfo>
};
export type AddressSubject = {
add: (address: string, json: KeyringJson) => SingleAddress,
remove: (address: string) => void,
subject: BehaviorSubject<SubjectInfo>
};