import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "react-router-dom"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Search, Eye, ChevronLeft, ChevronRight, Filter } from "lucide-react"; import { userService } from "@/services"; import { format } from "date-fns"; import { cn } from "@/lib/utils"; export default function UsersPage() { const navigate = useNavigate(); const [page, setPage] = useState(1); const [limit] = useState(15); const [search, setSearch] = useState(""); const [roleFilter, setRoleFilter] = useState("all"); const { data: usersData, isLoading } = useQuery({ queryKey: ["admin", "users", page, limit, search, roleFilter], queryFn: async () => { const params: Record = { page, limit }; if (search) params.search = search; if (roleFilter !== "all") params.role = roleFilter; return await userService.getUsers(params); }, }); const getRoleBadgeColor = (role: string) => { switch (role) { case "ADMIN": return "text-rose-600 bg-rose-50 border-rose-100"; case "USER": return "text-blue-600 bg-blue-50 border-blue-100"; case "VIEWER": return "text-emerald-600 bg-emerald-50 border-emerald-100"; default: return "text-gray-600 bg-gray-50 border-gray-100"; } }; return (

Users

Manage system access and permissions.

{/* View only access: Add User and Import buttons removed */}
User Directory
setSearch(e.target.value)} />
{isLoading ? ( ) : usersData?.data && usersData.data.length > 0 ? ( usersData.data.map((user: any) => ( )) ) : ( )}
User Role Status Created Actions
Retrieving user data...
{user.firstName} {user.lastName} {user.email}
{user.role} {user.isActive ? "Active" : "Inactive"} {format(new Date(user.createdAt), "MMM dd, yyyy")}
No users found.
{usersData && (

Showing {(page - 1) * limit + 1} to{" "} {Math.min(page * limit, usersData.total)} of {usersData.total}

)}
); }