'use client' import { valibotResolver } from '@hookform/resolvers/valibot' import { useRouter } from 'next/navigation' import { useState } from 'react' import { useForm } from 'react-hook-form' import { Button } from '~/components/ui/button' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '~/components/ui/form' import { Input } from '~/components/ui/input' import { Spinner } from '~/components/ui/spinner' import { FormAlert } from '~/features/auth/form-alert' import { AuthDivider, GoogleButton } from '~/features/auth/google-button' import { type SignUpInput, SignUpSchema } from '~/features/auth/schemas' import { authClient } from '~/server/better-auth/client' export function SignUpForm() { const router = useRouter() const [formError, setFormError] = useState(null) const form = useForm({ resolver: valibotResolver(SignUpSchema), defaultValues: { name: '', email: '', password: '' }, }) const onSubmit = form.handleSubmit(async (values) => { setFormError(null) const { error } = await authClient.signUp.email({ name: values.name, email: values.email, password: values.password, callbackURL: '/', }) if (!error) { router.push(`/auth/verify-email?email=${encodeURIComponent(values.email)}`) return } setFormError( error.code === 'USER_ALREADY_EXISTS' ? 'An account already exists with this email.' : (error.message ?? 'Could not sign up. Try again.'), ) }) return (
{formError ? {formError} : null} ( Name )} /> ( Email )} /> ( Password )} /> ) }