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 manualSorting?: boolean
26 pageIndex: number
27 pageSize: number
28 onPaginationChange: OnChangeFn<PaginationState>
29}
30
31export const useEntityTable = <TData, TValue>(
32 {
33 columns,
34 data,
35 sorting,
36 manualSorting = false,
37 visibility,
38 rowSelection,
39 pageIndex,
40 pageSize,
41 onPaginationChange
42 }: UseEntityTableProps<TData, TValue>
43) => useReactTable({
44 data: data.entity,
45 columns,
46 manualPagination: true,
47 manualSorting,
48 pageCount: data.pageCount + 1,
49 autoResetPageIndex: false,
50 onPaginationChange,
51 onSortingChange: sorting.setSorting,
52 getCoreRowModel: getCoreRowModel(),
53 getPaginationRowModel: getPaginationRowModel(),
54 getSortedRowModel: getSortedRowModel(),
55 onColumnVisibilityChange: visibility.setColumnVisibility,
56 onRowSelectionChange: rowSelection && rowSelection.setSelectedRow,
57 state: {
58 sorting: sorting.sorting,
59 columnVisibility: visibility.columnVisibility,
60 pagination: { pageIndex: pageIndex - 1, pageSize },
61 rowSelection: rowSelection ? rowSelection.selectedRow : {},
62 },
63})