import { type FormEvent, useState } from "react"; import { useLocation } from "wouter"; import BorderedContainer from "../components/BorderedContainer"; import InputText from "../components/InputText"; import SubmitButton from "../components/SubmitButton"; import { APP_NAME } from "../config"; import { useAuth } from "../hooks/useAuth"; import { usePageTitle } from "../hooks/usePageTitle"; export default function LoginPage() { usePageTitle(`Login | ${APP_NAME}`); const { login } = useAuth(); const [, navigate] = useLocation(); const [error, setError] = useState(null); const [fieldErrors, setFieldErrors] = useState<{ username?: string; password?: string; }>({}); const [submitting, setSubmitting] = useState(false); async function handleSubmit(e: FormEvent) { e.preventDefault(); const formData = new FormData(e.currentTarget); const username = String(formData.get("username")); const password = String(formData.get("password")); const errors: { username?: string; password?: string } = {}; if (username === "") errors.username = "ユーザー名を入力してください"; if (password === "") errors.password = "パスワードを入力してください"; if (Object.keys(errors).length > 0) { setFieldErrors(errors); setError("ユーザー名またはパスワードが誤っています"); return; } setSubmitting(true); setError(null); setFieldErrors({}); try { await login(username, password); navigate("/dashboard"); } catch (err) { setError(err instanceof Error ? err.message : "ログインに失敗しました"); } finally { setSubmitting(false); } } return (

fortee アカウントでログイン

{error &&

{error}

}
{fieldErrors.username && (

{fieldErrors.username}

)}
{fieldErrors.password && (

{fieldErrors.password}

)}
{submitting ? "ログイン中..." : "ログイン"}
); }