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: (newGlobalFilter: string) => void; 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.length), [globalFilter]); const resetGlobalFilter = useCallback(() => setGlobalFilter(""), []); return ( {children} ); };