"use client" import { useMemo, useState } from "react" import { ColumnDef } from "@tanstack/react-table" import { DataTable } from "@/components/shared/data-table" import { DataTableColumnHeader } from "@/components/shared/data-table-column-header" import { UserStatusBadge } from "./user-status-badge" import { UserFormDialog } from "./user-form-dialog" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { User } from "@/types" import { Pencil, Trash2 } from "lucide-react" import { toast } from "sonner" interface UsersTableProps { data: User[] loading?: boolean onUserDeleted?: () => void } export function UsersTable({ data, loading, onUserDeleted }: UsersTableProps) { const [editingUser, setEditingUser] = useState(null) const [editOpen, setEditOpen] = useState(false) const handleDelete = async (id: string) => { if (!confirm("Are you sure you want to delete this user?")) return try { const res = await fetch(`/api/users/${id}`, { method: "DELETE" }) if (!res.ok) throw new Error() toast.success("User deleted") onUserDeleted?.() } catch { console.warn("Failed to delete user") toast.error("Failed to delete user") } } const columns: ColumnDef[] = useMemo( () => [ { id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" /> ), enableSorting: false, }, { accessorKey: "name", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.name[0]}

{row.original.name}

{row.original.email}

), }, { accessorKey: "email", header: ({ column }) => ( ), cell: ({ row }) => ( {row.getValue("email")} ), }, { accessorKey: "role", header: ({ column }) => ( ), cell: ({ row }) => { const role = row.getValue("role") as string const colors: Record = { super_admin: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", admin: "bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20", sales_user: "bg-purple-500/10 text-purple-600 dark:text-purple-400 border-purple-500/20", developer: "bg-zinc-500/10 text-zinc-600 dark:text-zinc-400 border-zinc-500/20", } return ( {role.replace("_", " ")} ) }, }, { accessorKey: "active", header: ({ column }) => ( ), cell: ({ row }) => , }, { id: "actions", cell: ({ row }) => { const user = row.original return (
) }, }, ], [] ) return ( <> ) }