import { useState } from 'react'; import type { ReactElement, SyntheticEvent } from 'react'; import { ApiError } from '@altricade/core/api'; import { useSession } from '../../../entities/session'; type Mode = 'login' | 'register'; export const AuthForm = (): ReactElement => { const { login, register } = useSession(); const [mode, setMode] = useState('login'); const [username, setUsername] = useState(''); const [displayName, setDisplayName] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); const submit = async (event: SyntheticEvent): Promise => { event.preventDefault(); setBusy(true); setError(null); try { if (mode === 'login') { await login({ username, password }); } else { await register({ username, displayName, password }); } } catch (caught) { setError(caught instanceof ApiError ? caught.message : 'Something went wrong'); } finally { setBusy(false); } }; return (

Altricade

{mode === 'login' ? 'Welcome back.' : 'Create your account.'}

void submit(event)}> {mode === 'register' ? ( ) : null} {error !== null ?

{error}

: null}

{mode === 'login' ? "Don't have an account?" : 'Already have an account?'}{' '}

); };