import { useState } from 'react'; import { useSetRecoilState } from 'recoil'; import { LucideArrowUpLeft } from 'lucide-react'; import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import type { ColumnDef, SortingState, VisibilityState, ColumnFiltersState, } from '@tanstack/react-table'; import type { AugmentedColumnDef } from '~/common'; import { Button, Input, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '~/components/ui'; import store from '~/store'; interface DataTableProps { columns: ColumnDef[]; data: TData[]; } export default function DataTable({ columns, data }: DataTableProps) { const [rowSelection, setRowSelection] = useState({}); const [sorting, setSorting] = useState([]); const [columnFilters, setColumnFilters] = useState([]); const [columnVisibility, setColumnVisibility] = useState({}); const [paginationState, setPagination] = useState({ pageIndex: 0, pageSize: 10 }); const setShowFiles = useSetRecoilState(store.showFiles); const table = useReactTable({ data, columns, onSortingChange: setSorting, onPaginationChange: setPagination, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), onColumnFiltersChange: setColumnFilters, getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, getPaginationRowModel: getPaginationRowModel(), onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, columnVisibility, rowSelection, pagination: paginationState, }, defaultColumn: { minSize: 0, size: 10, maxSize: 10, enableResizing: true, }, }); return ( <>
table.getColumn('filename')?.setFilterValue(event.target.value)} className="max-w-xs dark:border-gray-700" />
{table.getHeaderGroups().map((headerGroup, index) => ( {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) => ( ).meta .size, }} > {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} )) ) : ( No results. )}
); }