import React from "react"; import { useHistory } from "react-router"; import { useTranslation } from "react-i18next"; import { Container, Form } from "react-bootstrap"; import { useUser, userService } from "@/services/user"; import AppBar from "../common/AppBar"; import LoadingButton from "../common/LoadingButton"; const LoginPage: React.FC = (_) => { const { t } = useTranslation(); const history = useHistory(); const [username, setUsername] = React.useState(""); const [usernameDirty, setUsernameDirty] = React.useState(false); const [password, setPassword] = React.useState(""); const [passwordDirty, setPasswordDirty] = React.useState(false); const [rememberMe, setRememberMe] = React.useState(true); const [process, setProcess] = React.useState(false); const [error, setError] = React.useState(null); const user = useUser(); React.useEffect(() => { if (user != null) { const id = setTimeout(() => history.push("/"), 3000); return () => { clearTimeout(id); }; } }, [history, user]); if (user != null) { return ( <>

{t("login.alreadyLogin")}

); } const submit = (): void => { if (username === "" || password === "") { setUsernameDirty(true); setPasswordDirty(true); return; } setProcess(true); userService .login( { username: username, password: password, }, rememberMe ) .then( () => { if (history.length === 0) { history.push("/"); } else { history.goBack(); } }, (e: Error) => { setProcess(false); setError(e.message); } ); }; const onEnterPressInPassword: React.KeyboardEventHandler = (e) => { if (e.key === "Enter") { submit(); } }; return (

{t("welcome")}

{t("user.username")} { setUsername(e.target.value); setUsernameDirty(true); }} value={username} isInvalid={usernameDirty && username === ""} /> {usernameDirty && username === "" && ( {t("login.emptyUsername")} )} {t("user.password")} { setPassword(e.target.value); setPasswordDirty(true); }} value={password} onKeyDown={onEnterPressInPassword} isInvalid={passwordDirty && password === ""} /> {passwordDirty && password === "" && ( {t("login.emptyPassword")} )} id="remember-me" type="checkbox" checked={rememberMe} onChange={(e) => { setRememberMe(e.currentTarget.checked); }} label={t("user.rememberMe")} /> {error ?

{t(error)}

: null}
{ submit(); e.preventDefault(); }} disabled={username === "" || password === "" ? true : undefined} > {t("user.login")}
); }; export default LoginPage;