import Joi from 'joi'; import { Result, RequestQuery } from './controller'; /** * Table controllers abstract paging functionaly of .find routes */ declare function tableQuerySchemaGenerator(sortBy?: Joi.StringSchema, maxRowsPerPage?: number): Joi.ObjectSchema; interface DefaultedTableQueryParameters extends RequestQuery { sortBy?: string; descending?: boolean; rowsPerPage?: number; search?: string; } interface TableQuery extends DefaultedTableQueryParameters { offset?: string; updatedAfter?: Date; } interface TableRequest { query: TableQuery; } type EffectiveTableQuery = Required & TableQuery; interface EffectiveTableRequest { query: EffectiveTableQuery; } interface SimplifiedEffectiveTableRequest { query: Omit; } interface Response { rows: RowImplementation[]; nextPageOffset: string | null; } declare class TableController { private readonly route; readonly parameters?: TableQuery | undefined; pagesAcquired: number; rowsPerPage: number; rows: RowImplementation[]; cancelFunction: (() => void) | null; nextPageOffset: string | null; endReached: boolean; constructor(route: (parameters?: TableRequest) => Result>, // eslint-disable-line max-len parameters?: TableQuery | undefined); acquire(): Promise; /** * No diffing or sorting is done, so should only be called to add new pages on * top of the already stored ones. Can be used by an implementation if it has * retrieved rows by another means (eg. by a manual call to a .find * controller) * * Be sure that the response contains full pages, otherwise you will see at * least 1 page with fewer rows */ add(response: Response, rowsPerPage: number): void; get(page: number): RowImplementation[]; destroy(): void; } export default TableController; export { tableQuerySchemaGenerator, TableQuery, EffectiveTableQuery, TableRequest, EffectiveTableRequest, };