import { AxiosPromise } from "axios"; import { PageBase, PageInfo, PageParameterProperties, PageParameters } from "./page-types"; export type PageParametersBase = Parameters & { requestBody?: Parameters; }; export type PageRequest = (parameters: Parameters) => AxiosPromise; export declare abstract class Pageable { readonly data: Data; protected readonly initialParameters: Parameters; private readonly _request; previous(): Promise>; next(): Promise>; /** * Generate minimal set of parameters needed to get the previous page */ protected abstract get previousParameters(): PageParameterProperties | null; /** * Generate minimal set of parameters needed to get the next page */ protected abstract get nextParameters(): PageParameterProperties | null; /** * Is there a previous page based on PageInfo? */ abstract hasPrevious(): boolean; /** * Is there a next page based on PageInfo? */ abstract hasNext(): boolean; /** * Helper for invoking a request. Handles request body and parameter based pagination */ private makeRequest; /** * Helper for creating new page */ private withData; constructor({ data, initialParameters, request, }: { data: Data; initialParameters: Parameters; request: PageRequest; }); abstract make(parameters: { data: Data; initialParameters: Parameters; request: PageRequest; }): Pageable; }