import { type ColumnDef, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, useReactTable, } from "@tanstack/react-table"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { Button } from "../ui/button"; import { Input } from "../ui/input"; import { ScrollArea, ScrollBar } from "../ui/scroll-area"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table"; interface DataTableProps { columns: ColumnDef[]; data: TData[]; searchKey: string; searchLabel: string; } export function DataTable({ columns, data, searchKey, searchLabel, }: DataTableProps) { const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel(), getFilteredRowModel: getFilteredRowModel(), getPaginationRowModel: getPaginationRowModel(), }); return ( <> table.getColumn(searchKey)?.setFilterValue(event.target.value)} placeholder={`Cari berdasarkan ${searchLabel}...`} value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? ""} /> {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, index) => index === 0 ? ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ) : ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ), )} )) ) : ( Tidak ada data yang ditemukan. )}
{table.getFilteredSelectedRowModel().rows.length} dari{" "} {table.getFilteredRowModel().rows.length} dipilih.
); }