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 { 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) => { console.error(ctx.error.code); toast.error( ( m[`backend_${ctx.error.code}` as keyof typeof m] as () => string )(), { richColors: true, }, ); }, }, ); }, }); return (
{m.login_page_ui_welcome_back()} {/* Login with your Google account */}
{ e.preventDefault(); form.handleSubmit(); }} > {/* Or continue with */} { const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; return ( {m.login_page_form_email()} field.handleChange(e.target.value)} aria-invalid={isInvalid} type="email" placeholder="m@example.com" autoComplete="off" /> {isInvalid && ( )} ); }} /> { const isInvalid = field.state.meta.isTouched && !field.state.meta.isValid; return ( {m.login_page_form_password()} field.handleChange(e.target.value)} aria-invalid={isInvalid} type="password" /> {isInvalid && ( )} ); }} /> {m.ui_cancel_btn()} {/* {t('loginPage.ui.not_have_account')}{' '} {t('ui.signup_btn')} */}
{/* By clicking continue, you agree to our Terms of Service{' '} and Privacy Policy. */}
); }; export default SignInForm;