import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import type { LoginResquest } from "@/types/auth"; import { useMutation } from "@tanstack/react-query"; import { login } from "@/services/auth.service"; import { useState } from "react"; import { useNavigate, useRouter } from "@tanstack/react-router"; import { Route } from "@/routes/(auth)/login"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { useAuth } from "@/hooks/useAuth"; import { LoaderCircle } from "lucide-react"; export function LoginForm({ className }: React.ComponentProps<"form">) { const [errorMessage, setErrorMessage] = useState(null); const [formData, setFormData] = useState({ username: "", password: "", }); const auth = useAuth(); const router = useRouter(); const navigate = useNavigate(); const search = Route.useSearch() as { redirect?: string }; const mutation = useMutation({ mutationFn: login, async onSuccess(data) { localStorage.setItem("accesscontrol.auth.user", data.username!); localStorage.setItem("token", data.token!); localStorage.setItem("name", data.name!); localStorage.setItem("acs", (data.access ?? "").toString()); localStorage.setItem("role", data.role.roleName ?? ""); localStorage.setItem("priority", (data.role.priority ?? 0).toString()); auth.setAuthenticated(true); auth.login(data.username!); await router.invalidate(); await navigate({ to: search.redirect || "/dashboard" }); }, onError(error) { setErrorMessage(error.message || "Login failed"); } }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); setErrorMessage(null); mutation.mutate(formData); }; return (
logo

Computer Management

Hệ thống quản lý phòng máy thực hành
setFormData({ ...formData, username: e.target.value }) } />
setFormData({ ...formData, password: e.target.value }) } />
{errorMessage && (
{errorMessage}
)} {mutation.isPending ? ( ) : ( )}
); }