import { Fragment } from "react"; import { ColumnDef, flexRender, getCoreRowModel, getSortedRowModel, SortingState, useReactTable, } from "@tanstack/react-table"; import React from "react"; import { Table, TableHead, TableHeaderCell, TableBody, TableRow, TableCell, } from "@tremor/react"; import { SwitchVerticalIcon, ChevronUpIcon, ChevronDownIcon } from "@heroicons/react/outline"; import { UserInfo } from "./types"; import UserInfoView from "./user_info_view"; interface UserDataTableProps { data: UserInfo[]; columns: ColumnDef[]; isLoading?: boolean; onSortChange?: (sortBy: string, sortOrder: 'asc' | 'desc') => void; currentSort?: { sortBy: string; sortOrder: 'asc' | 'desc'; }; accessToken: string | null; userRole: string | null; possibleUIRoles: Record> | null; } export function UserDataTable({ data = [], columns, isLoading = false, onSortChange, currentSort, accessToken, userRole, possibleUIRoles, }: UserDataTableProps) { const [sorting, setSorting] = React.useState([ { id: currentSort?.sortBy || "created_at", desc: currentSort?.sortOrder === "desc" } ]); const [selectedUserId, setSelectedUserId] = React.useState(null); const table = useReactTable({ data, columns, state: { sorting, }, onSortingChange: (newSorting: any) => { setSorting(newSorting); if (newSorting.length > 0) { const sortState = newSorting[0]; const sortBy = sortState.id; const sortOrder = sortState.desc ? 'desc' : 'asc'; onSortChange?.(sortBy, sortOrder); } }, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), enableSorting: true, }); const handleUserClick = (userId: string) => { setSelectedUserId(userId); }; const handleCloseUserInfo = () => { setSelectedUserId(null); }; // Update local sorting state when currentSort prop changes React.useEffect(() => { if (currentSort) { setSorting([{ id: currentSort.sortBy, desc: currentSort.sortOrder === 'desc' }]); } }, [currentSort]); if (selectedUserId) { return ( ); } return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => (
{header.isPlaceholder ? null : ( flexRender( header.column.columnDef.header, header.getContext() ) )}
{header.id !== 'actions' && (
{header.column.getIsSorted() ? ( { asc: , desc: }[header.column.getIsSorted() as string] ) : ( )}
)}
))}
))}
{isLoading ? (

🚅 Loading users...

) : data.length > 0 ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( { if (cell.column.id === 'user_id') { handleUserClick(cell.getValue() as string); } }} style={{ cursor: cell.column.id === 'user_id' ? 'pointer' : 'default', color: cell.column.id === 'user_id' ? '#3b82f6' : 'inherit', }} > {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} )) ) : (

No users found

)}
); }