import * as Form from "@radix-ui/react-form"; import { CrossCircledIcon } from "@radix-ui/react-icons"; import { Button, Card, Heading, Text, TextField } from "@radix-ui/themes"; import { useMutation } from "@tanstack/react-query"; import { useSetAtom } from "jotai"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { axiosLocalhost } from "../../../api/axios/axios"; import { userAtom } from "../../../AtomStore/AtomStore"; import UseCapsLock from "../../../hooks/useCapsLock"; import ShowPasswordButton from "../ShowPasswordButton/ShowPasswordButton"; type TRegisterData = { username: string; password: string; email: string; }; export default function RegisterPage() { const setUserAtom = useSetAtom(userAtom) const [showPassword, setShowPassword] = useState(false); const [showConfPassword, setShowConfPassword] = useState(false); const { isCapsLockOn } = UseCapsLock(); const { t } = useTranslation(); const [isError, setIsError] = useState(false); const navigate = useNavigate(); const registerMutation = useMutation({ mutationFn: async (data: TRegisterData) => { let response = await axiosLocalhost.post("/users", JSON.stringify(data)); setUserAtom({ username: response.data.username, isAdmin: false, id: response.data.id, }) }, onError: (error, _variables, _context) => { console.log(error); setIsError(true); }, onSuccess: () => { navigate("/"); }, }); return ( {t("registerForm")} { e.preventDefault(); let formData = new FormData( document.querySelector("form") as HTMLFormElement ); let registerData: TRegisterData = { password: (formData.get("password") as string) || "", username: (formData.get("username") as string) || "", email: (formData.get("email") as string) || "", }; registerMutation.mutate(registerData); }} >
{t("username")} {t("errors.enterUsername")}
{(validity) => ( )}
{t("email")} {t("errors.enterEmail")} {t("errors.invalidEmail")}
{(validity) => ( )}
{t("password")} {t("errors.enterPassword")}
{(validity) => ( )}
{t("confirmPassword")} {t("errors.enterPassword")} value !== formData.get("password") } > {t("errors.passwordsMismatch")}
{(validity) => ( )}
); }