import React, { Component } from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux' import { createNewVaultAndRestore, unMarkPasswordForgotten, initializeThreeBox, } from '../../store/actions' import { DEFAULT_ROUTE } from '../../helpers/constants/routes' import TextField from '../../components/ui/text-field' import Button from '../../components/ui/button' class RestoreVaultPage extends Component { static contextTypes = { t: PropTypes.func, metricsEvent: PropTypes.func, } static propTypes = { warning: PropTypes.string, createNewVaultAndRestore: PropTypes.func.isRequired, leaveImportSeedScreenState: PropTypes.func, history: PropTypes.object, isLoading: PropTypes.bool, initializeThreeBox: PropTypes.func, }; state = { seedPhrase: '', password: '', confirmPassword: '', seedPhraseError: null, passwordError: null, confirmPasswordError: null, } parseSeedPhrase = (seedPhrase) => { return seedPhrase .match(/\w+/g) .join(' ') } handleSeedPhraseChange (seedPhrase) { let seedPhraseError = null if (seedPhrase && this.parseSeedPhrase(seedPhrase).split(' ').length !== 12) { seedPhraseError = this.context.t('seedPhraseReq') } this.setState({ seedPhrase, seedPhraseError }) } handlePasswordChange (password) { const { confirmPassword } = this.state let confirmPasswordError = null let passwordError = null if (password && password.length < 8) { passwordError = this.context.t('passwordNotLongEnough') } if (confirmPassword && password !== confirmPassword) { confirmPasswordError = this.context.t('passwordsDontMatch') } this.setState({ password, passwordError, confirmPasswordError }) } handleConfirmPasswordChange (confirmPassword) { const { password } = this.state let confirmPasswordError = null if (password !== confirmPassword) { confirmPasswordError = this.context.t('passwordsDontMatch') } this.setState({ confirmPassword, confirmPasswordError }) } onClick = () => { const { password, seedPhrase } = this.state const { createNewVaultAndRestore, leaveImportSeedScreenState, history, initializeThreeBox, } = this.props leaveImportSeedScreenState() createNewVaultAndRestore(password, this.parseSeedPhrase(seedPhrase)) .then(() => { this.context.metricsEvent({ eventOpts: { category: 'Retention', action: 'userEntersSeedPhrase', name: 'onboardingRestoredVault', }, }) initializeThreeBox() history.push(DEFAULT_ROUTE) }) } hasError () { const { passwordError, confirmPasswordError, seedPhraseError } = this.state return passwordError || confirmPasswordError || seedPhraseError } render () { const { seedPhrase, password, confirmPassword, seedPhraseError, passwordError, confirmPasswordError, } = this.state const { t } = this.context const { isLoading } = this.props const disabled = !seedPhrase || !password || !confirmPassword || isLoading || this.hasError() return (