gitscope
← marzneshin / v0.3.0-alpha4 / 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    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})