import { timestampDate } from "@bufbuild/protobuf/wkt"; import { LoaderIcon } from "lucide-react"; import { useState } from "react"; import { toast } from "react-hot-toast"; import { setAccessToken } from "@/auth-state"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { authServiceClient } from "@/connect"; import { useAuth } from "@/contexts/AuthContext"; import { useInstance } from "@/contexts/InstanceContext"; import useLoading from "@/hooks/useLoading"; import useNavigateTo from "@/hooks/useNavigateTo"; import { handleError } from "@/lib/error"; import { useTranslate } from "@/utils/i18n"; function PasswordSignInForm() { const t = useTranslate(); const navigateTo = useNavigateTo(); const { profile } = useInstance(); const { initialize } = useAuth(); const actionBtnLoadingState = useLoading(false); const [username, setUsername] = useState(profile.demo ? "demo" : ""); const [password, setPassword] = useState(profile.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(); const response = await authServiceClient.signIn({ credentials: { case: "passwordCredentials", value: { username, password }, }, }); // Store access token from login response if (response.accessToken) { setAccessToken(response.accessToken, response.accessTokenExpiresAt ? timestampDate(response.accessTokenExpiresAt) : undefined); } await initialize(); navigateTo("/"); } catch (error: unknown) { handleError(error, toast.error, { fallbackMessage: "Failed to sign in.", }); } actionBtnLoadingState.setFinish(); }; return (
{t("common.username")}
{t("common.password")}
); } export default PasswordSignInForm;