import { isKeystorePassRequired } from 'libs/wallet'; import React, { Component } from 'react'; import translate, { translateRaw } from 'translations'; export interface KeystoreValue { file: string; password: string; valid: boolean; } function isPassRequired(file: string): boolean { let passReq = false; try { passReq = isKeystorePassRequired(file); } catch (e) { // TODO: communicate invalid file to user } return passReq; } export default class KeystoreDecrypt extends Component { public props: { value: KeystoreValue; onChange(value: KeystoreValue): void; onUnlock(): void; }; public render() { const { file, password } = this.props.value; const passReq = isPassRequired(file); return (

{translate('ADD_Radio_2_alt')}

{translate('ADD_Label_3')}

0 ? 'is-valid' : 'is-invalid' }`} value={password} onChange={this.onPasswordChange} onKeyDown={this.onKeyDown} placeholder={translateRaw('x_Password')} type="password" />
); } public onKeyDown = (e: any) => { if (e.keyCode === 13) { e.preventDefault(); e.stopPropagation(); this.props.onUnlock(); } }; public onPasswordChange = (e: any) => { const valid = this.props.value.file.length && e.target.value.length; this.props.onChange({ ...this.props.value, password: e.target.value, valid }); }; public handleFileSelection = (e: any) => { const fileReader = new FileReader(); const target = e.target; const inputFile = target.files[0]; fileReader.onload = () => { const keystore = fileReader.result; const passReq = isPassRequired(keystore); this.props.onChange({ ...this.props.value, file: keystore, valid: keystore.length && !passReq }); }; fileReader.readAsText(inputFile, 'utf-8'); }; }