// @flow import * as React from 'react'; import Page from 'component/page'; import Card from 'component/common/card'; import Button from 'component/button'; import { Form, FormField } from 'component/common/form'; import I18nMessage from 'component/i18nMessage'; import * as ICONS from 'constants/icons'; type Props = { walletEncrypted: boolean, encryptWallet: (string) => void, decryptWallet: (string) => void, registering: boolean, registerError: string, token: string, authenticating: boolean, authError: string, derivingKeys: boolean, encHmacKey: string, // ? encRootPass: string, encProviderPass: string, getSalt: (string) => void, deriveSecrets: (string, string, string) => void, // something // begin // email handleEmail: (string, string) => void, // return something? checkingEmail: boolean, candidateEmail?: string, registeredEmail?: string, saltSeed: string, emailError: string, // password/register register: (string) => void, waitForVerify: () => void, }; export default function SettingsSyncPage(props: Props) { // const { } = props; const { registering, registerError, token, authenticating, authError, authenticate, encRootPass, register, // begin // .. email registeredEmail, handleEmail, checkingEmail, candidateEmail, saltSeed, emailError, // password // verify waitForVerify, } = props; /* Register / auth */ // modes const SIGN_IN_MODE = 'sign_in_mode'; const SIGN_UP_MODE = 'sign_up_mode'; const [mode, setMode] = React.useState(SIGN_IN_MODE); // steps const EMAIL_SCREEN = 'sign_in'; // show email input // checking email const PASSWORD_SCREEN = 'password'; // show password input // registering const REGISTERING_SCREEN = 'register'; // show working page for deriving passwords, registering const VERIFY_SCREEN = 'verify'; // show waiting for email verification // waiting for email verification const SYNC_SCREEN = 'sync'; // syncing wallet with server const DONE_SCREEN = 'done'; const [email, setEmail] = React.useState(); const [pass, setPass] = React.useState(); const [showPass, setShowPass] = React.useState(false); let STEP; if (!candidateEmail) { STEP = EMAIL_SCREEN; // present email form, on submit check email salt } else if (!encRootPass && !registering) { // make this "hasPasswords" STEP = PASSWORD_SCREEN; // present password form, on submit derive keys and register } else if (registering) { STEP = REGISTERING_SCREEN; } else if (encRootPass && !token) { STEP = VERIFY_SCREEN; // until token } else if (token) { STEP = SYNC_SCREEN; } // error comes from store // const [error, setError] = React.useState(''); React.useEffect(() => { if (registeredEmail && !token) { waitForVerify(); } return () => { waitForVerify(true); }; }, [registeredEmail, token]); React.useEffect(() => { if (token) { // sign up // what // pushAndStart(); // what // } }, [token]); const handleRegister = (e) => { register(pass); }; const handleSignUpEmail = async () => { // get salt for email to make sure email doesn't exist handleEmail(email, true); }; const handleSignInEmail = () => { handleEmail(email, false); }; const doneCard = ( You are signed in as %email%. } actions={
Like, done and stuff...
} /> ); const verifyCard = ( Waiting for verification...} /> ); const registerCard = ( Math...} /> ); const syncCard = ( Math...} /> ); const signInEmailCard = (

setMode(SIGN_UP_MODE)} label={__('Sign up')} />, }} > Sign in to your sync account. Or %sign_up%.

} actions={
setEmail(e.target.value)} helper={emailError && emailError} /> setPass(e.target.value)} />

, }} > Some sign-in relevant message.

} /> ); const signUpEmailCard = (

setMode(SIGN_IN_MODE)} label={__('Sign in')} />, }} > Sign up for a sync account. Or %sign_in%.

} actions={
setEmail(e.target.value)} helper={emailError && emailError} /> setPass(e.target.value)} />
} /> ); const passwordCard = (

setMode(EMAIL_SCREEN)} label={__('Sign in')} />, }} > Enter a password.

} actions={

, }} > By creating an account, you agree to our %terms% and confirm you're over the age of 13.

} /> ); return (
{STEP === EMAIL_SCREEN && mode === SIGN_IN_MODE && <>{signInEmailCard}} {STEP === EMAIL_SCREEN && mode === SIGN_UP_MODE && <>{signUpEmailCard}} {STEP === PASSWORD_SCREEN && <>{passwordCard}} {STEP === REGISTERING_SCREEN && <>{registerCard}} {STEP === VERIFY_SCREEN && <>{verifyCard}} {STEP === SYNC_SCREEN && <>{syncCard}}
); }