import { useState, useEffect } from "react"; import MyAlert from "../components/myChakra/MyAlert"; import { Button, Card, Field, Input, Stack } from "@chakra-ui/react"; import { setIsLoggedInAtom, triggerLogoutAtom } from "@/states/Atoms"; import { useAtom } from "jotai"; import Cookies from "js-cookie"; import { Navigate, useNavigate, useLocation } from "react-router-dom"; import { PasswordInput } from "@/components/ui/password-input"; import { useTranslation } from "react-i18next"; import { Footer } from "@/components/footer/Footer"; import { API_BASE } from "@/config/api.config"; export const LoginPage = () => { const { t } = useTranslation(); const [isLoggedIn, setIsLoggedIn] = useAtom(setIsLoggedInAtom); const [triggerLogout, setTriggerLogout] = useAtom(triggerLogoutAtom); const navigate = useNavigate(); const location = useLocation(); const from = location.state?.from?.pathname || "/"; useEffect(() => { if (isLoggedIn) { navigate(from, { replace: true }); window.location.reload(); // if deleted, the user context is not updated in time } }, [isLoggedIn, navigate, from]); const loginFnc = async (username: string, password: string) => { const response = await fetch(`${API_BASE}/api/users/login`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }), }); const data = await response.json(); if (!response.ok) { return { success: false, message: data.message ?? t("login-failed"), description: data.description ?? "", }; } Cookies.set("token", data.token); setIsLoggedIn(true); return { success: true }; }; const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [isError, setIsError] = useState(false); const [errorMsg, setErrorMsg] = useState(""); const [errorDsc, setErrorDsc] = useState(""); const handleLogin = async () => { const result = await loginFnc(username, password); if (!result.success) { setErrorMsg(result.message); setErrorDsc(result.description); setIsError(true); return; } setTriggerLogout(false); navigate(from, { replace: true }); }; if (isLoggedIn) { return ; } return (
e.preventDefault()}> {t("login")} {t("enter-credentials")} {t("username")} setUsername(e.target.value)} /> {t("password")} setPassword(e.target.value)} /> {isError && ( )} {triggerLogout && ( )}
); };