import { Button } from '@/Components/Button/Button' import { WebApplication } from '@/UIModels/Application' import { AppState } from '@/UIModels/AppState' import { PurchaseFlowPane } from '@/UIModels/AppState/PurchaseFlowState' import { observer } from 'mobx-react-lite' import { FunctionComponent } from 'preact' import { useEffect, useRef, useState } from 'preact/hooks' import { FloatingLabelInput } from '@/Components/Input/FloatingLabelInput' import { isEmailValid } from '@/Utils' import { loadPurchaseFlowUrl } from '@/Components/PurchaseFlow/PurchaseFlowWrapper' import { BlueDotIcon, CircleIcon, DiamondIcon, CreateAccountIllustration, } from '@standardnotes/stylekit' 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).catch(console.error) }) } 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(console.error) }) } } catch (err) { console.error(err) application.alertService.alert(err as string).catch(console.error) } 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}
) })