"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { ExclamationTriangleIcon } from "@radix-ui/react-icons"; import { LoginResponse } from "@server/routers/auth"; import { api } from "@app/api"; import { useParams, useRouter } from "next/navigation"; type LoginFormProps = { redirect?: string; }; const formSchema = z.object({ email: z.string().email({ message: "Invalid email address" }), password: z .string() .min(8, { message: "Password must be at least 8 characters" }), }); export default function LoginForm({ redirect }: LoginFormProps) { const router = useRouter(); const [error, setError] = useState(null); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { email: "", password: "", }, }); async function onSubmit(values: z.infer) { const { email, password } = values; const res = await api .post("/auth/login", { email, password, }) .catch((e) => { console.error(e); setError( e.response?.data?.message || "An error occurred while logging in", ); }); if (res && res.status === 200) { setError(null); if (redirect && typeof redirect === "string") { window.location.href = redirect; } else { router.push("/"); } } } return ( Secure Login Enter your credentials to access your dashboard
( Email )} /> ( Password )} /> {error && ( {error} )}
); }