'use client'; import * as React from 'react'; import { ColumnDef, flexRender, getCoreRowModel, useReactTable, PaginationState, SortingState, getPaginationRowModel, OnChangeFn, } from '@tanstack/react-table'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'; interface ServerDataTableProps { columns: ColumnDef[]; data: TData[]; pageCount: number; pagination: PaginationState; onPaginationChange: OnChangeFn; sorting: SortingState; onSortingChange: OnChangeFn; isLoading?: boolean; } export function ServerDataTable({ columns, data, pageCount, pagination, onPaginationChange, sorting, onSortingChange, isLoading, }: ServerDataTableProps) { const table = useReactTable({ data, columns, pageCount, state: { pagination, sorting, }, onPaginationChange, onSortingChange, getCoreRowModel: getCoreRowModel(), manualPagination: true, manualSorting: true, }); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())} ); })} ))} {isLoading ? ( Loading... ) : table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} )) ) : ( No results. )}
{table.getFilteredSelectedRowModel && table.getFilteredSelectedRowModel().rows.length > 0 && ( <> {table.getFilteredSelectedRowModel().rows.length} of {table.getFilteredRowModel().rows.length} row(s) selected. )}

Rows per page

Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}
); }