"use client"; import { useState, useEffect, useCallback, Suspense } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { useAuth } from "../auth-context"; import { invitesApi } from "../api"; import { authFormStyles as styles } from "../styles/auth-form"; function SignupContent() { const searchParams = useSearchParams(); const initialCode = searchParams.get("code") || ""; const [inviteCode, setInviteCode] = useState(initialCode); const [inviteValid, setInviteValid] = useState(null); const [inviteError, setInviteError] = useState(""); const [isCheckingInvite, setIsCheckingInvite] = useState(false); const [isCheckingInitialCode, setIsCheckingInitialCode] = useState(!!initialCode); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [error, setError] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const { user, register } = useAuth(); const router = useRouter(); // Redirect if already logged in useEffect(() => { if (user) { router.push("/"); } }, [user, router]); const checkInvite = useCallback(async (code: string) => { if (!code.trim()) { setInviteValid(null); setInviteError(""); return; } setIsCheckingInvite(true); setInviteError(""); try { const response = await invitesApi.checkInvite(code.trim()); if (response.valid) { setInviteValid(true); setInviteError(""); } else { setInviteValid(false); setInviteError(response.error || "Invalid invite code"); } } catch { setInviteValid(false); setInviteError("Failed to verify invite code"); } finally { setIsCheckingInvite(false); } }, []); // Check invite code on mount if provided in URL useEffect(() => { if (initialCode) { checkInvite(initialCode).finally(() => setIsCheckingInitialCode(false)); } }, [initialCode, checkInvite]); const handleInviteSubmit = (e: React.FormEvent) => { e.preventDefault(); checkInvite(inviteCode); }; const handleSignupSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (password !== confirmPassword) { setError("Passwords do not match"); return; } if (password.length < 6) { setError("Password must be at least 6 characters"); return; } setIsSubmitting(true); try { await register(email, password, inviteCode.trim()); router.push("/"); } catch (err) { setError(err instanceof Error ? err.message : "Registration failed"); } finally { setIsSubmitting(false); } }; // Show loading or redirect if user is already logged in if (user) { return null; } // Show loading state while checking initial code from URL if (isCheckingInitialCode) { return (
Checking invite code...
); } // Step 1: Enter invite code if (!inviteValid) { return (

Join with Invite

Enter your invite code to get started

{inviteError &&
{inviteError}
}
{ setInviteCode(e.target.value); setInviteError(""); setInviteValid(null); }} style={styles.input} placeholder="word-word-00" required autoFocus /> Ask your inviter for this code

Already have an account?{" "} Sign in

); } // Step 2: Enter email and password return (

Create account

Using invite:{" "} {inviteCode}

{error &&
{error}
}
setEmail(e.target.value)} style={styles.input} placeholder="you@example.com" required autoFocus />
setPassword(e.target.value)} style={styles.input} placeholder="••••••••" required />
setConfirmPassword(e.target.value)} style={styles.input} placeholder="••••••••" required />

); } export default function SignupPage() { return (
Loading...
} >
); }