'use client'; import { useState, useEffect } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { Eye, EyeOff } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import Link from 'next/link'; import { isValidEmail } from '@/lib/utils'; interface RegisterDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSuccess?: () => void; onOpenLogin?: () => void; callbackUrl?: string; } export function RegisterDialog({ open, onOpenChange, onSuccess, onOpenLogin, callbackUrl: initialCallbackUrl, }: RegisterDialogProps) { const router = useRouter(); const searchParams = useSearchParams(); const callbackUrl = initialCallbackUrl || searchParams.get('callbackUrl') || '/'; const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); // Clear form when dialog opens useEffect(() => { if (open) { setName(''); setEmail(''); setPassword(''); setConfirmPassword(''); setError(''); setShowPassword(false); setShowConfirmPassword(false); } }, [open]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!name || name.trim().length === 0) { setError('Name is required'); return; } if (!email || !isValidEmail(email)) { setError('Please enter a valid email address'); return; } if (password !== confirmPassword) { setError('Passwords do not match'); return; } if (password.length < 6) { setError('Password must be at least 6 characters'); return; } setIsLoading(true); try { const response = await fetch('/api/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email, password, name }), }); const data = await response.json(); if (!response.ok) { setError(data.error || 'Failed to create account'); return; } // Registration successful - clear form and show success message setName(''); setEmail(''); setPassword(''); setConfirmPassword(''); setError(''); // Show success state alert('Account created successfully! Please check your email to confirm your account before signing in.'); onOpenChange(false); if (onOpenLogin) { // Open login dialog with registered flag onOpenLogin(); } else if (onSuccess) { onSuccess(); } else { // Redirect to login with registered flag router.push(`/login?registered=true&callbackUrl=${encodeURIComponent(callbackUrl)}`); } } catch (err) { setError('An error occurred. Please try again.'); } finally { setIsLoading(false); } }; const handleOpenChange = (newOpen: boolean) => { if (!newOpen) { // Reset form when closing setName(''); setEmail(''); setPassword(''); setConfirmPassword(''); setError(''); setShowPassword(false); setShowConfirmPassword(false); } onOpenChange(newOpen); }; return ( Create your account Or{' '}
{error && (

{error}

)}
setName(e.target.value)} className="mt-1" placeholder="Your full name" />
setEmail(e.target.value)} className="mt-1" placeholder="you@example.com" />
setPassword(e.target.value)} className="pr-10" placeholder="••••••••" />

Must be at least 6 characters

setConfirmPassword(e.target.value)} className="pr-10" placeholder="••••••••" />
); }