1import {
2 ColumnDef,
3 OnChangeFn,
4 PaginationState,
5 getCoreRowModel,
6 getPaginationRowModel,
7 getSortedRowModel,
8 useReactTable
9} from "@tanstack/react-table";
10import {
11 UseRowSelectionReturn,
12 UseSortingReturn,
13 UseVisibilityReturn
14} from ".";
15
16interface UseEntityTableProps<TData, TValue> {
17 columns: ColumnDef<TData, TValue>[]
18 data: {
19 entity: TData[]
20 pageCount: number
21 }
22 sorting: UseSortingReturn
23 visibility: UseVisibilityReturn
24 rowSelection?: UseRowSelectionReturn
25 pageIndex: number
26 pageSize: number
27 onPaginationChange: OnChangeFn<PaginationState>
28}
29
30export const useEntityTable = <TData, TValue>(
31 {
32 columns,
33 data,
34 sorting,
35 visibility,
36 rowSelection,
37 pageIndex,
38 pageSize,
39 onPaginationChange
40 }: UseEntityTableProps<TData, TValue>
41) => useReactTable({
42 data: data.entity,
43 columns,
44 manualPagination: true,
45 pageCount: data.pageCount + 1,
46 autoResetPageIndex: false,
47 onPaginationChange,
48 onSortingChange: sorting.setSorting,
49 getCoreRowModel: getCoreRowModel(),
50 getPaginationRowModel: getPaginationRowModel(),
51 getSortedRowModel: getSortedRowModel(),
52 onColumnVisibilityChange: visibility.setColumnVisibility,
53 onRowSelectionChange: rowSelection && rowSelection.setSelectedRow,
54 state: {
55 sorting: sorting.sorting,
56 columnVisibility: visibility.columnVisibility,
57 pagination: { pageIndex: pageIndex - 1, pageSize },
58 rowSelection: rowSelection ? rowSelection.selectedRow : {},
59 },
60})