@discoveryjs/discovery
Version:
Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards
40 lines (39 loc) • 1.56 kB
TypeScript
import type { ViewModel, PageParams } from '../main/index.js';
import type { ViewRenderer } from './view.js';
import { Dictionary } from './dict.js';
import { Observer } from './observer.js';
import { type RawViewConfig } from './view.js';
export type PageOptionName = keyof PageOptions;
export type PageOptionRender = RawViewConfig | Page['render'];
export type PageOptions = {
reuseEl: boolean;
init(newPageEl: HTMLElement): void;
render: PageOptionRender;
keepScrollOffset: boolean;
encodeParams(params: PageParams): [string, any][] | string;
decodeParams(params: [string, string | boolean][]): Record<string, unknown>;
};
export type PageOptionsWithoutRender = Exclude<PageOptions, 'render'>;
export type Page = {
name: string;
render(el: HTMLElement, data: any, context: any): any;
options?: Partial<PageOptions>;
[CONFIG]?: any;
};
declare const CONFIG: unique symbol;
export declare class PageRenderer extends Dictionary<Page> {
#private;
lastPage: string | null;
lastPageRef: string | number | null;
pageOverscrolled: Observer<boolean>;
setPageOverscroll: (el: HTMLElement) => void;
constructor(host: ViewModel, view: ViewRenderer);
define(name: string, options: PageOptions): Readonly<Page>;
define(name: string, render: PageOptionRender, options?: PageOptionsWithoutRender): Readonly<Page>;
render(prevPageEl: HTMLElement, name: string, data: any, context: any): {
pageEl: HTMLElement;
config: any;
renderState: Promise<void>;
};
}
export {};