"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { DataTable } from "@/components/common/data-table"; import { UserDialog } from "@/components/admin/user-dialog"; import { ColumnDef } from "@tanstack/react-table"; import { Badge } from "@/components/ui/badge"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { MoreHorizontal, Plus, Loader2 } from "lucide-react"; import { User } from "@/types/admin"; import { adminApi } from "@/lib/api/admin"; export default function UsersPage() { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [dialogOpen, setDialogOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const fetchUsers = async () => { setLoading(true); try { const data = await adminApi.getUsers(); setUsers(data); } catch (error) { console.error("Failed to fetch users", error); } finally { setLoading(false); } }; useEffect(() => { fetchUsers(); }, []); const columns: ColumnDef[] = [ { accessorKey: "username", header: "Username", }, { accessorKey: "email", header: "Email", }, { accessorKey: "first_name", header: "Name", cell: ({ row }) => `${row.original.first_name} ${row.original.last_name}`, }, { accessorKey: "is_active", header: "Status", cell: ({ row }) => ( {row.original.is_active ? "Active" : "Inactive"} ), }, { id: "roles", header: "Roles", cell: ({ row }) => (
{row.original.roles?.map((role) => ( {role.role_name} ))}
), }, { id: "actions", cell: ({ row }) => ( { setSelectedUser(row.original); setDialogOpen(true); }} > Edit alert("Deactivate not implemented in mock")} > {row.original.is_active ? "Deactivate" : "Activate"} ), }, ]; return (

User Management

Manage system users and their roles

{loading ? (
) : ( )}
); }