import { getCoreRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table"; import type { ColumnDef, OnChangeFn, PaginationState, } from "@tanstack/react-table"; import type { UseRowSelectionReturn, UseSortingReturn, UseVisibilityReturn, } from "."; interface UseEntityTableProps { columns: ColumnDef[]; data: { entity: TData[]; pageCount: number; }; sorting: UseSortingReturn; visibility: UseVisibilityReturn; rowSelection?: UseRowSelectionReturn; manualSorting?: boolean; pageIndex: number; pageSize: number; onPaginationChange: OnChangeFn; } export const useEntityTable = ({ columns, data, sorting, manualSorting = false, visibility, rowSelection, pageIndex, pageSize, onPaginationChange, }: UseEntityTableProps) => useReactTable({ data: data.entity, columns, manualPagination: true, manualSorting, pageCount: data.pageCount + 1, autoResetPageIndex: false, onPaginationChange, onSortingChange: sorting.setSorting, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), onColumnVisibilityChange: visibility.setColumnVisibility, onRowSelectionChange: rowSelection?.setSelectedRow, state: { sorting: sorting.sorting, columnVisibility: visibility.columnVisibility, pagination: { pageIndex: pageIndex - 1, pageSize: pageSize }, rowSelection: rowSelection ? rowSelection.selectedRow : {}, }, });