import { Box, Dialog, IconButton, Link, Typography, useMediaQuery, useTheme, Button, } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import { useLocation, useNavigate } from "react-router-dom"; import { useFormik } from "formik"; import InputTextfield from "@ui_kit/InputTextfield"; import PenaLogo from "../Landing/images/icons/QuizLogo"; import { enqueueSnackbar } from "notistack"; import { object, string } from "yup"; import { useEffect, useState } from "react"; import { useUserStore } from "@root/user"; import { makeRequest } from "@frontend/kitui"; import { setAuthToken } from "@frontend/kitui"; import { parseAxiosError } from "@utils/parse-error"; import { recoverUser } from "@api/user"; interface Values { password: string; } const initialValues: Values = { password: "", }; const validationSchema = object({ password: string() .min(8, "Минимум 8 символов") .matches( /^[.,:;\-_+!&()*<>\[\]\{\}`@"#$\%\^\=?\d\w]+$/, "Некорректные символы", ) .required("Поле обязательно"), }); export default function RecoverPassword() { const [isDialogOpen, setIsDialogOpen] = useState(true); const [tokenUser, setTokenUser] = useState(""); const user = useUserStore((state) => state.user); const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const isMobile = useMediaQuery(theme.breakpoints.down(450)); const navigate = useNavigate(); const location = useLocation(); const formik = useFormik({ initialValues, validationSchema, onSubmit: async (values, formikHelpers) => { if (tokenUser) { setAuthToken(tokenUser || ""); const [_, recoverError] = await recoverUser(values.password); if (recoverError) { setAuthToken(""); enqueueSnackbar( `Извините, произошла ошибка, попробуйте повторить позже. ${recoverError}`, ); } else { setIsDialogOpen(false); navigate("/"); enqueueSnackbar("Пароль успешно сменён"); } } else { enqueueSnackbar("Неверный url-адрес"); } }, }); useEffect(() => { const params = new URLSearchParams(window.location.search); const authToken = params.get("auth"); setTokenUser(authToken); history.pushState(null, document.title, "/changepwd"); return () => { setAuthToken(""); }; }, []); function handleClose() { setIsDialogOpen(false); setTimeout(() => navigate("/"), theme.transitions.duration.leavingScreen); } return ( Введите новый пароль ); }