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 "@components/InputTextfield"; import PenaLogo from "@components/PenaLogo"; import { enqueueSnackbar } from "notistack"; import { object, string } from "yup"; import { useEffect, useState } from "react"; import { useUserStore } from "@root/stores/user"; import { cardShadow } from "@root/utils/theme"; import makeRequest from "@api/makeRequest" import { setAuthToken } from "@frontend/kitui" 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 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 (error) { setAuthToken("") 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 ( Введите новый пароль ); }