'use client'; import { Suspense } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { useAuth } from '../_lib/auth-context'; import { PortalLoginShell } from '../_components/portal-login-shell'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '../_components/ui/form'; import { Input } from '../_components/ui/input'; import { Button } from '../_components/ui/button'; const schema = z.object({ email: z.string().email('Enter a valid email'), password: z.string().min(1, 'Password is required'), }); type FormValues = z.infer; function LoginForm() { const router = useRouter(); const searchParams = useSearchParams(); const { refresh } = useAuth(); const next = searchParams.get('next') ?? '/search'; const form = useForm({ resolver: zodResolver(schema), defaultValues: { email: '', password: '' } }); async function onSubmit(values: FormValues) { const res = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(values), credentials: 'include', }); if (!res.ok) { const data = await res.json().catch(() => ({})) as { message?: string }; form.setError('root', { message: data.message ?? 'Invalid email or password' }); return; } await refresh(); router.push(next); router.refresh(); } return (
( Email )} /> ( Password )} /> {form.formState.errors.root && (

{form.formState.errors.root.message}

)} ); } export default function ChapterLoginPage() { return ( ); }