feature(settings): add import private keys

This commit is contained in:
George Lima 2019-01-12 23:18:59 -03:00
parent 52b4d14a35
commit fa6fbb16cd
1 changed files with 64 additions and 15 deletions

View File

@ -49,18 +49,24 @@ type Props = {
type State = {
viewKeys: Key[],
privateKeys: Key[],
isLoading: boolean,
importedPrivateKeys: string,
successExportViewKeys: boolean,
successExportPrivateKeys: boolean,
successImportPrivateKeys: boolean,
isLoading: boolean,
error: string | null,
};
export class SettingsView extends PureComponent<Props, State> {
state = {
viewKeys: [],
privateKeys: [],
importedPrivateKeys: '',
isLoading: false,
successExportViewKeys: false,
successExportPrivateKeys: false,
successImportPrivateKeys: false,
error: null,
};
exportViewKeys = () => {
@ -105,13 +111,40 @@ export class SettingsView extends PureComponent<Props, State> {
});
};
importPrivateKeys = () => {
const { importedPrivateKeys } = this.state;
if (!importedPrivateKeys) return;
const keys = importedPrivateKeys
.split('\n')
.map(key => key.trim())
.filter(key => !!key);
this.setState({ isLoading: true, error: null });
Promise.all(keys.map(key => rpc.z_importkey(key)))
.then(() => {
this.setState({
successImportPrivateKeys: true,
isLoading: false,
});
})
.catch((error) => {
this.setState({ isLoading: false, error: error.message });
});
};
render = () => {
const {
viewKeys,
isLoading,
successExportViewKeys,
privateKeys,
importedPrivateKeys,
successExportViewKeys,
successExportPrivateKeys,
successImportPrivateKeys,
isLoading,
error,
} = this.state;
return (
@ -142,13 +175,7 @@ export class SettingsView extends PureComponent<Props, State> {
</>
))
) : (
<TextComponent
value={
isLoading
? 'Loading...'
: 'Ut id vulputate arcu. Curabitur mattis aliquam magna sollicitudin vulputate. Morbi tempus bibendum porttitor. Quisque dictum ac ipsum a luctus. Donec et lacus ac erat consectetur molestie a id erat.'
}
/>
<TextComponent value='Ut id vulputate arcu. Curabitur mattis aliquam magna sollicitudin vulputate. Morbi tempus bibendum porttitor. Quisque dictum ac ipsum a luctus. Donec et lacus ac erat consectetur molestie a id erat.' />
)}
</ModalContent>
</ConfirmDialogComponent>
@ -179,14 +206,36 @@ export class SettingsView extends PureComponent<Props, State> {
</>
))
) : (
<TextComponent value='Ut id vulputate arcu. Curabitur mattis aliquam magna sollicitudin vulputate. Morbi tempus bibendum porttitor. Quisque dictum ac ipsum a luctus. Donec et lacus ac erat consectetur molestie a id erat.' />
)}
</ModalContent>
</ConfirmDialogComponent>
<ConfirmDialogComponent
title='Import private keys'
renderTrigger={toggleVisibility => (
<Btn label='Import private keys' onClick={toggleVisibility} />
)}
onConfirm={this.importPrivateKeys}
showButtons={!successImportPrivateKeys}
width={900}
isLoading={isLoading}
>
<ModalContent>
<InputLabelComponent value='Please paste your private keys here, one per line. The keys will be imported into your zcashd node' />
<InputComponent
value={importedPrivateKeys}
onChange={value => this.setState({ importedPrivateKeys: value })}
inputType='textarea'
rows={10}
/>
{successImportPrivateKeys && (
<TextComponent
value={
isLoading
? 'Loading...'
: 'Ut id vulputate arcu. Curabitur mattis aliquam magna sollicitudin vulputate. Morbi tempus bibendum porttitor. Quisque dictum ac ipsum a luctus. Donec et lacus ac erat consectetur molestie a id erat.'
}
value='Private keys imported in your node'
align='center'
/>
)}
{error && <TextComponent value={error} align='center' />}
</ModalContent>
</ConfirmDialogComponent>
</Wrapper>