import { useForm } from '@tanstack/react-form' import { createFileRoute, Link, useNavigate } from '@tanstack/react-router' import { useState } from 'react' import { TextField } from '~/components/form/text-field' import { Button } from '~/components/ui/button' import { Spinner } from '~/components/ui/spinner' import { AuthCard } from '~/features/auth/auth-card' import { FormAlert } from '~/features/auth/form-alert' import { AuthDivider, GoogleButton } from '~/features/auth/google-button' import { SignUpSchema } from '~/features/auth/schemas' import { authClient } from '~/server/better-auth/client' export const Route = createFileRoute('/auth/sign-up')({ component: SignUp }) function SignUp() { const navigate = useNavigate() const [formError, setFormError] = useState(null) const form = useForm({ defaultValues: { name: '', email: '', password: '' }, validators: { onBlur: SignUpSchema }, onSubmit: async ({ value }) => { setFormError(null) const { error } = await authClient.signUp.email({ name: value.name, email: value.email, password: value.password, callbackURL: '/', }) if (!error) { await navigate({ to: '/auth/verify-email', search: { email: value.email } }) return } setFormError( error.code === 'USER_ALREADY_EXISTS' ? 'An account already exists with this email.' : (error.message ?? 'Could not sign up. Try again.'), ) }, }) return ( Already have an account?{' '} Sign in } title="Create an account" >
{ e.preventDefault() form.handleSubmit() }} > {formError ? {formError} : null} {(field) => ( )} {(field) => ( )} {(field) => ( )} [s.canSubmit, s.isSubmitting]}> {([canSubmit, isSubmitting]) => ( )}
) }