This code doesn't trigger any validation on submit
const FormSchema = z.object({
email: z
.string()
.min(1, { message: "." })
password: z
.string()
.min(4, { message: "." }),
});
const form = useForm<z.infer<typeof FormSchema>>({
resolver: zodResolver(FormSchema),
defaultValues: {
email: "",
password: "",
},
});
const handleLogin = async (formData: FormData) => {
const email = formData.get("email") as string;
const password = formData.get("password") as string;
let user = await signIn(email, password);
if (isUser(user)) {
const { email, isSignedIn, error } = user;
if (!error.isError) {
setSession(user);
redirect("/dashboard");
}
}
};
<Form {...form}>
<form
action={(formData) => startTransition(() => handleLogin(formData))}
className="w-2/3 space-y-6"
>
<h1 className="text-4xl text-center font-semibold">Login</h1>
<FormField
control={form.control}
name="email"
render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input type="email" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="password"
render={({ field }) => (
<FormItem>
<FormLabel>Password</FormLabel>
<FormControl>
<Input type="password" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button
type="submit"
className="w-full"
disabled={isPending}
>
Login
{isPending ? (
<ReloadIcon className="mx-2 h-4 w-4 animate-spin" />
) : null}
</Button>
</form>
</Form>