'use client'; import { useState, type FormEvent } from 'react'; import { useRouter } from 'next/navigation'; type Mode = 'login' | 'register'; export default function LoginPage() { const router = useRouter(); const [mode, setMode] = useState('login'); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); async function onSubmit(event: FormEvent) { event.preventDefault(); setLoading(true); setError(null); const endpoint = mode === 'login' ? '/api/auth/login' : '/api/auth/register'; const payload = mode === 'login' ? { email, password } : { name, email, password }; const res = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); if (res.ok) { router.push('/dashboard'); return; } const data = (await res.json().catch(() => null)) as { error?: { message?: string }; } | null; setError(data?.error?.message ?? '処理に失敗しました'); setLoading(false); } return (

{mode === 'login' ? 'ログイン' : '新規登録'}

{mode === 'register' && (
setName(e.target.value)} className="mt-1 w-full rounded border px-3 py-2" required />
)}
setEmail(e.target.value)} className="mt-1 w-full rounded border px-3 py-2" required />
setPassword(e.target.value)} className="mt-1 w-full rounded border px-3 py-2" required minLength={8} />
{error && (

{error}

)}
); }