@discoveryjs/discovery
Version:
Frontend framework for rapid data (JSON) analysis, shareable serverless reports and dashboards
109 lines (108 loc) • 5.09 kB
TypeScript
import type { ModelEvents, ModelOptions, PageAnchor, PageParams, PageRef, PageHashState, PageHashStateWithAnchor, SetDataOptions } from './model.js';
import type { Dataset } from '../core/utils/load-data.js';
import type { InjectStyle } from '../core/utils/inject-styles.js';
import type { Progressbar } from '../core/utils/progressbar.js';
import { Model } from './model.js';
import { Observer } from '../core/observer.js';
import { ColorScheme, ColorSchemeState } from '../core/color-scheme.js';
import { ViewModelNavigation } from '../nav/index.js';
import { PageRenderer } from '../core/page.js';
import { ViewRenderer } from '../core/view.js';
import { PresetRenderer } from '../core/preset.js';
export type RenderSubject = typeof renderSubjects[number];
export type SetDataProgressOptions = Partial<{
dataset: Dataset;
progressbar: Progressbar;
}>;
declare const renderSubjects: readonly ["nav", "sidebar", "page"];
export interface ViewModelEvents extends ModelEvents {
startSetData: [subscribe: Progressbar['subscribeSync']];
pageStateChange: [prev: PageHashState];
pageAnchorChange: [prev: string | null];
pageHashChange: [replace: boolean];
}
export interface ViewModelOptions<T = ViewModel> extends ModelOptions<T> {
container: HTMLElement;
styles: InjectStyle[];
compact: boolean;
colorScheme: ColorSchemeState;
colorSchemePersistent: boolean;
defaultPage: string;
defaultPageId: string;
discoveryPageId: string;
reportToDiscoveryRedirect: boolean;
inspector: boolean;
/** @deprecated Legacy option, use colorScheme instead */
darkmode: ColorSchemeState;
/** @deprecated Legacy option, use colorSchemePersistent instead */
darkmodePersistent: boolean;
}
type ViewModelOptionsBind = ViewModelOptions;
export declare class ViewModel<Options extends ViewModelOptions = ViewModelOptionsBind, Events extends ViewModelEvents = ViewModelEvents> extends Model<Options, Events> {
#private;
compact: boolean;
colorScheme: ColorScheme;
inspectMode: Observer<boolean>;
view: ViewRenderer;
nav: ViewModelNavigation;
preset: PresetRenderer;
page: PageRenderer;
defaultPageId: string;
discoveryPageId: string;
reportToDiscoveryRedirect: boolean;
pageId: string;
pageRef: PageRef;
pageParams: Record<string, any>;
pageAnchor: PageAnchor;
pageHash: string;
dom: {
ready: Promise<void>;
wrapper: HTMLElement;
root: HTMLElement | ShadowRoot;
container: HTMLElement;
nav: HTMLElement;
sidebar: HTMLElement;
content: HTMLElement;
pageContent: HTMLElement;
detachColorScheme: null | (() => void);
};
queryExtensions: Record<string, (...args: unknown[]) => any>;
constructor(options: Partial<Options>);
initRenderTriggers(): void;
setData(data: unknown, options?: SetDataOptions & {
render?: boolean;
}): Promise<void>;
setDataProgress(data: unknown, context: unknown, options?: SetDataProgressOptions): Promise<void>;
initDom(styles?: InjectStyle[]): void;
setContainer(container?: HTMLElement): void;
disposeDom(): void;
addGlobalEventListener<E extends keyof DocumentEventMap>(type: E, listener: (e: DocumentEventMap[E]) => void, options?: boolean | AddEventListenerOptions): () => void;
addHostElEventListener<E extends keyof HTMLElementEventMap>(type: E, listener: (e: HTMLElementEventMap[E]) => void, options?: boolean | AddEventListenerOptions): () => void;
scheduleRender(...subjects: RenderSubject[]): void;
enforceScheduledRenders(): Promise<void>;
cancelScheduledRender(subject?: RenderSubject): void;
getRenderContext(): any;
protected renderNav(): void;
protected renderSidebar(): Promise<void> | undefined;
encodePageHash(pageId: string, pageRef?: PageRef, pageParams?: PageParams, pageAnchor?: string | null): string;
decodePageHash(hash: string): {
pageId: string;
pageRef: string | null;
pageParams: Record<string, unknown>;
pageAnchor: string | null;
};
setPageHashState(pageState?: Partial<PageHashState>, replace?: boolean): boolean;
overridePageHashState(pageState: Partial<PageHashState>, replace?: boolean): boolean;
getPageHashState(): PageHashState;
setPageHashStateWithAnchor(pageStateWithAnchor: Partial<PageHashStateWithAnchor>, replace?: boolean): boolean;
overridePageHashStateWithAnchor(pageState: Partial<PageHashStateWithAnchor>, replace?: boolean): boolean;
getPageHashStateWithAnchor(): PageHashStateWithAnchor;
setPage(pageId: string, pageRef?: PageRef, pageParams?: PageParams, replace?: boolean): boolean;
setPageRef(pageRef?: PageRef, replace?: boolean): boolean;
setPageParams(pageParams: PageParams, replace?: boolean): boolean;
setPageAnchor(pageAnchor: string | null, replace?: boolean): boolean;
setPageHash(hash: string, replace?: boolean): boolean;
applyPageAnchor(onlyIfPageAnchorPresent?: boolean): void;
protected renderPage(): Promise<void>;
}
export {};