"use client"; import { Suspense, useState } from "react"; import { useSearchParams } from "next/navigation"; import { signIn } from "next-auth/react"; import Link from "next/link"; import { ScanLine, Mail, Lock, User, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; export default function SignupPage() { return ( ); } function SignupForm() { const searchParams = useSearchParams(); const token = searchParams.get("token") || ""; const [formData, setFormData] = useState({ displayName: "", email: "", password: "", confirmPassword: "", }); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); function update(field: string, value: string) { setFormData((prev) => ({ ...prev, [field]: value })); } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(""); if (formData.password !== formData.confirmPassword) { setError("Passwords do not match"); return; } if (formData.password.length < 8) { setError("Password must be at least 8 characters"); return; } setLoading(true); try { const res = await fetch("/api/auth/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ displayName: formData.displayName, email: formData.email, password: formData.password, inviteToken: token, }), }); if (!res.ok) { const data = await res.json(); setError(data.error || "Registration failed"); setLoading(false); return; } await signIn("credentials", { email: formData.email, password: formData.password, callbackUrl: "/", }); } catch { setError("Something went wrong. Please try again."); setLoading(false); } } return (

Create account

{token ? "Complete your account setup" : "You need an invitation to sign up"}

{error && (
{error}
)}
update("displayName", e.target.value)} required className="pl-10" />
update("email", e.target.value)} required autoComplete="email" className="pl-10" />
update("password", e.target.value)} required minLength={8} autoComplete="new-password" className="pl-10" />
update("confirmPassword", e.target.value)} required minLength={8} autoComplete="new-password" className="pl-10" />

Already have an account?{" "} Sign in

); }