A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
ciphermask/ui/pages/onboarding-flow/onboarding-flow.js

181 lines
5.9 KiB

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,
} 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';
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(() => {
// For ONBOARDING_V2 dev purposes,
// Remove when ONBOARDING_V2 dev complete
if (process.env.ONBOARDING_V2) {
history.push(ONBOARDING_PIN_EXTENSION_ROUTE);
return;
}
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 (
<div className="onboarding-flow">
<div className="onboarding-flow__wrapper">
<Switch>
<Route
path={ONBOARDING_CREATE_PASSWORD_ROUTE}
render={(routeProps) => (
<CreatePassword
{...routeProps}
createNewAccount={handleCreateNewAccount}
importWithRecoveryPhrase={handleImportWithRecoveryPhrase}
secretRecoveryPhrase={secretRecoveryPhrase}
/>
)}
/>
<Route
exact
path={ONBOARDING_SECURE_YOUR_WALLET_ROUTE}
component={SecureYourWallet}
/>
<Route
path={ONBOARDING_REVIEW_SRP_ROUTE}
render={() => (
<ReviewRecoveryPhrase
secretRecoveryPhrase={secretRecoveryPhrase}
/>
)}
/>
<Route
path={ONBOARDING_CONFIRM_SRP_ROUTE}
render={() => (
<ConfirmRecoveryPhrase
secretRecoveryPhrase={secretRecoveryPhrase}
/>
)}
/>
<Route
path={ONBOARDING_IMPORT_WITH_SRP_ROUTE}
render={(routeProps) => (
<ImportSRP
{...routeProps}
submitSecretRecoveryPhrase={setSecretRecoveryPhrase}
/>
)}
/>
<Route
path={ONBOARDING_UNLOCK_ROUTE}
render={(routeProps) => (
<Unlock {...routeProps} onSubmit={handleUnlock} />
)}
/>
<Route
path={ONBOARDING_PRIVACY_SETTINGS_ROUTE}
component={PrivacySettings}
/>
<Route
path={ONBOARDING_COMPLETION_ROUTE}
component={CreationSuccessful}
/>
<Route
path={ONBOARDING_WELCOME_ROUTE}
component={OnboardingWelcome}
/>
<Route
path={ONBOARDING_PIN_EXTENSION_ROUTE}
component={OnboardingPinExtension}
/>
<Route exact path="*" component={OnboardingFlowSwitch} />
</Switch>
</div>
{currentLocation?.pathname === ONBOARDING_COMPLETION_ROUTE && (
<Button
className="onboarding-flow__twitter-button"
type="link"
href="https://twitter.com/MetaMask"
target="_blank"
>
<span>{t('followUsOnTwitter')}</span>
<img src="images/twitter-icon.png" />
</Button>
)}
</div>
);
}