import { authClient } from '@/lib/auth-client'; import { m } from '@/paraglide/messages'; import { useForm } from '@tanstack/react-form'; import { useQueryClient } from '@tanstack/react-query'; import { createLink, useNavigate } from '@tanstack/react-router'; import i18next from 'i18next'; import { toast } from 'sonner'; import z from 'zod'; import { Button } from '../ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '../ui/card'; import { Field, FieldError, FieldGroup, FieldLabel } from '../ui/field'; import { Input } from '../ui/input'; const SignInFormSchema = z.object({ email: z .string() .nonempty(m.common_is_required({ field: m.login_page_form_email })) .email(m.login_page_messages_email_invalid()), password: z.string().nonempty( m.common_is_required({ field: m.login_page_form_password(), }), ), }); const ButtonLink = createLink(Button); const SignInForm = () => { const navigate = useNavigate(); const queryClient = useQueryClient(); const form = useForm({ defaultValues: { email: '', password: '', }, validators: { onSubmit: SignInFormSchema, onChange: SignInFormSchema, }, onSubmit: async ({ value }) => { await authClient.signIn.email( { email: value.email, password: value.password, }, { onSuccess: () => { navigate({ to: '/' }); queryClient.invalidateQueries({ queryKey: ['auth', 'session'] }); toast.success(m.login_page_messages_login_success(), { richColors: true, }); }, onError: (ctx) => { toast.error(i18next.t(`backend.${ctx.error.code}` as any), { richColors: true, }); }, }, ); }, }); return (