"use client"; import { Suspense, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { AuthCard, AuthFooterLink } from "@/components/auth/auth-card"; import { useAuth } from "@/components/auth/auth-provider"; import { AuthError } from "@/lib/auth"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; function LoginForm() { const router = useRouter(); const params = useSearchParams(); const { logIn } = useAuth(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(null); const [submitting, setSubmitting] = useState(false); async function onSubmit(e: React.SyntheticEvent) { e.preventDefault(); setError(null); setSubmitting(true); try { await logIn(email, password); router.push(params.get("next") ?? "/profile"); router.refresh(); } catch (err) { setError(err instanceof AuthError ? err.message : "Login failed."); setSubmitting(false); } } return ( } >
setEmail(e.target.value)} />
setPassword(e.target.value)} />

{error ?

{error}

: null}
); } export default function LoginPage() { // useSearchParams must be inside Suspense for Next.js streaming. return ( ); }