"use client" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { Button } from "@/shared/components/ui/button" import { api } from '@garage/api' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/shared/components/ui/card" import { Field, FieldDescription, FieldError, FieldGroup, FieldLabel, } from "@/shared/components/ui/field" import { Input } from "@/shared/components/ui/input" import { useAppStore } from "@/shared/stores/app-store" import { useAuthStore } from "@/shared/stores/auth-store" import { cn } from "@/shared/lib/utils" import Image from "next/image" import { useRouter } from "next/navigation" import { loginFormSchema, type LoginFormValues } from "./login-form.schema" import { useMutation } from "@tanstack/react-query" import { Alert, AlertTitle } from "@/shared/components/ui/alert" import { AlertTriangle } from "lucide-react" export function LoginForm({ className, ...props }: React.ComponentProps<"div">) { const lastLoginEmail = useAppStore((state) => state.lastLoginEmail) const setLastLoginEmail = useAppStore((state) => state.setLastLoginEmail) const login = useAuthStore((state) => state.login) const router = useRouter() const { handleSubmit, register, formState: { errors, }, } = useForm({ resolver: zodResolver(loginFormSchema), defaultValues: process.env.NODE_ENV === "development" ? { "email": "admin@admin.com", "password": "12345678" } : { email: lastLoginEmail, password: "", }, }) const { mutate, error, isPending: isSubmitting } = useMutation({ mutationFn: (values: LoginFormValues) => api.auth.login(values), onSuccess: async (data) => { if (data.data?.token && data.data?.user) { await login(data.data.token, data.data.user as Parameters[1]) router.push("/") } }, }) async function onSubmit(values: LoginFormValues) { setLastLoginEmail(values.email) mutate(values) } return (
Logo Login to your account Enter your email below to login to your account {error ? ( Login failed {error.message} ) : null}
Email {lastLoginEmail ? ( Last email used: {lastLoginEmail} ) : null} {/* Don't have an account? Sign up */}
) }