@matthew.ngo/react-filter-pilot
Version:
Powerful filtering, pagination, and sorting for React with TanStack Query integration
58 lines (55 loc) • 2.44 kB
text/typescript
import { UseFilterPilotOptions, FetchParams, FetchResult, SortState, FilterPreset } from '../types/index.cjs';
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 };