import Button from '@/Components/Button/Button' import { WebApplication } from '@/Application/Application' import { ViewControllerManager } from '@/Controllers/ViewControllerManager' import { PurchaseFlowPane } from '@/Controllers/PurchaseFlow/PurchaseFlowPane' import { observer } from 'mobx-react-lite' import { ChangeEventHandler, FunctionComponent, useEffect, useRef, useState } from 'react' import FloatingLabelInput from '@/Components/Input/FloatingLabelInput' import { isEmailValid } from '@/Utils' import { BlueDotIcon, CircleIcon, DiamondIcon } from '@standardnotes/icons' import { loadPurchaseFlowUrl } from '../PurchaseFlowFunctions' type Props = { viewControllerManager: ViewControllerManager application: WebApplication } const SignIn: FunctionComponent = ({ viewControllerManager, application }) => { const { setCurrentPane } = viewControllerManager.purchaseFlowController const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [isSigningIn, setIsSigningIn] = useState(false) const [isEmailInvalid, setIsEmailInvalid] = useState(false) const [isPasswordInvalid, setIsPasswordInvalid] = useState(false) const [otherErrorMessage, setOtherErrorMessage] = useState('') const emailInputRef = useRef(null) const passwordInputRef = useRef(null) useEffect(() => { if (emailInputRef.current) { emailInputRef.current?.focus() } }, []) const handleEmailChange: ChangeEventHandler = (e) => { setEmail(e.target.value) setIsEmailInvalid(false) } const handlePasswordChange: ChangeEventHandler = (e) => { setPassword(e.target.value) setIsPasswordInvalid(false) setOtherErrorMessage('') } const handleCreateAccountInstead = () => { if (isSigningIn) { return } setCurrentPane(PurchaseFlowPane.CreateAccount) } const handleSignIn = async () => { if (!email) { emailInputRef?.current?.focus() return } if (!isEmailValid(email)) { setIsEmailInvalid(true) emailInputRef?.current?.focus() return } if (!password) { passwordInputRef?.current?.focus() return } setIsSigningIn(true) try { const response = await application.signIn(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) if ((err as Error).toString().includes('Invalid email or password')) { setIsSigningIn(false) setIsEmailInvalid(true) setIsPasswordInvalid(true) setOtherErrorMessage('Invalid email or password.') setPassword('') } else { application.alertService.alert(err as string).catch(console.error) } } } return (

Sign in

to continue to Standard Notes.
{isEmailInvalid && !otherErrorMessage ? (
Please provide a valid email.
) : null} {otherErrorMessage ?
{otherErrorMessage}
: null}
) } export default observer(SignIn)