import { ShapeToType } from "@sealcode/ts-predicates"; import { Context } from "koa"; import { FlatTemplatable, Templatable } from "tempstream"; import { FormControl } from "../forms/controls/controls.js"; import { FormField } from "../forms/fields/field.js"; import { NumberField } from "../forms/fields/number.js"; import { TextBasedSimpleField } from "../forms/fields/simple-form-field.js"; import { FormDataValue } from "../forms/form-types.js"; import { Page } from "./page.js"; import Router from "@koa/router"; export declare const BasePagePropsShape: {}; export type BasePageProps = ShapeToType; export declare const DEFAULT_ITEMS_PER_PAGE = 12; export declare const BaseListPageFields: { readonly page: NumberField<1, false>; readonly itemsPerPage: NumberField<12, false>; readonly sort: TextBasedSimpleField>; }; export type ListSort = { field: string; order: "asc" | "desc"; }; export declare abstract class ListPage extends Page { abstract getItems(ctx: Context, page: number, itemsPerPage: number | null, values: Record): Promise; abstract getTotalPages(ctx: Context, itemsPerPage: number, values: Record): Promise; abstract renderItem(ctx: Context, item: ItemType, index: number): Promise; filterFields: Record; filterControls: FormControl[]; init(path: string, router: Router): void; renderListContainer(_: Context, content: Templatable): FlatTemplatable; getPaginationConfig(ctx: Context): Promise<{ page: number; itemsPerPage: number | null; }>; renderItems(ctx: Context, values?: Record, items?: ItemType[]): Promise; renderPagination(ctx: Context, values: Record): Promise; private renderPageButton; getFilterValues(ctx: Context): Promise>; getSort(ctx: Context): Promise; makeSortLink(ctx: Context, field: string, order: "asc" | "desc" | null): string; renderFilters(ctx: Context): Promise; renderHeading(ctx: Context, field: string, label?: string): Promise; getDefaultSort(_: Context): ListSort | null; renderTableHead(ctx: Context, fields: { field: string; label?: string; }[]): FlatTemplatable; render(ctx: Context): Promise; }