'use client'; import Link from 'next/link'; import { Suspense, type FormEvent, useCallback, useMemo, useState } from 'react'; import { useSearchParams } from 'next/navigation'; import { AuthShell } from '@/components/auth/auth-shell'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { useAuthHandoff } from '@/hooks/use-auth-handoff'; import { authClient } from '@/lib/auth-client'; function sanitizeNextPath(value: string | null) { if (!value || !value.startsWith('/')) { return '/'; } return value; } export default function SignUpPage() { return ( Loading sign up...}> ); } function SignUpPageContent() { const searchParams = useSearchParams(); const nextPath = useMemo(() => sanitizeNextPath(searchParams.get('next')), [searchParams]); const { data: rawSession, isPending } = authClient.useSession(); const session = (rawSession ?? null) as { user?: { id?: string } } | null; const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [error, setError] = useState(null); const [handoffError, setHandoffError] = useState(null); const [busy, setBusy] = useState(false); const [awaitingSession, setAwaitingSession] = useState(false); const handleHandoffTimeout = useCallback(() => { setAwaitingSession(false); setHandoffError('Authentication completed, but the session was not established on this device. Please sign in again.'); }, []); const { isHandingOff, statusText } = useAuthHandoff({ nextPath, session, isPending, awaitingSession, onTimeout: handleHandoffTimeout }); const signUp = async (event: FormEvent) => { event.preventDefault(); setError(null); setHandoffError(null); if (password !== confirmPassword) { setError('Passwords do not match.'); return; } setBusy(true); const { error: signUpError } = await authClient.signUp.email({ name: name.trim(), email: email.trim(), password, callbackURL: nextPath }); setBusy(false); if (signUpError) { setError(signUpError.message || 'Unable to create account.'); return; } setAwaitingSession(true); }; return ( Already registered?{' '} Sign in )} >
setName(event.target.value)} required disabled={busy || isHandingOff} />
setEmail(event.target.value)} required disabled={busy || isHandingOff} />
setPassword(event.target.value)} required minLength={8} disabled={busy || isHandingOff} />
setConfirmPassword(event.target.value)} required minLength={8} disabled={busy || isHandingOff} />
{error ?

{error}

: null} {handoffError ?

{handoffError}

: null} {statusText ?

{statusText}

: null}
); }