From 0cf32a2d4a5ae75bcaa1955ad0fa16722a1d9014 Mon Sep 17 00:00:00 2001 From: George Lima Date: Sat, 12 Jan 2019 15:02:34 -0300 Subject: [PATCH] feature(settings): add export view keys button --- app/views/settings.js | 132 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 130 insertions(+), 2 deletions(-) diff --git a/app/views/settings.js b/app/views/settings.js index 670e277..0aa0df0 100644 --- a/app/views/settings.js +++ b/app/views/settings.js @@ -1,5 +1,133 @@ // @flow +import React, { PureComponent } from 'react'; +import styled from 'styled-components'; -import React from 'react'; +import { Button } from '../components/button'; +import { ModalComponent } from '../components/modal'; +import { ConfirmDialogComponent } from '../components/confirm-dialog'; +import { TextComponent } from '../components/text'; +import { InputComponent } from '../components/input'; -export const SettingsView = () =>
settings
; +import rpc from '../../services/api'; + +const Wrapper = styled.div` + margin-top: ${props => props.theme.layoutContentPaddingTop}; +`; + +const ModalContent = styled.div` + padding: 20px; + width: 100%; + overflow-x: hidden; +`; + +type ViewKey = { + zAddress: string, + key: string, +}; + +type Props = { + addresses: string[], +}; +type State = { + viewKeys: ViewKey[], + isLoading: boolean, + successExportViewKeys: boolean, + message: string | null, +}; + +export class SettingsView extends PureComponent { + state = { + viewKeys: [], + isLoading: false, + successExportViewKeys: false, + message: null, + }; + + exportViewKeys = () => { + const { addresses } = this.props; + + const zAddresses = addresses.filter(addr => addr.startsWith('z')); + + Promise.all( + zAddresses.map(async (zAddr) => { + const viewKey = await rpc.z_exportviewingkey(zAddr); + return { zAddress: zAddr, key: viewKey }; + }), + ).then((viewKeys) => { + this.setState({ + viewKeys, + successExportViewKeys: true, + }); + }); + }; + + handleCloseModal = (fn: () => void) => () => { + this.setState( + { + message: null, + }, + fn, + ); + }; + + render = () => { + const { + viewKeys, isLoading, successExportViewKeys, message, + } = this.state; + + return ( + + ( +