UNPKG

survey-analytics

Version:

SurveyJS analytics Library.

323 lines (322 loc) 13.6 kB
import { Question } from "survey-core"; import { DataProvider, GetDataFn } from "./dataProvider"; import { Event } from "survey-core"; import "./visualizerBase.scss"; export interface IDataInfo { name: string; dataNames: Array<string>; getValues(): Array<any>; getLabels(): Array<string>; getSeriesValues(): Array<string>; getSeriesLabels(): Array<string>; } export declare class PostponeHelper { static postponeFunction: (fn: () => void, timeout?: number) => any; static postpone(fn: () => void, timeout?: number): any; } /** * A base object for all visualizers. Use it to implement a custom visualizer. * * Constructor parameters: * * - `question`: [`Question`](https://surveyjs.io/form-library/documentation/api-reference/question)\ * A survey question to visualize. * - `data`: `Array<any>`\ * Survey results. * - `options`\ * An object with the following properties: * - `dataProvider`: `DataProvider`\ * A data provider for this visualizer. * - `renderContent`: `(contentContainer: HTMLElement, visualizer: VisualizerBase) => void`\ * A function that renders the visualizer's HTML markup. Append the markup to `contentContainer`. * - `survey`: [`SurveyModel`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model)\ * Pass a `SurveyModel` instance if you want to use locales from the survey JSON schema. * - `seriesValues`: `Array<string>`\ * Series values used to group data. * - `seriesLabels`: `Array<string>`\ * Series labels to display. If this property is not set, `seriesValues` are used as labels. * - `type`: `string`\ * *(Optional)* The visualizer's type. * * [View Demo](https://surveyjs.io/dashboard/examples/how-to-plot-survey-data-in-custom-bar-chart/ (linkStyle)) */ export declare class VisualizerBase implements IDataInfo { question: Question; options: { [index: string]: any; }; private _type?; static suppressVisualizerStubRendering: boolean; private _showToolbar; private _footerVisualizer; private _dataProvider; private _getDataCore; labelTruncateLength: number; protected renderResult: HTMLElement; protected toolbarContainer: HTMLElement; protected headerContainer: HTMLElement; protected contentContainer: HTMLElement; protected footerContainer: HTMLElement; protected _supportSelection: boolean; static otherCommentCollapsed: boolean; /** * An event that is raised after the visualizer's content is rendered. * * Parameters: * * - `sender`: `VisualizerBase`\ * A `VisualizerBase` instance that raised the event. * * - `options.htmlElement`: `HTMLElement`\ * A page element with the visualizer's content. * @see render * @see refresh **/ onAfterRender: Event<(sender: VisualizerBase, options: any) => any, VisualizerBase, any>; protected afterRender(contentContainer: HTMLElement): void; /** * An event that is raised after a new locale is set. * * Parameters: * * - `sender`: `VisualizerBase`\ * A `VisualizerBase` instance that raised the event. * * - `options.locale`: `string`\ * The indentifier of a new locale (for example, "en"). * @see locale */ onLocaleChanged: Event<(sender: VisualizerBase, options: { locale: string; }) => any, VisualizerBase, any>; /** * An event that is raised when the visualizer's state has changed. * * The state includes selected chart types, chart layout, sorting, filtering, and other customizations that a user has made while using the dashboard. Handle the `onStateChanged` event to save these customizations, for example, in `localStorage` and restore them when the user reloads the page. * * Parameters: * * - `sender`: `VisualizerBase`\ * A `VisualizerBase` instance that raised the event. * * - `state`: `any`\ * A new state of the visualizer. Includes information about the visualized elements and current locale. * * [View Demo](/dashboard/examples/save-dashboard-state-to-local-storage/ (linkStyle)) * @see getState * @see setState */ onStateChanged: Event<(sender: VisualizerBase, options: any) => any, VisualizerBase, any>; protected stateChanged(name: string, value: any): void; protected toolbarItemCreators: { [name: string]: (toolbar?: HTMLDivElement) => HTMLElement; }; constructor(question: Question, data: Array<{ [index: string]: any; }> | GetDataFn, options?: { [index: string]: any; }, _type?: string); protected get questionOptions(): any; protected onDataChanged(): void; /** * Returns the identifier of a visualized question. */ get name(): string; get dataNames(): Array<string>; /** * Indicates whether the visualizer displays a header. This property is `true` when a visualized question has a correct answer. * @see hasFooter */ get hasHeader(): boolean; /** * Indicates whether the visualizer displays a footer. This property is `true` when a visualized question has a comment. * @see hasHeader */ get hasFooter(): boolean; protected createVisualizer<T = VisualizerBase>(question: Question, options?: { [index: string]: any; }): T; /** * Allows you to access the footer visualizer. Returns `undefined` if the footer is absent. * @see hasFooter */ get footerVisualizer(): VisualizerBase; /** * Indicates whether users can select series points to cross-filter charts. To allow or disallow selection, set the [`allowSelection`](https://surveyjs.io/dashboard/documentation/api-reference/ivisualizationpaneloptions#allowSelection) property of the `IVisualizationPanelOptions` object in the [`VisualizationPanel`](https://surveyjs.io/dashboard/documentation/api-reference/visualizationpanel) constructor. */ get supportSelection(): boolean; getSeriesValues(): Array<string>; getSeriesLabels(): Array<string>; getValues(): Array<any>; getLabels(): Array<string>; /** * Registers a function used to create a toolbar item for this visualizer. * * The following code shows how to add a custom button and drop-down menu to the toolbar: * * ```js * import { VisualizationPanel, DocumentHelper } from "survey-analytics"; * * const vizPanel = new VisualizationPanel( ... ); * * // Add a custom button to the toolbar * vizPanel.visualizers[0].registerToolbarItem("my-toolbar-button", () => { * return DocumentHelper.createButton( * // A button click event handler * () => { * alert("Custom toolbar button is clicked"); * }, * // Button caption * "Button" * ); * }); * * // Add a custom drop-down menu to the toolbar * vizPanel.visualizers[0].registerToolbarItem("my-toolbar-dropdown", () => { * return DocumentHelper.createSelector( * // Menu items * [ * { value: 1, text: "One" }, * { value: 2, text: "Two" }, * { value: 3, text: "Three" } * ], * // A function that specifies initial selection * (option) => false, * // An event handler that is executed when selection is changed * (e) => { * alert(e.target.value); * } * ); * }); * ``` * @param name A custom name for the toolbar item. * @param creator A function that accepts the toolbar and should return an `HTMLElement` with the toolbar item. * @see unregisterToolbarItem */ registerToolbarItem(name: string, creator: (toolbar?: HTMLDivElement) => HTMLElement): void; /** * * Unregisters a function used to create a toolbar item. Allows you to remove a toolbar item. * @param name A toolbar item name. * @returns A function previously used to [register](#registerToolbarItem) the removed toolbar item. * @see registerToolbarItem */ unregisterToolbarItem(name: string): (toolbar?: HTMLDivElement) => HTMLElement; /** * Returns the visualizer's type. */ get type(): string; /** * @deprecated Use [`surveyData`](https://surveyjs.io/dashboard/documentation/api-reference/visualizationpanel#surveyData) instead. */ protected get data(): any[]; /** * Returns an array of survey results used to calculate values for visualization. If a user applies a filter, the array is also filtered. * * To get an array of calculated and visualized values, call the [`getCalculatedValues()`](https://surveyjs.io/dashboard/documentation/api-reference/visualizerbase#getCalculatedValues) method. */ protected get surveyData(): any[]; protected get dataProvider(): DataProvider; /** * Updates visualized data. * @param data A data array with survey results to be visualized. */ updateData(data: Array<{ [index: string]: any; }>): void; onUpdate: () => void; invokeOnUpdate(): void; /** * Deletes the visualizer and all its elements from the DOM. * @see clear */ destroy(): void; /** * Empties the toolbar, header, footer, and content containers. * * If you want to empty and delete the visualizer and all its elements from the DOM, call the [`destroy()`](https://surveyjs.io/dashboard/documentation/api-reference/visualizerbase#destroy) method instead. */ clear(): void; protected createToolbarItems(toolbar: HTMLDivElement): void; protected getCorrectAnswerText(): string; protected destroyToolbar(container: HTMLElement): void; protected renderToolbar(container: HTMLElement): void; protected destroyHeader(container: HTMLElement): void; protected destroyContent(container: HTMLElement): void; protected renderHeader(container: HTMLElement): void; protected renderContentAsync(container: HTMLElement): Promise<HTMLElement>; protected renderContent(container: HTMLElement): void; protected destroyFooter(container: HTMLElement): void; protected renderFooter(container: HTMLElement): void; /** * Renders the visualizer in a specified container. * @param targetElement An `HTMLElement` or an `id` of a page element in which you want to render the visualizer. */ render(targetElement: HTMLElement | string): void; updateContent(): void; /** * Re-renders the visualizer and its content. */ refresh(): void; protected processText(text: string): string; getRandomColor(): any; private _backgroundColor; get backgroundColor(): string; set backgroundColor(value: string); protected getBackgroundColorCore(): string; protected setBackgroundColorCore(color: string): void; static customColors: string[]; private static colors; getColors(count?: number): any; /** * Gets or sets the visibility of the visualizer's toolbar. * * Default value: `true` */ get showToolbar(): boolean; set showToolbar(newValue: boolean); /** * @deprecated Use [`getCalculatedValues()`](https://surveyjs.io/dashboard/documentation/api-reference/visualizationpanel#getCalculatedValues) instead. */ getData(): any; private _calculationsCache; protected getCalculatedValuesCore(): Array<any>; protected loadingData: boolean; renderLoadingIndicator(contentContainer: HTMLElement): void; convertFromExternalData(externalCalculatedData: any): any[]; /** * Returns an array of calculated and visualized values. If a user applies a filter, the array is also filtered. * * To get an array of source survey results, use the [`surveyData`](https://surveyjs.io/dashboard/documentation/api-reference/visualizerbase#surveyData) property. */ getCalculatedValues(): Promise<Array<Object>>; protected _settingState: boolean; /** * Returns an object with properties that describe a current visualizer state. The properties are different for each individual visualizer. * * > This method is overriden in classes descendant from `VisualizerBase`. * @see setState * @see onStateChanged */ getState(): any; /** * Sets the visualizer's state. * * > This method is overriden in classes descendant from `VisualizerBase`. * @see getState * @see onStateChanged */ setState(state: any): void; /** * Gets or sets the current locale. * * If you want to inherit the locale from a visualized survey, assign a [`SurveyModel`](https://surveyjs.io/form-library/documentation/api-reference/survey-data-model) instance to the [`survey`](https://surveyjs.io/dashboard/documentation/api-reference/ivisualizationpaneloptions#survey) property of the `IVisualizationPanelOptions` object in the [`VisualizationPanel`](https://surveyjs.io/dashboard/documentation/api-reference/visualizationpanel) constructor. * * If the survey is [translated into more than one language](https://surveyjs.io/form-library/examples/survey-localization/), the toolbar displays a language selection drop-down menu. * @see onLocaleChanged */ get locale(): string; set locale(newLocale: string); protected setLocale(newLocale: string): void; } export declare function defaultStatisticsCalculator(data: Array<any>, dataInfo: IDataInfo): Array<any>;