import { login } from "@api/auth"; import CloseIcon from "@mui/icons-material/Close"; import { Box, Button, Dialog, IconButton, Link, Typography, useMediaQuery, useTheme } from "@mui/material"; import { setUserId, useUserStore } from "@root/user"; import InputTextfield from "@ui_kit/InputTextfield"; import Logotip from "../../pages/Landing/images/icons/QuizLogo"; import PasswordInput from "@ui_kit/passwordInput"; import { useFormik } from "formik"; import { enqueueSnackbar } from "notistack"; import { useEffect, useState } from "react"; import { Link as RouterLink, useNavigate, useLocation } from "react-router-dom"; import { object, string } from "yup"; interface Values { email: string; password: string; } const initialValues: Values = { email: "", password: "", }; const validationSchema = object({ email: string().required("Поле обязательно").email("Введите корректный email"), password: string().required("Поле обязательно").min(8, "Минимум 8 символов"), }); export default function SigninDialog() { const [isDialogOpen, setIsDialogOpen] = useState(true); const user = useUserStore((state) => state.user); const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const navigate = useNavigate(); const location = useLocation(); const formik = useFormik({ initialValues, validationSchema, onSubmit: async (values, formikHelpers) => { const [loginResponse, loginError] = await login(values.email.trim(), values.password.trim()); formikHelpers.setSubmitting(false); if (loginError) { return enqueueSnackbar(loginError); } if (loginResponse) { setUserId(loginResponse._id); } }, }); useEffect( function redirectIfSignedIn() { if (user) navigate("/list", { replace: true }); }, [navigate, user] ); function handleClose() { setIsDialogOpen(false); setTimeout(() => navigate("/"), theme.transitions.duration.leavingScreen); } return ( Вход в личный кабинет {/* Забыли пароль? */} Вы еще не присоединились? Регистрация Забыли пароль ); }