'use client' import { valibotResolver } from '@hookform/resolvers/valibot' import Link from 'next/link' 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 SignInInput, SignInSchema } from '~/features/auth/schemas' import { authClient } from '~/server/better-auth/client' export function SignInForm() { const router = useRouter() const [formError, setFormError] = useState(null) const form = useForm({ resolver: valibotResolver(SignInSchema), defaultValues: { email: '', password: '' }, }) const onSubmit = form.handleSubmit(async (values) => { setFormError(null) const { error } = await authClient.signIn.email({ email: values.email, password: values.password, }) if (!error) { router.push('/') router.refresh() return } if (error.code === 'EMAIL_NOT_VERIFIED') { router.push(`/auth/verify-email?email=${encodeURIComponent(values.email)}`) return } setFormError( error.code === 'INVALID_EMAIL_OR_PASSWORD' ? 'Incorrect email or password.' : (error.message ?? 'Could not sign in. Try again.'), ) }) return (
{formError ? {formError} : null} ( Email )} /> ( Password Forgot password? )} /> ) }