import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import Button from '../../../../components/ui/button'; import { INITIALIZE_SEED_PHRASE_INTRO_ROUTE, INITIALIZE_SELECT_ACTION_ROUTE, } from '../../../../helpers/constants/routes'; import TextField from '../../../../components/ui/text-field'; export default class NewAccount extends PureComponent { static contextTypes = { metricsEvent: PropTypes.func, t: PropTypes.func, }; static propTypes = { onSubmit: PropTypes.func.isRequired, history: PropTypes.object.isRequired, }; state = { password: '', confirmPassword: '', passwordError: '', confirmPasswordError: '', termsChecked: false, }; isValid() { const { password, confirmPassword, passwordError, confirmPasswordError, } = this.state; if (!password || !confirmPassword || password !== confirmPassword) { return false; } if (password.length < 8) { return false; } return !passwordError && !confirmPasswordError; } handlePasswordChange(password) { const { t } = this.context; this.setState((state) => { const { confirmPassword } = state; let passwordError = ''; let confirmPasswordError = ''; if (password && password.length < 8) { passwordError = t('passwordNotLongEnough'); } if (confirmPassword && password !== confirmPassword) { confirmPasswordError = t('passwordsDontMatch'); } return { password, passwordError, confirmPasswordError, }; }); } handleConfirmPasswordChange(confirmPassword) { const { t } = this.context; this.setState((state) => { const { password } = state; let confirmPasswordError = ''; if (password !== confirmPassword) { confirmPasswordError = t('passwordsDontMatch'); } return { confirmPassword, confirmPasswordError, }; }); } handleCreate = async (event) => { event.preventDefault(); if (!this.isValid()) { return; } const { password } = this.state; const { onSubmit, history } = this.props; try { await onSubmit(password); this.context.metricsEvent({ eventOpts: { category: 'Onboarding', action: 'Create Password', name: 'Submit Password', }, }); history.push(INITIALIZE_SEED_PHRASE_INTRO_ROUTE); } catch (error) { this.setState({ passwordError: error.message }); } }; toggleTermsCheck = () => { this.context.metricsEvent({ eventOpts: { category: 'Onboarding', action: 'Create Password', name: 'Check ToS', }, }); this.setState((prevState) => ({ termsChecked: !prevState.termsChecked, })); }; onTermsKeyPress = ({ key }) => { if (key === ' ' || key === 'Enter') { this.toggleTermsCheck(); } }; render() { const { t } = this.context; const { password, confirmPassword, passwordError, confirmPasswordError, termsChecked, } = this.state; return (
{ e.preventDefault(); this.context.metricsEvent({ eventOpts: { category: 'Onboarding', action: 'Create Password', name: 'Go Back from Onboarding Create', }, }); this.props.history.push(INITIALIZE_SELECT_ACTION_ROUTE); }} href="#" > {`< ${t('back')}`}
{t('createPassword')}
this.handlePasswordChange(event.target.value)} error={passwordError} autoFocus autoComplete="new-password" margin="normal" fullWidth largeLabel /> this.handleConfirmPasswordChange(event.target.value) } error={confirmPasswordError} autoComplete="confirm-password" margin="normal" fullWidth largeLabel />
{termsChecked ? : null}
{t('acceptTermsOfUse', [ e.stopPropagation()} key="first-time-flow__link-text" href="https://metamask.io/terms.html" target="_blank" rel="noopener noreferrer" > {t('terms')} , ])}
); } }