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