import { Box, IconButton, Link, Typography, useMediaQuery, useTheme } from "@mui/material"; import CustomButton from "../components/CustomButton"; import InputTextfield from "../components/InputTextfield"; import PenaLogo from "../components/PenaLogo"; import CloseIcon from "@mui/icons-material/Close"; import { authHandler } from "../utils/api/authenticationHandler"; import { useNavigate } from "react-router-dom"; import { useFormik } from "formik"; interface Values { login: string; email: string; phoneNumber: string; password: string; repeatPassword: string; } // TODO function validate(values: Values) { const errors = {} as any; if (!values.login) { errors.login = "Required"; } else if (!/^[\w-]{3,25}$/i.test(values.login)) { errors.login = "Invalid username"; } if (!values.password) { errors.password = "Required"; } else if (!/^[\w-]{8,25}$/i.test(values.password)) { errors.password = "Invalid password"; } if (values.password !== values.repeatPassword) { errors.repeatPassword = "Passwords do not match"; } return errors; } export default function Signup() { const theme = useTheme(); const upMd = useMediaQuery(theme.breakpoints.up("md")); const navigate = useNavigate(); const formik = useFormik({ initialValues: { login: "", email: "", phoneNumber: "", password: "", repeatPassword: "", }, validate, onSubmit: async (values: Values) => { const result = await authHandler.register({ email: values.email, login: values.login, password: values.password, phoneNumber: values.phoneNumber, }); if (result instanceof Error) { console.log("TODO handle register error"); return; } console.log("TODO handle register success feedback"); navigate("/signin"); } }); return ( Регистрация Войти Вход в личный кабинет ); }