UNPKG

@gramio/pagination

Version:

Pagination library for telegram bots

105 lines (101 loc) 4.32 kB
import { CallbackData, InferDataUnpack } from '@gramio/callback-data'; import { InlineKeyboard as InlineKeyboard$1 } from '@gramio/keyboards'; import { InlineKeyboard, ContextType, Bot } from 'gramio'; interface PaginationDataInput<Payload extends CallbackData<any, any> | never = never> { offset: number; limit: number; payload: Payload extends CallbackData<any, any> ? InferDataUnpack<Payload> : undefined; } type PaginationDataFunction<Data, Payload extends CallbackData<any, any> | never = never> = (input: PaginationDataInput<Payload>) => Promise<Data[]>; interface PaginationItemOutput { title: string; id: string | number; } type PaginationItemFunction<Data> = (data: Data) => PaginationItemOutput; interface PaginationOnSelectInput<Payload extends CallbackData<any, any> | never = never> { id: string | number; context: ContextType<Bot, "callback_query">; payload: Payload extends CallbackData<any, any> ? InferDataUnpack<Payload> : undefined; } type PaginationOnSelectFunction<Data, Payload extends CallbackData<any, any> | never = never> = (data: PaginationOnSelectInput<Payload>) => void; type PaginationGetCountFunction = () => Promise<number>; interface PaginationPageInfo { totalPages: number; currentPage: number; } type IsNever<T> = [T] extends [never] ? true : false; type PaginationSelectCallbackDataFunction<Data, Payload extends CallbackData<any, any> | never = never> = (data: { id: string | number; payload: Payload extends CallbackData<any, any> ? InferDataUnpack<Payload> : undefined; offset: number; limit: number; }) => string; type WrapKeyboardFunction<Data, Payload extends CallbackData<any, any> | never = never> = (data: { keyboard: InlineKeyboard; pagination: { hasNext: boolean; hasPrevious: boolean; }; offset: number; limit: number; data: Data[]; payload: Payload extends CallbackData<any, any> ? InferDataUnpack<Payload> : undefined; }) => InlineKeyboard; type AnyPagination = Pagination<any, any>; declare class Pagination<Data, Payload extends CallbackData<any, any> | never = never> { private name; private getData; private limitValue; private columnsValue; private itemDataIterator; private onSelectCallback; private getCount; private pageInfoFormat; private firstLastPage; private wrapKeyboardHandler; private callbackData; private selectCallbackDataFunction; private payloadInstance; constructor(name: string, func: PaginationDataFunction<Data, Payload>); constructor(name: string, payload: Payload, func: PaginationDataFunction<Data, Payload>); payload<T extends CallbackData<any, any>>(payload: T): Pagination<Data, T>; wrapKeyboard(func: WrapKeyboardFunction<Data, Payload>): this; limit(count: number): this; count(func: PaginationGetCountFunction): this; item(item: PaginationItemFunction<Data>): this; columns(count: number): this; onSelect(callback: PaginationOnSelectFunction<Data, Payload>): this; selectCallbackData(callback: PaginationSelectCallbackDataFunction<Data, Payload>): this; withPageInfo(format: (data: PaginationPageInfo) => string): this; withFirstLastPage(): this; getDataWithPaginationInfo(offset: number, ...args: IsNever<Payload> extends true ? [] : [payload: InferDataUnpack<Payload>]): Promise<{ data: Data[]; pagination: { hasNext: boolean; hasPrevious: boolean; }; } | { data: Data[]; pagination: { totalPages: number; currentPage: number; hasNext: boolean; hasPrevious: boolean; }; }>; getKeyboardWithData(offset?: number, ...args: IsNever<Payload> extends true ? [] : [payload: InferDataUnpack<Payload>]): Promise<{ keyboard: InlineKeyboard$1; data: Data[]; pagination: { totalPages: number; currentPage: number; hasNext: boolean; hasPrevious: boolean; } | { hasNext: boolean; hasPrevious: boolean; }; }>; getKeyboard(offset?: number, ...args: IsNever<Payload> extends true ? [] : [payload: InferDataUnpack<Payload>]): Promise<InlineKeyboard$1>; } export { type AnyPagination, Pagination };