@deephaven/chart 0.15.5 → 0.15.6-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chart.d.ts +1 -1
- package/dist/Chart.js +1 -1
- package/dist/Chart.js.map +1 -1
- package/dist/ChartModel.d.ts +3 -3
- package/dist/ChartModel.js +3 -3
- package/dist/ChartModel.js.map +1 -1
- package/package.json +10 -10
package/dist/Chart.d.ts
CHANGED
|
@@ -106,7 +106,7 @@ export declare class Chart extends Component<ChartProps, ChartState> {
|
|
|
106
106
|
* the user is looking at has changed (eg. panning/zooming).
|
|
107
107
|
* Could update each independently, but doing them at the same time keeps the
|
|
108
108
|
* ChartModel API a bit cleaner.
|
|
109
|
-
* @param
|
|
109
|
+
* @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)
|
|
110
110
|
*/
|
|
111
111
|
updateModelDimensions(force?: boolean): void;
|
|
112
112
|
initFormatter(): void;
|
package/dist/Chart.js
CHANGED
|
@@ -421,7 +421,7 @@ export class Chart extends Component {
|
|
|
421
421
|
* the user is looking at has changed (eg. panning/zooming).
|
|
422
422
|
* Could update each independently, but doing them at the same time keeps the
|
|
423
423
|
* ChartModel API a bit cleaner.
|
|
424
|
-
* @param
|
|
424
|
+
* @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)
|
|
425
425
|
*/
|
|
426
426
|
|
|
427
427
|
|
package/dist/Chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Chart.tsx"],"names":["React","Component","deepEqual","memoize","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","Plotly","Plot","ChartModel","ChartUtils","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","downsamplingError","isDownsampleFinished","customButtons","push","name","click","attr","handleDownsampleClick","displaylogo","displayModeBar","modeBarButtons","handleAfterPlot","bind","handleModelEvent","handlePlotUpdate","handleRelayout","handleRestyle","plot","createRef","plotWrapper","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","state","data","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","subscribe","componentDidUpdate","prevProps","settings","updateFormatterSettings","unsubscribe","componentWillUnmount","getPlotRect","current","getBoundingClientRect","model","setState","getData","getLayout","rect","height","debug2","setDownsamplingDisabled","event","type","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","message","onError","Error","debug","figure","ranges","getLayoutRanges","isRangesChanged","changes","hiddenlabels","onSettingsChanged","hiddenSeries","seriesIndexes","Object","keys","includes","reduce","acc","visible","force","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","formatter","setFormatter","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","error","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { WorkspaceSettings } from '@deephaven/redux';\nimport { Layout, Icon } from 'plotly.js';\nimport Plotly from './plotly/Plotly';\nimport Plot from './plotly/Plot';\n\nimport ChartModel from './ChartModel';\nimport ChartUtils from './ChartUtils';\nimport './Chart.scss';\n\nconst log = Log.module('Chart');\n\ntype FormatterSettings = Partial<WorkspaceSettings> & {\n decimalFormatOptions: DecimalColumnFormatterOptions;\n integerFormatOptions: IntegerColumnFormatterOptions;\n};\n\ninterface ChartProps {\n model: ChartModel;\n // These settings come from the redux store\n settings: Partial<WorkspaceSettings>;\n isActive: boolean;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\ninterface ChartModelSettings {\n hiddenSeries: string[];\n}\n\ninterface ChartState {\n data: { name: string; visible: string }[] | null;\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n layout: {\n datarevision: number;\n };\n revision: number;\n}\n\nexport class Chart extends Component<ChartProps, ChartState> {\n static defaultProps = {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n },\n onDisconnect: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon: IconDefinition): Icon {\n const [width, , , , path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n const stringPath = `${path}`;\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: `matrix(1, 0, 0, 1, 0, 0)`,\n };\n }\n\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleRestyle = this.handleRestyle.bind(this);\n\n this.plot = React.createRef();\n this.plotWrapper = React.createRef();\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n layout: {\n datarevision: 0,\n },\n revision: 0,\n };\n }\n\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive } = this.props;\n if (isActive) {\n this.subscribe();\n }\n }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.unsubscribe();\n }\n\n currentSeries: number;\n\n plot: RefObject<typeof Plot>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n getCachedConfig = memoize(\n (\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled\n ) => {\n const customButtons = [];\n if (downsamplingError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n click: () => undefined,\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n downsamplingError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr,\n });\n }\n\n return {\n displaylogo: false,\n\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n isDownsampleInProgress || downsamplingError ? true : 'hover',\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'],\n ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n const { layout } = this.state;\n this.setState({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n });\n }\n\n subscribe(): void {\n if (this.isSubscribed) {\n return;\n }\n\n const { model } = this.props;\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n\n unsubscribe(): void {\n if (!this.isSubscribed) {\n return;\n }\n\n const { model } = this.props;\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\n if (this.plot.current) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = state;\n layout.datarevision += 1;\n return {\n data: detail,\n layout,\n revision: revision + 1,\n };\n });\n\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED: {\n const downsamplingError = detail.message ? detail.message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new Error(downsamplingError));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: { layout: Layout }): void {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: [\n Record<string, unknown>,\n number[]\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = data.reduce(\n (acc: string[], { name, visible }) =>\n visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param {boolean} force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe();\n }\n }\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n }\n\n updateFormatterSettings(\n settings: Partial<WorkspaceSettings> & {\n decimalFormatOptions: DecimalColumnFormatterOptions;\n integerFormatOptions: IntegerColumnFormatterOptions;\n }\n ): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n\n updateFormatter(): void {\n const formatter = new Formatter(\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n\n const { model } = this.props;\n model.setFormatter(formatter);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n Plotly.relayout(this.plot.current.el, { autosize: true }).catch(\n (e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n }\n );\n }\n }\n\n render(): ReactElement {\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const isPlotShown = data != null;\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapper}>\n {isPlotShown && (\n <Plot\n ref={this.plot}\n data={data}\n layout={layout}\n revision={revision}\n config={config}\n onAfterPlot={this.handleAfterPlot}\n onError={log.error}\n onRelayout={this.handleRelayout}\n onUpdate={this.handlePlotUpdate}\n onRestyle={this.handleRestyle}\n useResizeHandler\n style={{ height: '100%', width: '100%' }}\n />\n )}\n </div>\n );\n }\n}\n\nexport default Chart;\n"],"file":"Chart.js"}
|
|
1
|
+
{"version":3,"sources":["../src/Chart.tsx"],"names":["React","Component","deepEqual","memoize","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","Plotly","Plot","ChartModel","ChartUtils","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","downsamplingError","isDownsampleFinished","customButtons","push","name","click","attr","handleDownsampleClick","displaylogo","displayModeBar","modeBarButtons","handleAfterPlot","bind","handleModelEvent","handlePlotUpdate","handleRelayout","handleRestyle","plot","createRef","plotWrapper","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","state","data","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","subscribe","componentDidUpdate","prevProps","settings","updateFormatterSettings","unsubscribe","componentWillUnmount","getPlotRect","current","getBoundingClientRect","model","setState","getData","getLayout","rect","height","debug2","setDownsamplingDisabled","event","type","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","message","onError","Error","debug","figure","ranges","getLayoutRanges","isRangesChanged","changes","hiddenlabels","onSettingsChanged","hiddenSeries","seriesIndexes","Object","keys","includes","reduce","acc","visible","force","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","formatter","setFormatter","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","error","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { WorkspaceSettings } from '@deephaven/redux';\nimport { Layout, Icon } from 'plotly.js';\nimport Plotly from './plotly/Plotly';\nimport Plot from './plotly/Plot';\n\nimport ChartModel from './ChartModel';\nimport ChartUtils from './ChartUtils';\nimport './Chart.scss';\n\nconst log = Log.module('Chart');\n\ntype FormatterSettings = Partial<WorkspaceSettings> & {\n decimalFormatOptions: DecimalColumnFormatterOptions;\n integerFormatOptions: IntegerColumnFormatterOptions;\n};\n\ninterface ChartProps {\n model: ChartModel;\n // These settings come from the redux store\n settings: Partial<WorkspaceSettings>;\n isActive: boolean;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\ninterface ChartModelSettings {\n hiddenSeries: string[];\n}\n\ninterface ChartState {\n data: { name: string; visible: string }[] | null;\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n layout: {\n datarevision: number;\n };\n revision: number;\n}\n\nexport class Chart extends Component<ChartProps, ChartState> {\n static defaultProps = {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n },\n onDisconnect: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon: IconDefinition): Icon {\n const [width, , , , path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n const stringPath = `${path}`;\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: `matrix(1, 0, 0, 1, 0, 0)`,\n };\n }\n\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleRestyle = this.handleRestyle.bind(this);\n\n this.plot = React.createRef();\n this.plotWrapper = React.createRef();\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n layout: {\n datarevision: 0,\n },\n revision: 0,\n };\n }\n\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive } = this.props;\n if (isActive) {\n this.subscribe();\n }\n }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.unsubscribe();\n }\n\n currentSeries: number;\n\n plot: RefObject<typeof Plot>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n getCachedConfig = memoize(\n (\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled\n ) => {\n const customButtons = [];\n if (downsamplingError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n click: () => undefined,\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n downsamplingError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr,\n });\n }\n\n return {\n displaylogo: false,\n\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n isDownsampleInProgress || downsamplingError ? true : 'hover',\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'],\n ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n const { layout } = this.state;\n this.setState({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n });\n }\n\n subscribe(): void {\n if (this.isSubscribed) {\n return;\n }\n\n const { model } = this.props;\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n\n unsubscribe(): void {\n if (!this.isSubscribed) {\n return;\n }\n\n const { model } = this.props;\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\n if (this.plot.current) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = state;\n layout.datarevision += 1;\n return {\n data: detail,\n layout,\n revision: revision + 1,\n };\n });\n\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED: {\n const downsamplingError = detail.message ? detail.message : detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new Error(downsamplingError));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: { layout: Layout }): void {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: [\n Record<string, unknown>,\n number[]\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = data.reduce(\n (acc: string[], { name, visible }) =>\n visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe();\n }\n }\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\n }\n\n updateFormatterSettings(\n settings: Partial<WorkspaceSettings> & {\n decimalFormatOptions: DecimalColumnFormatterOptions;\n integerFormatOptions: IntegerColumnFormatterOptions;\n }\n ): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(\n settings\n );\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n }\n\n updateFormatter(): void {\n const formatter = new Formatter(\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n\n const { model } = this.props;\n model.setFormatter(formatter);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n Plotly.relayout(this.plot.current.el, { autosize: true }).catch(\n (e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n }\n );\n }\n }\n\n render(): ReactElement {\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const isPlotShown = data != null;\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapper}>\n {isPlotShown && (\n <Plot\n ref={this.plot}\n data={data}\n layout={layout}\n revision={revision}\n config={config}\n onAfterPlot={this.handleAfterPlot}\n onError={log.error}\n onRelayout={this.handleRelayout}\n onUpdate={this.handlePlotUpdate}\n onRestyle={this.handleRestyle}\n useResizeHandler\n style={{ height: '100%', width: '100%' }}\n />\n )}\n </div>\n );\n }\n}\n\nexport default Chart;\n"],"file":"Chart.js"}
|
package/dist/ChartModel.d.ts
CHANGED
|
@@ -41,18 +41,18 @@ declare class ChartModel {
|
|
|
41
41
|
setFormatter(formatter: Formatter): void;
|
|
42
42
|
/**
|
|
43
43
|
* Disable downsampling
|
|
44
|
-
* @param
|
|
44
|
+
* @param isDownsamplingDisabled True if downsampling should be disabled
|
|
45
45
|
*/
|
|
46
46
|
setDownsamplingDisabled(isDownsamplingDisabled: boolean): void;
|
|
47
47
|
/**
|
|
48
48
|
* Set the dimensions of the plot. May be needed to evaluate some of the percents
|
|
49
|
-
* @param
|
|
49
|
+
* @param rect The bounding rectangle of the plot
|
|
50
50
|
*/
|
|
51
51
|
setDimensions(rect: DOMRect): void;
|
|
52
52
|
setTitle(title: string): void;
|
|
53
53
|
/**
|
|
54
54
|
* Subscribe to this ChartModel and start listening for all events.
|
|
55
|
-
* @param
|
|
55
|
+
* @param callback Callback when an event occurs
|
|
56
56
|
*/
|
|
57
57
|
subscribe(callback: (event: ChartEvent) => void): void;
|
|
58
58
|
unsubscribe(callback: (event: ChartEvent) => void): void;
|
package/dist/ChartModel.js
CHANGED
|
@@ -65,7 +65,7 @@ class ChartModel {
|
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Disable downsampling
|
|
68
|
-
* @param
|
|
68
|
+
* @param isDownsamplingDisabled True if downsampling should be disabled
|
|
69
69
|
*/
|
|
70
70
|
|
|
71
71
|
|
|
@@ -74,7 +74,7 @@ class ChartModel {
|
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Set the dimensions of the plot. May be needed to evaluate some of the percents
|
|
77
|
-
* @param
|
|
77
|
+
* @param rect The bounding rectangle of the plot
|
|
78
78
|
*/
|
|
79
79
|
|
|
80
80
|
|
|
@@ -87,7 +87,7 @@ class ChartModel {
|
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Subscribe to this ChartModel and start listening for all events.
|
|
90
|
-
* @param
|
|
90
|
+
* @param callback Callback when an event occurs
|
|
91
91
|
*/
|
|
92
92
|
|
|
93
93
|
|
package/dist/ChartModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ChartModel.ts"],"names":["ChartModel","constructor","listeners","isDownsamplingDisabled","getData","getDefaultTitle","getLayout","getFilterColumnMap","Map","isFilterRequired","setFilter","filter","close","setFormatter","formatter","setDownsamplingDisabled","setDimensions","rect","setTitle","title","subscribe","callback","push","unsubscribe","listener","fireEvent","event","i","length","fireUpdate","data","CustomEvent","EVENT_UPDATED","detail","fireDisconnect","EVENT_DISCONNECT","fireReconnect","EVENT_RECONNECT","fireDownsampleStart","EVENT_DOWNSAMPLESTARTED","fireDownsampleFinish","EVENT_DOWNSAMPLEFINISHED","fireDownsampleFail","EVENT_DOWNSAMPLEFAILED","fireDownsampleNeeded","EVENT_DOWNSAMPLENEEDED","fireLoadFinished","EVENT_LOADFINISHED"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\nimport { Column } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\n\ntype ChartEvent = CustomEvent;\n/**\n * Model for a Chart\n * All of these methods should return very quickly.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the chart to refresh.\n */\nclass ChartModel {\n static EVENT_UPDATED = 'ChartModel.EVENT_UPDATED';\n\n static EVENT_DISCONNECT = 'ChartModel.EVENT_DISCONNECT';\n\n static EVENT_RECONNECT = 'ChartModel.EVENT_RECONNECT';\n\n static EVENT_DOWNSAMPLESTARTED = 'ChartModel.EVENT_DOWNSAMPLESTARTED';\n\n static EVENT_DOWNSAMPLEFINISHED = 'ChartModel.EVENT_DOWNSAMPLEFINISHED';\n\n static EVENT_DOWNSAMPLEFAILED = 'ChartModel.EVENT_DOWNSAMPLEFAILED';\n\n static EVENT_DOWNSAMPLENEEDED = 'ChartModel.EVENT_DOWNSAMPLENEEDED';\n\n static EVENT_LOADFINISHED = 'ChartModel.EVENT_LOADFINISHED';\n\n constructor() {\n this.listeners = [];\n this.isDownsamplingDisabled = false;\n }\n\n listeners: ((event: ChartEvent) => void)[];\n\n formatter?: Formatter;\n\n rect?: DOMRect;\n\n isDownsamplingDisabled: boolean;\n\n title?: string;\n\n getData(): { name: string; visible: string }[] {\n return [];\n }\n\n getDefaultTitle(): string {\n return '';\n }\n\n getLayout(): Record<string, unknown> {\n return {};\n }\n\n getFilterColumnMap(): Map<string, Column> {\n return new Map();\n }\n\n isFilterRequired(): boolean {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setFilter(filter: Map<string, string>): void {}\n\n /**\n * Close this model, clean up any underlying subscriptions\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n close(): void {}\n\n /**\n * Set the formatter to use when charting the data.\n * @param formatter The formatter to use to format the charting data\n */\n setFormatter(formatter: Formatter): void {\n this.formatter = formatter;\n }\n\n /**\n * Disable downsampling\n * @param
|
|
1
|
+
{"version":3,"sources":["../src/ChartModel.ts"],"names":["ChartModel","constructor","listeners","isDownsamplingDisabled","getData","getDefaultTitle","getLayout","getFilterColumnMap","Map","isFilterRequired","setFilter","filter","close","setFormatter","formatter","setDownsamplingDisabled","setDimensions","rect","setTitle","title","subscribe","callback","push","unsubscribe","listener","fireEvent","event","i","length","fireUpdate","data","CustomEvent","EVENT_UPDATED","detail","fireDisconnect","EVENT_DISCONNECT","fireReconnect","EVENT_RECONNECT","fireDownsampleStart","EVENT_DOWNSAMPLESTARTED","fireDownsampleFinish","EVENT_DOWNSAMPLEFINISHED","fireDownsampleFail","EVENT_DOWNSAMPLEFAILED","fireDownsampleNeeded","EVENT_DOWNSAMPLENEEDED","fireLoadFinished","EVENT_LOADFINISHED"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\nimport { Column } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\n\ntype ChartEvent = CustomEvent;\n/**\n * Model for a Chart\n * All of these methods should return very quickly.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the chart to refresh.\n */\nclass ChartModel {\n static EVENT_UPDATED = 'ChartModel.EVENT_UPDATED';\n\n static EVENT_DISCONNECT = 'ChartModel.EVENT_DISCONNECT';\n\n static EVENT_RECONNECT = 'ChartModel.EVENT_RECONNECT';\n\n static EVENT_DOWNSAMPLESTARTED = 'ChartModel.EVENT_DOWNSAMPLESTARTED';\n\n static EVENT_DOWNSAMPLEFINISHED = 'ChartModel.EVENT_DOWNSAMPLEFINISHED';\n\n static EVENT_DOWNSAMPLEFAILED = 'ChartModel.EVENT_DOWNSAMPLEFAILED';\n\n static EVENT_DOWNSAMPLENEEDED = 'ChartModel.EVENT_DOWNSAMPLENEEDED';\n\n static EVENT_LOADFINISHED = 'ChartModel.EVENT_LOADFINISHED';\n\n constructor() {\n this.listeners = [];\n this.isDownsamplingDisabled = false;\n }\n\n listeners: ((event: ChartEvent) => void)[];\n\n formatter?: Formatter;\n\n rect?: DOMRect;\n\n isDownsamplingDisabled: boolean;\n\n title?: string;\n\n getData(): { name: string; visible: string }[] {\n return [];\n }\n\n getDefaultTitle(): string {\n return '';\n }\n\n getLayout(): Record<string, unknown> {\n return {};\n }\n\n getFilterColumnMap(): Map<string, Column> {\n return new Map();\n }\n\n isFilterRequired(): boolean {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setFilter(filter: Map<string, string>): void {}\n\n /**\n * Close this model, clean up any underlying subscriptions\n */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n close(): void {}\n\n /**\n * Set the formatter to use when charting the data.\n * @param formatter The formatter to use to format the charting data\n */\n setFormatter(formatter: Formatter): void {\n this.formatter = formatter;\n }\n\n /**\n * Disable downsampling\n * @param isDownsamplingDisabled True if downsampling should be disabled\n */\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n this.isDownsamplingDisabled = isDownsamplingDisabled;\n }\n\n /**\n * Set the dimensions of the plot. May be needed to evaluate some of the percents\n * @param rect The bounding rectangle of the plot\n */\n setDimensions(rect: DOMRect): void {\n this.rect = rect;\n }\n\n setTitle(title: string): void {\n this.title = title;\n }\n\n /**\n * Subscribe to this ChartModel and start listening for all events.\n * @param callback Callback when an event occurs\n */\n subscribe(callback: (event: ChartEvent) => void): void {\n this.listeners.push(callback);\n }\n\n unsubscribe(callback: (event: ChartEvent) => void): void {\n this.listeners = this.listeners.filter(listener => listener !== callback);\n }\n\n fireEvent(event: ChartEvent): void {\n for (let i = 0; i < this.listeners.length; i += 1) {\n this.listeners[i](event);\n }\n }\n\n fireUpdate(data: unknown): void {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_UPDATED, { detail: data }));\n }\n\n fireDisconnect(): void {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_DISCONNECT));\n }\n\n fireReconnect(): void {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_RECONNECT));\n }\n\n fireDownsampleStart(detail: unknown): void {\n this.fireEvent(\n new CustomEvent(ChartModel.EVENT_DOWNSAMPLESTARTED, { detail })\n );\n }\n\n fireDownsampleFinish(detail: unknown): void {\n this.fireEvent(\n new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFINISHED, { detail })\n );\n }\n\n fireDownsampleFail(detail: unknown): void {\n this.fireEvent(\n new CustomEvent(ChartModel.EVENT_DOWNSAMPLEFAILED, { detail })\n );\n }\n\n fireDownsampleNeeded(detail: unknown): void {\n this.fireEvent(\n new CustomEvent(ChartModel.EVENT_DOWNSAMPLENEEDED, { detail })\n );\n }\n\n fireLoadFinished(): void {\n this.fireEvent(new CustomEvent(ChartModel.EVENT_LOADFINISHED));\n }\n}\n\nexport default ChartModel;\n"],"file":"ChartModel.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/chart",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.6-beta.0+743f253",
|
|
4
4
|
"description": "Deephaven Chart",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/icons": "^0.15.0",
|
|
34
|
-
"@deephaven/jsapi-shim": "^0.15.
|
|
35
|
-
"@deephaven/jsapi-utils": "^0.15.
|
|
36
|
-
"@deephaven/log": "^0.15.
|
|
37
|
-
"@deephaven/redux": "^0.15.
|
|
38
|
-
"@deephaven/utils": "^0.15.0",
|
|
33
|
+
"@deephaven/icons": "^0.15.6-beta.0+743f253",
|
|
34
|
+
"@deephaven/jsapi-shim": "^0.15.6-beta.0+743f253",
|
|
35
|
+
"@deephaven/jsapi-utils": "^0.15.6-beta.0+743f253",
|
|
36
|
+
"@deephaven/log": "^0.15.6-beta.0+743f253",
|
|
37
|
+
"@deephaven/redux": "^0.15.6-beta.0+743f253",
|
|
38
|
+
"@deephaven/utils": "^0.15.6-beta.0+743f253",
|
|
39
39
|
"@fortawesome/fontawesome-common-types": "^6.1.2",
|
|
40
40
|
"deep-equal": "^2.0.5",
|
|
41
41
|
"lodash.debounce": "^4.0.8",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"react": "^17.x"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@deephaven/mocks": "^0.15.0",
|
|
54
|
-
"@deephaven/tsconfig": "^0.15.
|
|
53
|
+
"@deephaven/mocks": "^0.15.6-beta.0+743f253",
|
|
54
|
+
"@deephaven/tsconfig": "^0.15.6-beta.0+743f253",
|
|
55
55
|
"@types/plotly.js": "^2.12.2"
|
|
56
56
|
},
|
|
57
57
|
"files": [
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "743f253dd40b4f0dcca921ecf4f578d64202cd53"
|
|
67
67
|
}
|