import { Box, Dialog, IconButton, Link, Typography, useMediaQuery, useTheme } from "@mui/material"; import { useLocation, useNavigate } from "react-router-dom"; import { useFormik } from "formik"; import CloseIcon from "@mui/icons-material/Close"; import CustomButton from "@components/CustomButton"; import InputTextfield from "@components/InputTextfield"; import PenaLogo from "@components/PenaLogo"; import { enqueueSnackbar } from "notistack"; import { Link as RouterLink } from "react-router-dom"; import { object, ref, string } from "yup"; import { useEffect, useState } from "react"; import { RegisterRequest, RegisterResponse } from "@root/model/auth"; import { setUserId, useUserStore } from "@root/stores/user"; import { getMessageFromFetchError } from "@frontend/kitui"; import { makeRequest } from "@root/api/makeRequest"; interface Values { login: string; password: string; repeatPassword: string; } const initialValues: Values = { login: "", password: "", repeatPassword: "", }; const validationSchema = object({ login: string().required("Поле обязательно"), password: string().min(8, "Минимум 8 символов").matches(/^[.,:;-_+\d\w]+$/, "Некорректные символы").required("Поле обязательно"), repeatPassword: string().oneOf([ref("password"), undefined], "Пароли не совпадают"), }); export default function SignupDialog() { 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: (values, formikHelpers) => { makeRequest({ url: "https://hub.pena.digital/auth/register", body: { login: values.login.trim(), password: values.password.trim(), phoneNumber: "-", }, useToken: false, withCredentials: true, }).then(result => { navigate("/tariffs"); setUserId(result._id); }).catch((error: any) => { const errorMessage = getMessageFromFetchError(error); if (errorMessage) enqueueSnackbar(errorMessage); }).finally(() => { formikHelpers.setSubmitting(false); }); }, }); useEffect(function redirectIfSignedIn() { if (user) navigate("/tariffs", { replace: true }); }, [navigate, user]); function handleClose() { setIsDialogOpen(false); setTimeout(() => navigate("/"), theme.transitions.duration.leavingScreen); } return ( Регистрация Зарегистрироваться Вход в личный кабинет ); }