import React, { Component } from 'react' import PropTypes from 'prop-types' import {connect} from 'react-redux' import classnames from 'classnames' import shuffle from 'lodash.shuffle' import {compose, onlyUpdateForPropTypes} from 'recompose' import Identicon from '../../../../ui/app/components/identicon' import {confirmSeedWords} from '../../../../ui/app/actions' import Breadcrumbs from './breadcrumbs' import LoadingScreen from './loading-screen' const LockIcon = props => ( ); class BackupPhraseScreen extends Component { static propTypes = { isLoading: PropTypes.bool.isRequired, address: PropTypes.string.isRequired, seedWords: PropTypes.string.isRequired, next: PropTypes.func.isRequired, confirmSeedWords: PropTypes.func.isRequired, }; static defaultProps = { seedWords: '' }; static PAGE = { SECRET: 'secret', CONFIRM: 'confirm' }; constructor(props) { const {seedWords} = props super(props) this.state = { isShowingSecret: false, page: BackupPhraseScreen.PAGE.SECRET, selectedSeeds: [], shuffledSeeds: seedWords && shuffle(seedWords.split(' ')), } } renderSecretWordsContainer () { const { isShowingSecret } = this.state return (
{this.props.seedWords}
{!isShowingSecret && (
this.setState({ isShowingSecret: true })} >
Click here to reveal secret words
)}
) } renderSecretScreen () { const { isShowingSecret } = this.state return (
Secret Backup Phrase
Your secret backup phrase makes it easy to back up and restore your account.
WARNING: Never disclose your backup phrase. Anyone with this phrase can take your Ether forever.
{this.renderSecretWordsContainer()}
Tips:
Store this phrase in a password manager like 1password.
Write this phrase on a piece of paper and store in a secure location. If you want even more security, write it down on multiple pieces of paper and store each in 2 - 3 different locations.
Memorize this phrase.
) } renderConfirmationScreen() { const { seedWords, confirmSeedWords, next } = this.props; const { selectedSeeds, shuffledSeeds } = this.state; const isValid = seedWords === selectedSeeds.map(([_, seed]) => seed).join(' ') return (
Confirm your Secret Backup Phrase
Please select each phrase in order to make sure it is correct.
{selectedSeeds.map(([_, word], i) => ( ))}
{shuffledSeeds.map((word, i) => { const isSelected = selectedSeeds .filter(([index, seed]) => seed === word && index === i) .length return ( ) })}
) } renderBack () { return this.state.page === BackupPhraseScreen.PAGE.CONFIRM ? ( { e.preventDefault() this.setState({ page: BackupPhraseScreen.PAGE.SECRET }) }} href="#" > {`< Back`} ) : null } renderContent () { switch (this.state.page) { case BackupPhraseScreen.PAGE.CONFIRM: return this.renderConfirmationScreen() case BackupPhraseScreen.PAGE.SECRET: default: return this.renderSecretScreen() } } render () { return this.props.isLoading ? : (
{this.renderBack()} {this.renderContent()}
) } } export default compose( onlyUpdateForPropTypes, connect( ({ metamask: { selectedAddress, seedWords }, appState: { isLoading } }) => ({ seedWords, isLoading, address: selectedAddress, }), dispatch => ({ confirmSeedWords: () => dispatch(confirmSeedWords()), }) ) )(BackupPhraseScreen)