import React, { useEffect, useState } from 'react'; import { Switch, Route, useHistory, useLocation } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import Unlock from '../unlock-page'; import { 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, getIsInitialized, getIsUnlocked, getSeedPhraseBackedUp, } from '../../ducks/metamask/metamask'; import { createNewVaultAndGetSeedPhrase, unlockAndGetSeedPhrase, createNewVaultAndRestore, } from '../../store/actions'; import { getFirstTimeFlowTypeRoute } from '../../selectors'; import Button from '../../components/ui/button'; import { useI18nContext } from '../../hooks/useI18nContext'; 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'; export default function OnboardingFlow() { const [secretRecoveryPhrase, setSecretRecoveryPhrase] = useState(''); const dispatch = useDispatch(); const currentLocation = useLocation(); const history = useHistory(); const t = useI18nContext(); const isInitialized = useSelector(getIsInitialized); const isUnlocked = useSelector(getIsUnlocked); const completedOnboarding = useSelector(getCompletedOnboarding); const seedPhraseBackedUp = useSelector(getSeedPhraseBackedUp); const nextRoute = useSelector(getFirstTimeFlowTypeRoute); useEffect(() => { if (completedOnboarding && seedPhraseBackedUp) { history.push(DEFAULT_ROUTE); return; } if (isInitialized && !isUnlocked) { history.push(ONBOARDING_UNLOCK_ROUTE); } }, [ history, completedOnboarding, isInitialized, isUnlocked, seedPhraseBackedUp, ]); 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 (