Presupuestador_web/client/src/lib/hooks/useDataTable/DataTableContext.tsx

48 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-06-13 11:09:26 +00:00
import { PaginationState, usePaginationParams } from "@/lib/hooks";
import { SortingState } from "@tanstack/react-table";
import { PropsWithChildren, createContext, useCallback, useMemo, useState } from "react";
2024-06-11 16:48:09 +00:00
2024-06-13 11:09:26 +00:00
export interface IDataTableContextState {
pagination: PaginationState;
setPagination: (newPagination: PaginationState) => void;
sorting: [];
setSorting: () => void;
globalFilter: string;
setGlobalFilter: (newGlobalFilter: string) => void;
resetGlobalFilter: () => void;
isFiltered: boolean;
}
2024-06-11 16:48:09 +00:00
export const DataTableContext = createContext<IDataTableContextState | null>(null);
2024-06-13 11:09:26 +00:00
export const DataTableProvider = ({
initialGlobalFilter = "",
children,
}: PropsWithChildren<{
initialGlobalFilter?: string;
}>) => {
2024-06-11 16:48:09 +00:00
const [pagination, setPagination] = usePaginationParams();
2024-06-13 11:09:26 +00:00
const [globalFilter, setGlobalFilter] = useState<string>(initialGlobalFilter);
const [sorting, setSorting] = useState<SortingState>([]);
const isFiltered = useMemo(() => Boolean(globalFilter.length), [globalFilter]);
const resetGlobalFilter = useCallback(() => setGlobalFilter(""), []);
2024-06-11 16:48:09 +00:00
return (
<DataTableContext.Provider
value={{
pagination,
setPagination,
2024-06-13 11:09:26 +00:00
sorting,
setSorting,
globalFilter,
setGlobalFilter,
resetGlobalFilter,
isFiltered,
2024-06-11 16:48:09 +00:00
}}
>
{children}
</DataTableContext.Provider>
);
};