UNPKG

@matthew.ngo/react-filter-pilot

Version:

Powerful filtering, pagination, and sorting for React with TanStack Query integration

58 lines (55 loc) 2.44 kB
import { UseFilterPilotOptions, FetchParams, FetchResult, SortState, FilterPreset } from '../types/index.js'; interface InfiniteResult<TData> extends FetchResult<TData> { nextCursor?: string | number | null; previousCursor?: string | number | null; } interface UseFilterPilotInfiniteOptions<TData, TFilters> extends Omit<UseFilterPilotOptions<TData, TFilters>, 'paginationConfig' | 'fetchConfig'> { fetchConfig: Omit<UseFilterPilotOptions<TData, TFilters>['fetchConfig'], 'fetchFn'> & { fetchFn: (params: FetchParams<TFilters> & { cursor?: string | number | null; }) => Promise<InfiniteResult<TData>>; getNextPageParam?: (lastPage: InfiniteResult<TData>, allPages: InfiniteResult<TData>[]) => string | number | null | undefined; getPreviousPageParam?: (firstPage: InfiniteResult<TData>, allPages: InfiniteResult<TData>[]) => string | number | null | undefined; initialPageParam?: string | number | null; maxPages?: number; }; } interface UseFilterPilotInfiniteResult<TData, TFilters> { filters: TFilters; setFilterValue: (name: keyof TFilters, value: any) => void; setFilters: (filters: Partial<TFilters>) => void; resetFilters: () => void; resetFilter: (name: keyof TFilters) => void; sort?: SortState; setSort: (field: string, direction?: 'asc' | 'desc') => void; toggleSort: (field: string) => void; clearSort: () => void; data: TData[]; isLoading: boolean; isError: boolean; error?: Error; isFetching: boolean; isFetchingNextPage: boolean; isFetchingPreviousPage: boolean; hasNextPage: boolean; hasPreviousPage: boolean; fetchNextPage: () => void; fetchPreviousPage: () => void; refetch: () => void; totalRecords: number; pageParams: unknown[]; hasActiveFilters: () => boolean; getActiveFiltersCount: () => number; getQueryKey: () => unknown[]; presets?: { savePreset: (name: string) => void; loadPreset: (preset: FilterPreset) => void; deletePreset: (id: string) => void; getPresets: () => FilterPreset[]; }; } /** * Hook for infinite scrolling with filters */ declare function useFilterPilotInfinite<TData, TFilters = Record<string, any>>(options: UseFilterPilotInfiniteOptions<TData, TFilters>): UseFilterPilotInfiniteResult<TData, TFilters>; export { type UseFilterPilotInfiniteResult, useFilterPilotInfinite };