import { Button } from '@/components/Button'; import { WebApplication } from '@/ui_models/application'; import { AppState } from '@/ui_models/app_state'; import { PurchaseFlowPane } from '@/ui_models/app_state/purchase_flow_state'; import { observer } from 'mobx-react-lite'; import { FunctionComponent } from 'preact'; import { useEffect, useRef, useState } from 'preact/hooks'; import Illustration from '../../../svg/create-account-illustration.svg'; import Circle from '../../../svg/circle-55.svg'; import BlueDot from '../../../svg/blue-dot.svg'; import Diamond from '../../../svg/diamond-with-horizontal-lines.svg'; import { FloatingLabelInput } from '@/components/FloatingLabelInput'; import { isEmailValid } from '@/utils'; import { loadPurchaseFlowUrl } from '../PurchaseFlowWrapper'; type Props = { appState: AppState; application: WebApplication; }; export const CreateAccount: FunctionComponent = observer( ({ appState, application }) => { const { setCurrentPane } = appState.purchaseFlow; const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [isCreatingAccount, setIsCreatingAccount] = useState(false); const [isEmailInvalid, setIsEmailInvalid] = useState(false); const [isPasswordNotMatching, setIsPasswordNotMatching] = useState(false); const emailInputRef = useRef(null); const passwordInputRef = useRef(null); const confirmPasswordInputRef = useRef(null); useEffect(() => { if (emailInputRef.current) emailInputRef.current!.focus(); }, []); const handleEmailChange = (e: Event) => { if (e.target instanceof HTMLInputElement) { setEmail(e.target.value); setIsEmailInvalid(false); } }; const handlePasswordChange = (e: Event) => { if (e.target instanceof HTMLInputElement) { setPassword(e.target.value); } }; const handleConfirmPasswordChange = (e: Event) => { if (e.target instanceof HTMLInputElement) { setConfirmPassword(e.target.value); setIsPasswordNotMatching(false); } }; const handleSignInInstead = () => { setCurrentPane(PurchaseFlowPane.SignIn); }; const subscribeWithoutAccount = () => { loadPurchaseFlowUrl(application).catch((err) => { console.error(err); application.alertService.alert(err); }); }; const handleCreateAccount = async () => { if (!email) { emailInputRef?.current!.focus(); return; } if (!isEmailValid(email)) { setIsEmailInvalid(true); emailInputRef?.current!.focus(); return; } if (!password) { passwordInputRef?.current!.focus(); return; } if (!confirmPassword) { confirmPasswordInputRef?.current!.focus(); return; } if (password !== confirmPassword) { setConfirmPassword(''); setIsPasswordNotMatching(true); confirmPasswordInputRef?.current!.focus(); return; } setIsCreatingAccount(true); try { const response = await application.register(email, password); if (response.error || response.data?.error) { throw new Error( response.error?.message || response.data?.error?.message ); } else { loadPurchaseFlowUrl(application).catch((err) => { console.error(err); application.alertService.alert(err); }); } } catch (err) { console.error(err); application.alertService.alert(err as string); } finally { setIsCreatingAccount(false); } }; return (

Create your free account

to continue to Standard Notes.
{isEmailInvalid ? (
Please provide a valid email.
) : null} {isPasswordNotMatching ? (
Passwords don't match. Please try again.
) : null}
); } );