"use client"; import { useState, type FormEvent } from "react"; import { useRouter } from "next/navigation"; import { useAuth } from "@/lib/auth"; import { Button } from "@/components/ui/Button"; import { Spinner } from "@/components/ui/Spinner"; export default function LoginPage() { const { user, loading: authLoading, login, register } = useAuth(); const router = useRouter(); const [isRegister, setIsRegister] = useState(false); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); // Redirect if already logged in if (!authLoading && user) { router.replace("/dashboard"); return null; } async function handleSubmit(e: FormEvent) { e.preventDefault(); setError(""); setLoading(true); try { if (isRegister) { await register(email, password, firstName, lastName); } else { await login(email, password); } router.push("/dashboard"); } catch (err: unknown) { if (err instanceof Error) { setError(err.message); } else { setError("Something went wrong. Please try again."); } } finally { setLoading(false); } } if (authLoading) { return (
); } return (
{/* Title */}

WERKOUT

{/* Error */} {error && (
{error}
)} {/* Form */}
{isRegister && (
setFirstName(e.target.value)} required className="w-full bg-zinc-800 border border-zinc-700 text-zinc-100 rounded-lg px-4 py-2.5 text-sm placeholder:text-zinc-500 focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent/30 transition-colors duration-150" placeholder="First name" />
setLastName(e.target.value)} required className="w-full bg-zinc-800 border border-zinc-700 text-zinc-100 rounded-lg px-4 py-2.5 text-sm placeholder:text-zinc-500 focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent/30 transition-colors duration-150" placeholder="Last name" />
)}
setEmail(e.target.value)} required className="w-full bg-zinc-800 border border-zinc-700 text-zinc-100 rounded-lg px-4 py-2.5 text-sm placeholder:text-zinc-500 focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent/30 transition-colors duration-150" placeholder="Email or username" />
setPassword(e.target.value)} required className="w-full bg-zinc-800 border border-zinc-700 text-zinc-100 rounded-lg px-4 py-2.5 text-sm placeholder:text-zinc-500 focus:outline-none focus:border-accent focus:ring-1 focus:ring-accent/30 transition-colors duration-150" placeholder="Enter password" />
{/* Toggle */}

{isRegister ? "Already have an account? " : "Don't have an account? "}

); }