import { ConnectError } from "@connectrpc/connect"; import { LoaderIcon } from "lucide-react"; import { observer } from "mobx-react-lite"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { authServiceClient } from "@/connect"; import useLoading from "@/hooks/useLoading"; import useNavigateTo from "@/hooks/useNavigateTo"; import { instanceStore } from "@/store"; import { initialUserStore } from "@/store/user"; import { useTranslate } from "@/utils/i18n"; const PasswordSignInForm = observer(() => { const t = useTranslate(); const navigateTo = useNavigateTo(); const actionBtnLoadingState = useLoading(false); const [username, setUsername] = useState(instanceStore.state.profile.mode === "demo" ? "demo" : ""); const [password, setPassword] = useState(instanceStore.state.profile.mode === "demo" ? "secret" : ""); 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.createSession({ credentials: { case: "passwordCredentials", value: { username, password }, }, }); await initialUserStore(); navigateTo("/"); } catch (error: any) { console.error(error); toast.error((error as ConnectError).message || "Failed to sign in."); } actionBtnLoadingState.setFinish(); }; return (
{t("common.username")}
{t("common.password")}
); }); export default PasswordSignInForm;