UNPKG

@future-grid/fgp-graph

Version:

fgp-graph is a chart lib based on Dygraphs

288 lines (287 loc) 6.66 kB
import { DataHandler } from "../services/dataService"; /** *2 types of exporting graph data and save as image * * @enum {number} */ export declare enum GraphExports { Image = "image", Data = "data", Draw = "draw" } export declare enum DataRequestTarget { RANGE_BAR = "rangebar", GRAPH = "graph" } export interface ToolbarBtn { label: string; prop: any; func(prop: any): void; } export interface ToolbarDropdown { label: string; prop: any; func(prop: any): void; } export interface ToolbarConfig { buttons?: ToolbarBtn[]; dropdown?: Array<ToolbarDropdown[]>; } /** * @zoom enable or disable zooming * @scroll enable or disable scrolling * @rangeBar show or hide rangeBar * @connectPoints connect points when series interval are different. * @legend type of legend (single or multiple) * @ctrlButtons show or hide control buttons * @rangeLocked lock range bar */ export interface Features { zoom: boolean; scroll: boolean; rangeBar: boolean | { show: boolean; format: string; }; connectPoints?: boolean; legend?(data: any): string; exports?: GraphExports[]; ctrlButtons?: { x?: boolean; y?: boolean; y2?: boolean; }; rangeLocked?: boolean; toolbar?: ToolbarConfig; pointLimits?: boolean; } /** * device entity * * @id * @name * @type type of entity * @description * @fragment * @extension object for extra info */ export interface Entity { id: string; type: string; name: string; extension?: any; fragment?: boolean; } /** * div dom element * * @key * @value value of attr */ export interface DomAttrs { key: string; value: string; } /** *graph series configuration * * @label * @color color for current series if undefined then use default color * @exp expression for cal * @type line dot or step * @yIndex left or right * @visibility show or hide from init * @extraConfig use for different type of device */ export interface GraphSeries { label: string; color?: string | undefined; exp: string; type: string; yIndex?: string; visibility?: boolean; extraConfig?: any; } /** *graph collection * * @label * @name * @series lines * @interval use to cal the gap base on data interval * @yLabel label of y * @y2Label label of y2 * @threshold interval changes base on this threshold * @initScale y and y2 init range * @file fill area */ export interface GraphCollection { label: string; name: string; series: Array<GraphSeries>; interval: number; yLabel?: string; y2Label?: string; yKMB?: boolean; threshold?: { min: number; max: number; }; initScales?: { left?: { min: number; max: number; }; right?: { min: number; max: number; }; }; fill?: boolean; markLines?: Array<{ value: number; label: string; color?: string; y?: string; }>; locked?: boolean; show?: boolean; syncParentSelection?: boolean; } /** * type of filter buttons */ export declare enum FilterType { HIGHLIGHT = "highlight", COLORS = "color" } export declare type filterFunc = (labels?: Array<string>) => Array<string>; /** * filter config * @label shown on button or dropdown list * @func callback function * @type filter type button or dropdown list */ export interface FilterConfig { label: string; func: filterFunc; type?: FilterType; } /** * graph configuration * * @features enable or disable features * @entities series entity * @rangeEntity use for range bar * @collection configuration of series * @rangeCollection range bar line configuration (should just put one line here) * @filters button or dropdown list config */ export interface GraphConfig { hideHeader?: boolean | { views: boolean; intervals: boolean; toolbar: boolean; series: boolean; }; features: Features; entities: Array<Entity>; rangeEntity: Entity; collections: Array<GraphCollection>; rangeCollection: GraphCollection; filters?: { "buttons"?: Array<FilterConfig>; "dropdown"?: Array<FilterConfig>; }; } /** *graph callback configuration * * @dataCallback any time the datewindow changed, call this method to send data back to outside * @highlightCallback send one series back to outside on hover the graph * @clickCallback send one series back on click the graph * @dbClickCallback send one series back on dblclick the graph * @syncDateWindow send [start, end] back to outside */ export interface Callbacks { dataCallback?(data: any): void; highlightCallback?(datetime: any, series: any, points: any[]): void; clickCallback?(series: string): void; dbClickCallback?(series: string): void; syncDateWindow?(dateWindow: number[]): void; multiSelectionCallback?(series: Array<string>): void; } /** * View config * * @name view name, will show this name in dropdown list * @graphConfig graph config * @dataService dataservice instance * @show show or hide * @ranges dropdownlist for 7 days 1 month etc * @timezone datetime zone * @initRange init datewindow range * @interaction callbacks * @connectSeparatedPoints connect or disconnect points when series interval are different * @highlightSeriesBackgroundAlpha show or hide background base on the alpha */ export interface ViewConfig { name: string; graphConfig: GraphConfig; dataService: DataHandler; show: boolean; ranges?: Array<{ name: string; value: number; show?: boolean; }>; timezone?: string; initRange?: { start: number; end: number; }; interaction?: { callback?: Callbacks; }; connectSeparatedPoints?: boolean; highlightSeriesBackgroundAlpha?: number; } /** * */ export interface ViewOptions { name?: string; dataService?: DataHandler; connectSeparatedPoints?: boolean; } /** * datetime ranges index * * @export * @enum {number} */ export declare enum GraphConstant { SECONDLY = 0, TWO_SECONDLY = 1, FIVE_SECONDLY = 2, TEN_SECONDLY = 3, THIRTY_SECONDLY = 4, MINUTELY = 5, TWO_MINUTELY = 6, FIVE_MINUTELY = 7, TEN_MINUTELY = 8, THIRTY_MINUTELY = 9, HOURLY = 10, TWO_HOURLY = 11, SIX_HOURLY = 12, DAILY = 13, TWO_DAILY = 14, WEEKLY = 15, MONTHLY = 16, QUARTERLY = 17, BIANNUAL = 18, ANNUAL = 19, DECADAL = 20, CENTENNIAL = 21, NUM_GRANULARITIES = 22 }