/** * @file LoginPage.tsx * @description Client component providing a user login interface with NextAuth credentials authentication. */ "use client"; import { useState } from "react"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; import Link from "next/link"; /** * Renders the login page containing the authentication form, error handling, * and navigation links for user sign-in. * * @returns {JSX.Element} The rendered login page component. */ export default function LoginPage() { const router = useRouter(); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); /** * Handles the submission of the login form, validates credentials via NextAuth, * and manages loading/error states or redirects upon success. * * @async * @param {React.SubmitEvent} e - The form submission event. * @returns {Promise} */ const handleSubmit = async (e: React.SubmitEvent) => { e.preventDefault(); setError(null); setLoading(true); const formData = new FormData(e.currentTarget); const email = formData.get("email") as string; const password = formData.get("password") as string; try { const res = await signIn("credentials", { email, password, redirect: false, }); if (res?.error) { if (res.error === "CredentialsSignin") { setError("Incorrect email address or password."); } else { setError("An unexpected error has occurred."); } setLoading(false); } else { router.push("/"); router.refresh(); } } catch { setError("Connection error. Please try again later."); setLoading(false); } }; return (
{/* Login Card Container */}
{/* Header Section */}

Flowstate Login

Sign in to continue.

{/* Error Notification Banner */} {error && (
{error}
)} {/* Credentials Form */}
{/* Registration Link Footer */}
Don't have an account yet?{" "} Register
); }