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 "@api/makeRequest"; import { setAuthToken } from "@frontend/kitui"; import { parseAxiosError } from "@utils/parse-error"; 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 || ""); try { const response = await makeRequest({ url: process.env.REACT_APP_DOMAIN + "/user/", method: "PATCH", body: { password: values.password }, }); setIsDialogOpen(false); navigate("/"); enqueueSnackbar("Пароль успешно сменён"); } catch (nativeError) { const [error] = parseAxiosError(nativeError); setAuthToken(""); enqueueSnackbar( `Извините, произошла ошибка, попробуйте повторить позже. ${error}`, ); } } 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 ( Введите новый пароль ); }