gitscope
← marzneshin / v0.3.0-alpha10 / dashboard/src/components/entity-table/hooks/use-entity-table.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/components/entity-table/hooks/use-entity-table.ts · TypeScript
Blame Raw
 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})