import { PaginationState } from "@/lib/hooks"; import { SortingState } from "@tanstack/react-table"; import { Dispatch, PropsWithChildren, SetStateAction, createContext, useCallback, useMemo, useState, } from "react"; import { useSyncedPagination } from "./useSyncedPagination"; export interface IDataTableContextState { pagination: PaginationState; setPagination: (newPagination: PaginationState) => void; sorting: SortingState; setSorting: Dispatch>; globalFilter: string[]; setGlobalFilter: Dispatch>; resetGlobalFilter: () => void; isFiltered: boolean; } export const DataTableContext = createContext(null); export const DataTableProvider = ({ syncWithLocation = true, initialGlobalFilter = [], initialPageIndex, initialPageSize, children, }: PropsWithChildren<{ syncWithLocation?: boolean; initialGlobalFilter?: string[]; initialPageIndex?: number; initialPageSize?: number; }>) => { const [pagination, setPagination] = useSyncedPagination({ syncWithLocation, initialPageIndex, initialPageSize, }); const [globalFilter, setGlobalFilter] = useState(initialGlobalFilter || []); const [sorting, setSorting] = useState([]); const isFiltered = useMemo(() => Boolean(globalFilter && globalFilter.length), [globalFilter]); const resetGlobalFilter = useCallback(() => setGlobalFilter([]), []); return ( {children} ); };