import { Box, Button, TextField } from '@mui/material'; import { useForm } from '@tanstack/react-form'; import { useRouter } from '@tanstack/react-router'; import { FC, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useApi } from '../../../api/Api'; import { Login } from '../../../types/User'; import ErrorComponent from '../../Error/ErrorComponent'; interface Props { handleClose: () => void; } const LoginForm: FC = ({ handleClose }) => { const [error, setError] = useState(); const { t } = useTranslation(); const router = useRouter(); const Api = useApi(); const form = useForm({ defaultValues: { email: '', password: '', }, onSubmit: async ({ value }) => { try { await Api.logIn(value.email, value.password); router.invalidate(); handleClose(); //eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (_error: any) { setError(_error); } }, }); return (
{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} onKeyDown={(event) => { if (event.key === 'Tab') { event.stopPropagation(); } }} noValidate > (!value ? t('Email required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Email required'); }, }} children={(field) => { return ( <> field.handleChange(e.target.value)} size="small" label={t('Email')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} type="email" autoComplete="email" inputMode="email" fullWidth /> ); }} /> (!value ? t('Password required') : undefined), onChangeAsyncDebounceMs: 250, onChangeAsync: async ({ value }) => { return !value && t('Password required'); }, }} children={(field) => { return ( <> field.handleChange(e.target.value)} size="small" label={t('Password')} required error={field.state.meta.isTouched && field.state.meta.errors.length > 0} helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''} type="password" autoComplete="current-password" fullWidth /> ); }} /> [state.canSubmit, state.isSubmitting]} children={([canSubmit]) => ( <> )} /> {error && }
); }; export default LoginForm;