forked from neolution-ch/react-data-table
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseFullyControlledReactDataTable.tsx
More file actions
32 lines (28 loc) · 1.62 KB
/
useFullyControlledReactDataTable.tsx
File metadata and controls
32 lines (28 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { useReactDataTable } from "../useReactDataTable/useReactDataTable";
import { useReactDataTableProps } from "../useReactDataTable/useReactDataTableProps";
import { useReactDataTableResult } from "../useReactDataTable/useReactDataTableResult";
import { FilterModel, TableState } from "../types/TableState";
type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
interface useFullyControlledReactDataTableProps<TData, TFilter extends FilterModel> extends WithRequired<
Omit<useReactDataTableProps<TData, TFilter>, "manualFiltering" | "manualPagination" | "manualSorting">,
"onColumnFiltersChange" | "onPaginationChange" | "onSortingChange"
> {
state: {
columnFilters: TableState<TData, TFilter>["columnFilters"];
pagination: TableState<TData, TFilter>["pagination"];
sorting: TableState<TData, TFilter>["sorting"];
expanded: TableState<TData, TFilter>["expanded"];
rowSelection?: TableState<TData, TFilter>["rowSelection"];
columnPinning?: TableState<TData, TFilter>["columnPinning"];
};
}
/**
* A helper hook to use the useReactDataTable hook which is fully controlled. Usefull for server side filtering, sorting and pagination.
* @param props The properties to configure the table
* @returns The table instance and the state of the table
*/
const useFullyControlledReactDataTable = <TData, TFilter extends FilterModel>(
props: useFullyControlledReactDataTableProps<TData, TFilter>,
): useReactDataTableResult<TData, TFilter> =>
useReactDataTable<TData, TFilter>({ manualFiltering: true, manualPagination: true, manualSorting: true, ...props });
export { useFullyControlledReactDataTable };