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