import React, { Component } from 'react'; import translate from 'translations'; import { isKeystorePassRequired } from 'libs/keystore'; export type 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 { props: { value: KeystoreValue, onChange: (value: KeystoreValue) => void, onUnlock: () => void }; render() { const { file, password } = this.props.value; let 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={translate('x_Password')} type="password" />
); } onKeyDown = (e: SyntheticKeyboardEvent) => { if (e.keyCode === 13) { e.preventDefault(); e.stopPropagation(); this.props.onUnlock(); } }; onPasswordChange = (e: SyntheticInputEvent) => { const valid = this.props.value.file.length && e.target.value.length; this.props.onChange({ ...this.props.value, password: e.target.value, valid }); }; handleFileSelection = (e: SyntheticInputEvent) => { const fileReader = new FileReader(); const inputFile = e.target.files[0]; fileReader.onload = () => { const keystore = fileReader.result; let passReq = isPassRequired(keystore); this.props.onChange({ ...this.props.value, file: keystore, valid: keystore.length && !passReq }); }; fileReader.readAsText(inputFile, 'utf-8'); }; }