import { PageInfo } from '../graphql/generated'; export type Connection = { edges: Edge[]; pageInfo: PageInfo; }; export type Edge = { cursor: string; node: T; }; export type QueryParams = { first?: number; after?: string; last?: number; before?: string; }; /** * * Pagination that performs client side filtering on the nodes returned from a relay compliant datasource. * * @param queryParams The query params for the pagination. * @param queryAsync A promise based function for querying. * @param filterPredicate A predicate function to filter the node. * @param beforeEachQuery Optional. A callback function to be called before each query * @param afterEachQuery Optional. A callback function to be called after each query. * @param internalBatchSize Optional. The batch size of queryAsync. Defaults to 100. * @param maxNodesFetched Optional. The maximum number of nodes to fetch. Defaults to 10_000. * @param beforeEachQuery Optional. A callback function to be called before each query * @args externalQueryParams The query params for the pagination. * @args totalNodesFetched The total number of nodes fetched so far. * @args dataset The dataset so far. * @param afterEachQuery Optional. A callback function to be called after each query. * @args externalQueryParams The query params for the pagination. * @args totalNodesFetched The total number of nodes fetched so far. * @args dataset The dataset so far. * @args willFetchAgain If the query will fetch again to get a complete page. * * @throws {Error} - If an error occurs during execution of the query or pagination. */ export declare class FilterPagination { static getPageAsync({ queryParams, queryAsync, filterPredicate, internalBatchSize, maxNodesFetched, beforeEachQuery, afterEachQuery, }: { queryParams: QueryParams; queryAsync: (queryParams: QueryParams) => Promise>; filterPredicate: (node: T) => boolean; internalBatchSize?: number; maxNodesFetched?: number; beforeEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[]) => void; afterEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[], willFetchAgain: boolean) => void; }): Promise>; static isFirstAfter(connectionArgs: QueryParams): connectionArgs is { first: number; after?: string; }; static isLastBefore(connectionArgs: { first?: number; after?: string; last?: number; before?: string; }): connectionArgs is { last: number; before?: string; }; static getFirstItemsAsync({ first, after }: { first: number; after?: string; }, { internalBatchSize, maxNodesFetched, filterPredicate, queryAsync, beforeEachQuery, afterEachQuery, }: { internalBatchSize?: number; maxNodesFetched: number; filterPredicate: (node: T) => boolean; queryAsync: (queryParams: QueryParams) => Promise>; beforeEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[]) => void; afterEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[], willFetchAgain: boolean) => void; }): Promise>; static getLastItemsAsync({ last, before }: { last: number; before?: string; }, { internalBatchSize, maxNodesFetched, filterPredicate, queryAsync, beforeEachQuery, afterEachQuery, }: { internalBatchSize?: number; maxNodesFetched: number; filterPredicate: (node: T) => boolean; queryAsync: (queryParams: QueryParams) => Promise>; beforeEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[]) => void; afterEachQuery?: (externalQueryParams: QueryParams, totalNodesFetched: number, dataset: Edge[], willFetchAgain: boolean) => void; }): Promise>; } export declare function selectPaginatedAsync({ queryAsync, getTitleAsync, printedType, pageSize, }: { pageSize: number; queryAsync: (queryParams: QueryParams) => Promise>; getTitleAsync: (node: T) => Promise; printedType: string; }): Promise; export declare const PREV_PAGE_OPTION: { value: symbol; title: string; }; export declare const NEXT_PAGE_OPTION: { value: symbol; title: string; }; export type PaginatedGetterAsync = (relayArgs: QueryParams) => Promise>; export declare const PAGE_SIZE = 20; export declare function fetchEntireDatasetAsync({ paginatedGetterAsync, progressBarLabel, }: { paginatedGetterAsync: PaginatedGetterAsync; progressBarLabel?: string; }): Promise;