import { useCallback, useState } from 'react'; import type { FormEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { useAuth } from '../context/AuthContext'; import AuthErrorAlert from './AuthErrorAlert'; import AuthInputField from './AuthInputField'; import AuthScreenLayout from './AuthScreenLayout'; type LoginFormState = { username: string; password: string; }; const initialState: LoginFormState = { username: '', password: '', }; export default function LoginForm() { const { t } = useTranslation('auth'); const { login } = useAuth(); const [formState, setFormState] = useState(initialState); const [errorMessage, setErrorMessage] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const updateField = useCallback((field: keyof LoginFormState, value: string) => { setFormState((previous) => ({ ...previous, [field]: value })); }, []); const handleSubmit = useCallback( async (event: FormEvent) => { event.preventDefault(); setErrorMessage(''); // Keep form validation local so each auth screen owns its own UI feedback. if (!formState.username.trim() || !formState.password) { setErrorMessage(t('login.errors.requiredFields')); return; } setIsSubmitting(true); const result = await login(formState.username.trim(), formState.password); if (!result.success) { setErrorMessage(result.error); } setIsSubmitting(false); }, [formState.password, formState.username, login, t], ); return (
updateField('username', value)} placeholder={t('login.placeholders.username')} isDisabled={isSubmitting} /> updateField('password', value)} placeholder={t('login.placeholders.password')} isDisabled={isSubmitting} type="password" />
); }