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 { t } from "i18next"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { axiosLocalhost } from "../../../api/axios/axios"; import UseCapsLock from "../../../hooks/useCapsLock"; import ShowPasswordButton from "../ShowPasswordButton/ShowPasswordButton"; type TLoginData = { username: string; password: string; }; export default function LoginElement() { const [showPassword, setShowPassword] = useState(false); const { isCapsLockOn } = UseCapsLock(); const [isError, setIsError] = useState(false); const navigate = useNavigate() const logInMutation = useMutation({ mutationFn: async (data: TLoginData) => { await axiosLocalhost.post( "/login", JSON.stringify(data) ); }, onError: (error, _variables, _context) => { console.log(error); setIsError(true); }, onSuccess: () => { navigate("/") }, }); return ( {t("loginForm")} { e.preventDefault(); let formData = new FormData( document.querySelector("form") as HTMLFormElement ); let loginData: TLoginData = { password: (formData.get("password") as string) || "", username: (formData.get("username") as string) || "", }; logInMutation.mutate(loginData); }} >
{t("username")} {t("errors.enterUsername")}
{(validity) => ( )}
{t("password")} {t("errors.enterPassword")}
{(validity) => ( )}
); }