import { useForm } from "@tanstack/react-form"; import { useNavigate } from "@tanstack/react-router"; import { toast } from "sonner"; import z from "zod"; import { authClient } from "@/lib/auth-client"; import Loader from "./loader"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; import { Label } from "./ui/label"; export default function SignInForm({ onSwitchToSignUp }: { onSwitchToSignUp: () => void }) { const navigate = useNavigate({ from: "/", }); const { isPending } = authClient.useSession(); const form = useForm({ defaultValues: { email: "", password: "", }, onSubmit: async ({ value }) => { await authClient.signIn.email( { email: value.email, password: value.password, }, { onSuccess: () => { navigate({ to: "/dashboard", }); toast.success("Sign in successful"); }, onError: (error) => { toast.error(error.error.message || error.error.statusText); }, }, ); }, validators: { onSubmit: z.object({ email: z.email("Invalid email address"), password: z.string().min(8, "Password must be at least 8 characters"), }), }, }); if (isPending) { return ; } return (

Welcome Back

{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} className="space-y-4" >
{(field) => (
field.handleChange(e.target.value)} /> {field.state.meta.errors.map((error) => (

{error?.message}

))}
)}
{(field) => (
field.handleChange(e.target.value)} /> {field.state.meta.errors.map((error) => (

{error?.message}

))}
)}
{(state) => ( )}
); }