import { Input } from "@mui/joy"; import { Button, Checkbox } from "@usememos/mui"; import { LoaderIcon } from "lucide-react"; import { ClientError } from "nice-grpc-web"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { authServiceClient } from "@/grpcweb"; import useLoading from "@/hooks/useLoading"; import useNavigateTo from "@/hooks/useNavigateTo"; import { useCommonContext } from "@/layouts/CommonContextProvider"; import { useUserStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; const PasswordSignInForm = () => { const t = useTranslate(); const navigateTo = useNavigateTo(); const commonContext = useCommonContext(); const userStore = useUserStore(); const actionBtnLoadingState = useLoading(false); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [remember, setRemember] = useState(true); useEffect(() => { if (commonContext.profile.mode === "demo") { setUsername("yourselfhosted"); setPassword("yourselfhosted"); } }, [commonContext.profile.mode]); const handleUsernameInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setUsername(text); }; const handlePasswordInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setPassword(text); }; const handleFormSubmit = (e: React.FormEvent) => { e.preventDefault(); handleSignInButtonClick(); }; const handleSignInButtonClick = async () => { if (username === "" || password === "") { return; } if (actionBtnLoadingState.isLoading) { return; } try { actionBtnLoadingState.setLoading(); await authServiceClient.signIn({ username, password, neverExpire: remember }); await userStore.fetchCurrentUser(); navigateTo("/"); } catch (error: any) { console.error(error); toast.error((error as ClientError).details || "Failed to sign in."); } actionBtnLoadingState.setFinish(); }; return (
{t("common.username")}
{t("common.password")}
setRemember(e.target.checked)} />
); }; export default PasswordSignInForm;