'use client'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; import Link from 'next/link'; import { signUp } from '@/lib/actions'; import { StatusMessage, SubmitButton } from '@/components/default'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/components/context/auth'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input, Separator, } from '@/components/ui'; import { useEffect, useState } from 'react'; import { SignInWithApple, SignInWithMicrosoft } from '@/components/default/auth'; const formSchema = z .object({ name: z.string().min(2, { message: 'Name must be at least 2 characters.', }), email: z.string().email({ message: 'Please enter a valid email address.', }), password: z.string().min(8, { message: 'Password must be at least 8 characters.', }), confirmPassword: z.string().min(8, { message: 'Password must be at least 8 characters.', }), }) .refine((data) => data.password === data.confirmPassword, { message: 'Passwords do not match!', path: ['confirmPassword'], }); const SignUp = () => { const router = useRouter(); const { isAuthenticated, isLoading, refreshUserData } = useAuth(); const [statusMessage, setStatusMessage] = useState(''); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: '', email: '', password: '', confirmPassword: '', }, mode: 'onChange', }); // Redirect if already authenticated useEffect(() => { if (isAuthenticated) { router.push('/'); } }, [isAuthenticated, router]); const handleSignUp = async (values: z.infer) => { try { setStatusMessage(''); const formData = new FormData(); formData.append('name', values.name); formData.append('email', values.email); formData.append('password', values.password); const result = await signUp(formData); if (result?.success) { await refreshUserData(); setStatusMessage( result.data ?? 'Thanks for signing up! Please check your email for a verification link.', ); form.reset(); router.push(''); } else { setStatusMessage(`Error: ${result.error}`); } } catch (error) { setStatusMessage( `Error: ${error instanceof Error ? error.message : 'Could not sign in!'}`, ); } }; return ( Sign Up Already have an account?{' '} Sign in
( Name )} /> ( Email )} /> ( Password )} /> ( Confirm Password )} /> {statusMessage && (statusMessage.includes('Error') || statusMessage.includes('error') || statusMessage.includes('failed') || statusMessage.includes('invalid') ? ( ) : ( ))} Sign Up
or
); }; export default SignUp;