'use client' import React, { useState } from 'react' import { AuthLayout } from '@/components/layouts/AuthLayout' import { Input } from '@/components/common/Input' import { Button } from '@/components/common/Button' import { Checkbox } from '@/components/common/Checkbox' import { Link } from '@/components/common/Link' import { useAuth } from '@/lib/hooks/useAuth' export default function SignupPage() { const { signup, isLoading, error } = useAuth() const [formData, setFormData] = useState({ email: '', password: '', confirmPassword: '', display_name: '', acceptTerms: false, }) const [formErrors, setFormErrors] = useState>({}) const validateForm = () => { const errors: Record = {} if (!formData.email) { errors.email = 'Email is required' } else if (!/\S+@\S+\.\S+/.test(formData.email)) { errors.email = 'Email is invalid' } if (!formData.password) { errors.password = 'Password is required' } else if (formData.password.length < 8) { errors.password = 'Password must be at least 8 characters' } else if (!/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/.test(formData.password)) { errors.password = 'Password must contain uppercase, lowercase, and number' } if (!formData.confirmPassword) { errors.confirmPassword = 'Please confirm your password' } else if (formData.password !== formData.confirmPassword) { errors.confirmPassword = 'Passwords do not match' } if (!formData.acceptTerms) { errors.acceptTerms = 'You must accept the terms and conditions' } setFormErrors(errors) return Object.keys(errors).length === 0 } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!validateForm()) { return } await signup({ email: formData.email, password: formData.password, display_name: formData.display_name || undefined, }) } const handleChange = (e: React.ChangeEvent) => { const { name, value, type, checked } = e.target setFormData((prev) => ({ ...prev, [name]: type === 'checkbox' ? checked : value, })) // Clear error for this field if (formErrors[name]) { setFormErrors((prev) => { const newErrors = { ...prev } delete newErrors[name] return newErrors }) } } return (
{error && (

{error.message || 'Signup failed. Please try again.'}

)}
I accept the{' '} Terms of Service {' '} and{' '} Privacy Policy } />
Already have an account?{' '} Sign in
) }