import React, { useEffect, useState, useContext } from 'react'; import { Switch, Route, useHistory, useLocation } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import Unlock from '../unlock-page'; import { ///: BEGIN:ONLY_INCLUDE_IN(flask) ONBOARDING_EXPERIMENTAL_AREA, ///: END:ONLY_INCLUDE_IN ONBOARDING_CREATE_PASSWORD_ROUTE, ONBOARDING_REVIEW_SRP_ROUTE, ONBOARDING_CONFIRM_SRP_ROUTE, ONBOARDING_UNLOCK_ROUTE, ONBOARDING_WELCOME_ROUTE, DEFAULT_ROUTE, ONBOARDING_SECURE_YOUR_WALLET_ROUTE, ONBOARDING_PRIVACY_SETTINGS_ROUTE, ONBOARDING_COMPLETION_ROUTE, ONBOARDING_IMPORT_WITH_SRP_ROUTE, ONBOARDING_PIN_EXTENSION_ROUTE, ONBOARDING_METAMETRICS, } from '../../helpers/constants/routes'; import { getCompletedOnboarding } from '../../ducks/metamask/metamask'; import { createNewVaultAndGetSeedPhrase, unlockAndGetSeedPhrase, createNewVaultAndRestore, verifySeedPhrase, } from '../../store/actions'; import { getFirstTimeFlowTypeRoute } from '../../selectors'; import { MetaMetricsContext } from '../../contexts/metametrics'; import Button from '../../components/ui/button'; import { useI18nContext } from '../../hooks/useI18nContext'; import { EVENT_NAMES, EVENT } from '../../../shared/constants/metametrics'; ///: BEGIN:ONLY_INCLUDE_IN(flask) import ExperimentalArea from '../../components/app/flask/experimental-area'; ///: END:ONLY_INCLUDE_IN import OnboardingFlowSwitch from './onboarding-flow-switch/onboarding-flow-switch'; import CreatePassword from './create-password/create-password'; import ReviewRecoveryPhrase from './recovery-phrase/review-recovery-phrase'; import SecureYourWallet from './secure-your-wallet/secure-your-wallet'; import ConfirmRecoveryPhrase from './recovery-phrase/confirm-recovery-phrase'; import PrivacySettings from './privacy-settings/privacy-settings'; import CreationSuccessful from './creation-successful/creation-successful'; import OnboardingWelcome from './welcome/welcome'; import ImportSRP from './import-srp/import-srp'; import OnboardingPinExtension from './pin-extension/pin-extension'; import MetaMetricsComponent from './metametrics/metametrics'; const TWITTER_URL = 'https://twitter.com/MetaMask'; export default function OnboardingFlow() { const [secretRecoveryPhrase, setSecretRecoveryPhrase] = useState(''); const dispatch = useDispatch(); const { pathName, search } = useLocation(); const history = useHistory(); const t = useI18nContext(); const completedOnboarding = useSelector(getCompletedOnboarding); const nextRoute = useSelector(getFirstTimeFlowTypeRoute); const isFromReminder = new URLSearchParams(search).get('isFromReminder'); const trackEvent = useContext(MetaMetricsContext); useEffect(() => { if (completedOnboarding && !isFromReminder) { history.push(DEFAULT_ROUTE); } }, [history, completedOnboarding, isFromReminder]); useEffect(() => { const verifyAndSetSeedPhrase = async () => { if (completedOnboarding && !secretRecoveryPhrase) { const verifiedSeedPhrase = await verifySeedPhrase(); if (verifiedSeedPhrase) { setSecretRecoveryPhrase(verifiedSeedPhrase); } } }; verifyAndSetSeedPhrase(); }, [completedOnboarding, secretRecoveryPhrase]); const handleCreateNewAccount = async (password) => { const newSecretRecoveryPhrase = await dispatch( createNewVaultAndGetSeedPhrase(password), ); setSecretRecoveryPhrase(newSecretRecoveryPhrase); }; const handleUnlock = async (password) => { const retrievedSecretRecoveryPhrase = await dispatch( unlockAndGetSeedPhrase(password), ); setSecretRecoveryPhrase(retrievedSecretRecoveryPhrase); history.push(nextRoute); }; const handleImportWithRecoveryPhrase = async (password, srp) => { return await dispatch(createNewVaultAndRestore(password, srp)); }; return (