// * Packages import { useState } from "react"; import { ColumnDef, SortingState, flexRender, getCoreRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table"; import { MoreHorizontal } from "lucide-react"; // * Components shadcn import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; // * Other import { Model, Resource, Views } from "@/back/types/global"; import ModelActions from "@/back/Components/ModelActions"; import PaginationWrapper from "@/back/Components/Pagination/PaginationWrapper"; import useTrans from "@/hooks/use-translations"; import DataTableFilterButton from "@/back/Components/Table/DataTableFilterButton"; export default function DataTable({ columns, modelName, modelsPaginate, actions, }: { columns: ColumnDef[]; modelName: string; modelsPaginate: Resource; actions: Views; }) { const [sorting, setSorting] = useState([]); const data = modelsPaginate.data as TData[]; const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel(), onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), state: { sorting, }, }); const noResultsTrans = useTrans("back.table_no_results"); return ( <>
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( {header.isPlaceholder ? null : flexRender( header.column.columnDef .header, header.getContext(), )} ); })} ))} {table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender( cell.column.columnDef.cell, cell.getContext(), )} ))} )) ) : ( {noResultsTrans} )}
); }