import { IClientRequest } from "../common/ClientRequest"; import { IPaginatedResponse, IPaginationLinks, IResourceEntity, IResourceFactory, IResourcePaginationParams } from "../interfaces/api"; export interface IResourcePagination { fetch(): void; getData(): T[]; getPage(): number; hasPrev(): boolean; hasNext(): boolean; hasFirst(): boolean; next(): Promise; prev(): Promise; [Symbol.iterator](): Iterator; } /** * Постраничная навигация вывода сущностей * */ export default class ResourcePagination>> implements IResourcePagination { protected readonly request: IClientRequest; protected readonly params: IResourcePaginationParams; protected data: T[]; protected links: IPaginationLinks; protected page: number; constructor(request: IClientRequest, params: IResourcePaginationParams); [Symbol.iterator](): IterableIterator; /** * Загружает данные первой страницы * */ fetch(): Promise; /** * Обновляет данные на текущей странице * */ refresh(): Promise; /** * Делает запрос на получение данных по заданному адресу * @param url адрес запроса * */ protected fetchUrl(url: string): Promise; /** * @returns есть ли следующая страница * */ hasNext(): boolean; /** * @returns есть ли возможность загрузки первой страницы * */ hasFirst(): boolean; /** * @returns есть ли предыдущая страница * */ hasPrev(): boolean; /** * Загружает данные следующей страницы, если это возможно * */ next(): Promise; /** * Загружает данные первой страницы, если это возможно * */ first(): Promise; /** * Загружает данные предыдущей страницы, если это возможно * */ prev(): Promise; /** * Обрабатывает объект ссылок на первую, предыдущую и следущие страницы * */ protected parseLinks(response?: IPaginatedResponse): this; /** * Преобразовывает массив атрибутов сущностей в объекты-сущностей * */ protected parseData(response?: IPaginatedResponse): never[] | this | undefined; /** * Возвращает номер текущей страницы * */ getPage(): number; /** * Возвращает массив сущностей на текущей странице * */ getData(): T[]; }