import { z as zod } from 'zod'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import Link from '@mui/material/Link'; import Alert from '@mui/material/Alert'; import Stack from '@mui/material/Stack'; import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import LoadingButton from '@mui/lab/LoadingButton'; import InputAdornment from '@mui/material/InputAdornment'; import { paths } from 'src/routes/paths'; import { useRouter, useSearchParams } from 'src/routes/hooks'; import { RouterLink } from 'src/routes/components'; import { useBoolean } from 'src/hooks/use-boolean'; import { Iconify } from 'src/components/iconify'; import { Form, Field } from 'src/components/hook-form'; import { useAuthContext } from 'src/auth/hooks'; import { signInWithPassword } from 'src/auth/context/jwt'; // ---------------------------------------------------------------------- export const SignInSchema = zod.object({ email: zod .string() .min(1, { message: 'Введите email!' }) .email({ message: 'Введите корректный email адрес!' }), password: zod .string() .min(1, { message: 'Введите пароль!' }) .min(8, { message: 'Пароль должен содержать не менее 8 символов!' }), }); // ---------------------------------------------------------------------- export function JwtSignInView() { const router = useRouter(); const searchParams = useSearchParams(); const { checkUserSession } = useAuthContext(); const [errorMsg, setErrorMsg] = useState(''); const password = useBoolean(); const returnTo = searchParams.get('returnTo') || paths.dashboard.root; const defaultValues = { email: '', password: '', }; const methods = useForm({ resolver: zodResolver(SignInSchema), defaultValues, }); const { handleSubmit, formState: { isSubmitting }, } = methods; const onSubmit = handleSubmit(async (data) => { try { await signInWithPassword({ email: data.email, password: data.password }); await checkUserSession?.(); router.replace(returnTo); } catch (error) { console.error(error); setErrorMsg(error instanceof Error ? error.message : error); } }); const renderHead = ( Войти в аккаунт Нет аккаунта? Зарегистрироваться ); const renderForm = ( Забыли пароль? ), }} /> Войти ); return ( <> {renderHead} {!!errorMsg && ( {errorMsg} )}
{renderForm}
); }