import { useState } from 'react' import { signIn } from 'next-auth/react' interface RegisterFormProps { callbackUrl?: string onSuccess?: () => void onError?: (error: string) => void } export function RegisterForm({ callbackUrl = '/', onSuccess, onError }: RegisterFormProps) { const [formData, setFormData] = useState({ name: '', email: '', password: '', confirmPassword: '', }) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) const handleChange = (e: React.ChangeEvent) => { setFormData((prev) => ({ ...prev, [e.target.name]: e.target.value, })) } const validateForm = (): string | null => { if (!formData.email || !formData.password) { return 'Email and password are required' } if (formData.password.length < 8) { return 'Password must be at least 8 characters long' } const hasUpperCase = /[A-Z]/.test(formData.password) const hasLowerCase = /[a-z]/.test(formData.password) const hasNumbers = /\d/.test(formData.password) if (!hasUpperCase || !hasLowerCase || !hasNumbers) { return 'Password must contain uppercase, lowercase, and numbers' } if (formData.password !== formData.confirmPassword) { return 'Passwords do not match' } return null } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsLoading(true) setError(null) const validationError = validateForm() if (validationError) { setError(validationError) setIsLoading(false) onError?.(validationError) return } try { const response = await fetch('/api/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: formData.name, email: formData.email, password: formData.password, }), }) const data = await response.json() if (!response.ok) { setError(data.message || 'Registration failed') onError?.(data.message || 'Registration failed') return } onSuccess?.() // Auto sign in after successful registration const result = await signIn('credentials', { email: formData.email, password: formData.password, redirect: false, }) if (result?.ok && callbackUrl) { window.location.href = callbackUrl } } catch (err) { const errorMessage = 'An unexpected error occurred' setError(errorMessage) onError?.(errorMessage) } finally { setIsLoading(false) } } return (
{error && (
{error}
)}

Must contain uppercase, lowercase, and numbers

) } export default RegisterForm