"use client"; import { useUsers, useDeleteUser } from "@/hooks/use-users"; import { useOrganizations } from "@/hooks/use-master-data"; import { Button } from "@/components/ui/button"; import { DataTable } from "@/components/common/data-table"; import { Plus, MoreHorizontal, Pencil, Trash, Search } from "lucide-react"; import { useState } from "react"; import { UserDialog } from "@/components/admin/user-dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Badge } from "@/components/ui/badge"; import { ColumnDef } from "@tanstack/react-table"; import { User } from "@/types/user"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export default function UsersPage() { const [search, setSearch] = useState(""); const [selectedOrgId, setSelectedOrgId] = useState(null); const { data: users, isLoading } = useUsers({ search: search || undefined, primaryOrganizationId: selectedOrgId ? parseInt(selectedOrgId) : undefined, }); const { data: organizations = [] } = useOrganizations(); const deleteMutation = useDeleteUser(); const [dialogOpen, setDialogOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const columns: ColumnDef[] = [ { accessorKey: "username", header: "Username", cell: ({ row }) => {row.original.username} }, { accessorKey: "email", header: "Email", }, { id: "name", header: "Name", cell: ({ row }) => `${row.original.firstName} ${row.original.lastName}`, }, { id: "organization", header: "Organization", cell: ({ row }) => { // Need to find org in list if not populated or if only ID exists // Assuming backend populates organization object or we map it from ID // Currently User type has organization? // Let's rely on finding it from the master data if missing const orgId = row.original.primaryOrganizationId; const org = organizations.find((o: any) => o.id === orgId); return org ? org.organizationCode : "-"; }, }, { id: "roles", header: "Roles", cell: ({ row }) => { const roles = row.original.roles || []; // If roles is empty, it might be lazy loaded or just assignments return (
{roles.map((r) => ( {r.roleName} ))}
); } }, { accessorKey: "isActive", header: "Status", cell: ({ row }) => ( {row.original.isActive ? "Active" : "Inactive"} ), }, { id: "actions", header: "Actions", cell: ({ row }) => { const user = row.original; return ( { setSelectedUser(user); setDialogOpen(true); }}> Edit { if (confirm("Are you sure?")) deleteMutation.mutate(user.userId); }} > Delete ) } } ]; return (

User Management

Manage system users and roles

setSearch(e.target.value)} className="pl-8 bg-background" />
{isLoading ? (
Loading users...
) : ( )}
); }