import React, { useState, useMemo } from 'react'; import { useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { debounce } from 'lodash'; import PropTypes from 'prop-types'; import Box from '../../../components/ui/box'; import Button from '../../../components/ui/button'; import Typography from '../../../components/ui/typography'; import { TEXT_ALIGN, TYPOGRAPHY, JUSTIFY_CONTENT, FONT_WEIGHT, } from '../../../helpers/constants/design-system'; import { ThreeStepProgressBar, threeStepStages, } from '../../../components/app/step-progress-bar'; import { ONBOARDING_COMPLETION_ROUTE } from '../../../helpers/constants/routes'; import { useI18nContext } from '../../../hooks/useI18nContext'; import { setSeedPhraseBackedUp } from '../../../store/actions'; import RecoveryPhraseChips from './recovery-phrase-chips'; export default function ConfirmRecoveryPhrase({ secretRecoveryPhrase = '' }) { const history = useHistory(); const t = useI18nContext(); const dispatch = useDispatch(); const splitSecretRecoveryPhrase = secretRecoveryPhrase.split(' '); const indicesToCheck = [2, 3, 7]; const [matching, setMatching] = useState(false); // Removes seed phrase words from chips corresponding to the // indicesToCheck so that user has to complete the phrase and confirm // they have saved it. const initializePhraseElements = () => { const phraseElements = { ...splitSecretRecoveryPhrase }; indicesToCheck.forEach((i) => { phraseElements[i] = ''; }); return phraseElements; }; const [phraseElements, setPhraseElements] = useState( initializePhraseElements(), ); const validate = useMemo( () => debounce((elements) => { setMatching(Object.values(elements).join(' ') === secretRecoveryPhrase); }, 500), [setMatching, secretRecoveryPhrase], ); const handleSetPhraseElements = (values) => { setPhraseElements(values); validate(values); }; return (