| import { ColumnDef, flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table' |
|
|
| import { |
| Table, |
| TableBody, |
| TableCell, |
| TableHead, |
| TableHeader, |
| TableRow |
| } from '@/components/ui/Table' |
|
|
| interface DataTableProps<TData, TValue> { |
| columns: ColumnDef<TData, TValue>[] |
| data: TData[] |
| } |
|
|
| export default function DataTable<TData, TValue>({ columns, data }: DataTableProps<TData, TValue>) { |
| |
| |
| |
| const table = useReactTable({ |
| data, |
| columns, |
| getCoreRowModel: getCoreRowModel() |
| }) |
|
|
| return ( |
| <div className="rounded-md border"> |
| <Table> |
| <TableHeader> |
| {table.getHeaderGroups().map((headerGroup) => ( |
| <TableRow key={headerGroup.id}> |
| {headerGroup.headers.map((header) => { |
| return ( |
| <TableHead key={header.id}> |
| {header.isPlaceholder |
| ? null |
| : flexRender(header.column.columnDef.header, header.getContext())} |
| </TableHead> |
| ) |
| })} |
| </TableRow> |
| ))} |
| </TableHeader> |
| <TableBody> |
| {table.getRowModel().rows?.length ? ( |
| table.getRowModel().rows.map((row) => ( |
| <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}> |
| {row.getVisibleCells().map((cell) => ( |
| <TableCell key={cell.id}> |
| {flexRender(cell.column.columnDef.cell, cell.getContext())} |
| </TableCell> |
| ))} |
| </TableRow> |
| )) |
| ) : ( |
| <TableRow> |
| <TableCell colSpan={columns.length} className="h-24 text-center"> |
| No results. |
| </TableCell> |
| </TableRow> |
| )} |
| </TableBody> |
| </Table> |
| </div> |
| ) |
| } |
|
|