import { useState, useEffect } from "react"; import { Link, useNavigate } from "react-router-dom"; import { Trans } from "react-i18next"; import { useUser, userService } from "@/services/user"; import { useC } from "@/views/common/common"; import LoadingButton from "@/views/common/button/LoadingButton"; import { InputErrorDict, InputGroup, useInputs, } from "@/views/common/input/InputGroup"; import Page from "@/views/common/Page"; import "./index.css"; export default function LoginPage() { const c = useC(); const user = useUser(); const navigate = useNavigate(); const [process, setProcess] = useState(false); const [error, setError] = useState(null); const { hasErrorAndDirty, confirm, setAllDisabled, inputGroupProps } = useInputs({ init: { scheme: { inputs: [ { key: "username", type: "text", label: "user.username", }, { key: "password", type: "text", label: "user.password", password: true, }, { key: "rememberMe", type: "bool", label: "user.rememberMe", }, ], validator: ({ username, password }) => { const result: InputErrorDict = {}; if (username === "") { result["username"] = "login.emptyUsername"; } if (password === "") { result["password"] = "login.emptyPassword"; } return result; }, }, dataInit: {}, }, }); useEffect(() => { if (user != null) { const id = setTimeout(() => navigate("/"), 3000); return () => { clearTimeout(id); }; } }, [navigate, user]); if (user != null) { return

{c("login.alreadyLogin")}

; } const submit = (): void => { const confirmResult = confirm(); if (confirmResult.type === "ok") { const { username, password, rememberMe } = confirmResult.values; setAllDisabled(true); setProcess(true); userService .login( { username: username as string, password: password as string, }, rememberMe as boolean, ) .then( () => { if (history.length === 0) { navigate("/"); } else { navigate(-1); } }, (e: Error) => { setProcess(false); setAllDisabled(false); setError(e.message); }, ); } }; return (
{c("welcome")}
{error ?

{c(error)}

: null}
{ submit(); e.preventDefault(); }} disabled={hasErrorAndDirty} > {c("user.login")}
012
); }