"use client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { useAppForm } from "@/components/ui/tanstack-form"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; import { useTransition } from "react"; import { toast } from "sonner"; import * as z from "zod"; const formSchema = z.object({ email: z.string().email({ message: "Enter a valid email address" }), password: z .string() .min(8, { message: "Password must be at least 8 characters" }), }); export default function UserAuthForm() { const router = useRouter(); const [loading, startTransition] = useTransition(); const form = useAppForm({ defaultValues: { email: "", password: "", }, validators: { onSubmit: formSchema, }, onSubmit: ({ value }) => { startTransition(async () => { const result = await signIn("credentials", { email: value.email, password: value.password, redirect: false, }); if (result?.error) { toast.error("Invalid email or password"); return; } toast.success("Signed in successfully"); router.push("/dashboard"); router.refresh(); }); }, }); return ( <> ( Email field.handleChange(e.target.value)} placeholder="Enter your email..." disabled={loading} aria-invalid={ field.state.meta.isTouched && !field.state.meta.isValid } /> )} /> ( Password field.handleChange(e.target.value)} placeholder="Enter your password..." disabled={loading} aria-invalid={ field.state.meta.isTouched && !field.state.meta.isValid } /> )} /> ); }