@deephaven/chart 0.57.2-beta.0 → 0.58.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.
@@ -42,7 +42,7 @@ class FigureChartModel extends ChartModel {
42
42
  _defineProperty(this, "isConnected", void 0);
43
43
  _defineProperty(this, "seriesToProcess", void 0);
44
44
  _defineProperty(this, "addPendingSeries", debounce(() => {
45
- var axes = ChartUtils.getAllAxes(this.figure);
45
+ var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);
46
46
  var {
47
47
  pendingSeries
48
48
  } = this;
@@ -50,7 +50,7 @@ class FigureChartModel extends ChartModel {
50
50
  var _chart$showLegend;
51
51
  var series = pendingSeries[i];
52
52
  var chart = _this.figure.charts.find(c => c.series.includes(series));
53
- _this.addSeries(series, axes, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);
53
+ _this.addSeries(series, axisTypeMap, (_chart$showLegend = chart === null || chart === void 0 ? void 0 : chart.showLegend) !== null && _chart$showLegend !== void 0 ? _chart$showLegend : null);
54
54
  series.subscribe();
55
55
  // We'll get an update with the data after subscribing
56
56
  };
@@ -138,27 +138,67 @@ class FigureChartModel extends ChartModel {
138
138
  this.stopListeningFigure();
139
139
  }
140
140
  getDefaultTitle() {
141
- if (this.figure.charts.length > 0) {
142
- var chart = this.figure.charts[0];
143
- return chart.title;
141
+ if (this.figure.title != null && this.figure.title.length > 0) {
142
+ return this.figure.title;
143
+ }
144
+ if (this.figure.charts.length === 1) {
145
+ var _this$figure$charts$;
146
+ return (_this$figure$charts$ = this.figure.charts[0].title) !== null && _this$figure$charts$ !== void 0 ? _this$figure$charts$ : '';
144
147
  }
145
148
  return '';
146
149
  }
147
150
  initAllSeries() {
151
+ var _this2 = this;
148
152
  this.oneClicks = [];
149
153
  this.filterColumnMap.clear();
150
154
  var {
151
155
  charts
152
156
  } = this.figure;
153
- var axes = ChartUtils.getAllAxes(this.figure);
157
+ var axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);
154
158
  var activeSeriesNames = [];
155
- for (var i = 0; i < charts.length; i += 1) {
159
+ var _loop2 = function _loop2() {
156
160
  var chart = charts[i];
157
161
  for (var j = 0; j < chart.series.length; j += 1) {
158
162
  var series = chart.series[j];
159
163
  activeSeriesNames.push(series.name);
160
- this.addSeries(series, axes, chart.showLegend);
164
+ _this2.addSeries(series, axisTypeMap, chart.showLegend);
165
+ }
166
+
167
+ // Need to add the chart titles as annotations if they are set
168
+ var {
169
+ axes,
170
+ title
171
+ } = chart;
172
+ if (title != null && title.length > 0 && (charts.length > 1 || _this2.figure.title != null)) {
173
+ var xAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.X);
174
+ var yAxis = axes.find(axis => axis.type === _this2.dh.plot.AxisType.Y);
175
+ if (xAxis == null || yAxis == null) {
176
+ log.warn('Chart title provided, but unknown how to map to the correct axes for this chart type', chart);
177
+ } else {
178
+ var _axisTypeMap$get$find, _axisTypeMap$get, _axisTypeMap$get$find2, _axisTypeMap$get2;
179
+ var xAxisIndex = ((_axisTypeMap$get$find = (_axisTypeMap$get = axisTypeMap.get(xAxis.type)) === null || _axisTypeMap$get === void 0 ? void 0 : _axisTypeMap$get.findIndex(a => a === xAxis)) !== null && _axisTypeMap$get$find !== void 0 ? _axisTypeMap$get$find : 0) + 1;
180
+ var yAxisIndex = ((_axisTypeMap$get$find2 = (_axisTypeMap$get2 = axisTypeMap.get(yAxis.type)) === null || _axisTypeMap$get2 === void 0 ? void 0 : _axisTypeMap$get2.findIndex(a => a === yAxis)) !== null && _axisTypeMap$get$find2 !== void 0 ? _axisTypeMap$get$find2 : 0) + 1;
181
+ var annotation = {
182
+ align: 'center',
183
+ x: 0.5,
184
+ y: 1,
185
+ yshift: 17,
186
+ text: title,
187
+ showarrow: false,
188
+ // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the "domain" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref
189
+ xref: "x".concat(xAxisIndex, " domain"),
190
+ yref: "y".concat(yAxisIndex, " domain")
191
+ };
192
+ if (_this2.layout.annotations == null) {
193
+ _this2.layout.annotations = [annotation];
194
+ } else {
195
+ _this2.layout.annotations.push(annotation);
196
+ }
197
+ }
161
198
  }
199
+ };
200
+ for (var i = 0; i < charts.length; i += 1) {
201
+ _loop2();
162
202
  }
163
203
 
164
204
  // Remove any series that no longer exist
@@ -174,14 +214,13 @@ class FigureChartModel extends ChartModel {
174
214
  /**
175
215
  * Add a series to the model
176
216
  * @param series Series object to add
177
- * @param axes All the axis in this figure
217
+ * @param axisTypeMap Map of axis type to the axes in this Figure
178
218
  * @param showLegend Whether this series should show the legend or not
179
219
  */
180
- addSeries(series, axes, showLegend) {
220
+ addSeries(series, axisTypeMap, showLegend) {
181
221
  var {
182
222
  dh
183
223
  } = this;
184
- var axisTypeMap = ChartUtils.groupArray(axes, 'type');
185
224
  var seriesData = this.chartUtils.makeSeriesDataFromSeries(series, axisTypeMap, ChartUtils.getSeriesVisibility(series.name, this.settings), this.theme, showLegend);
186
225
  this.seriesDataMap.set(series.name, seriesData);
187
226
  this.data = [...this.seriesDataMap.values()];
@@ -543,28 +582,28 @@ class FigureChartModel extends ChartModel {
543
582
  * @param filterMap Map of filter column names to values
544
583
  */
545
584
  setFilter(filterMap) {
546
- var _this2 = this;
585
+ var _this3 = this;
547
586
  if (this.oneClicks.length === 0) {
548
587
  log.warn('Trying to set a filter, but no one click!');
549
588
  return;
550
589
  }
551
590
  log.debug('setFilter', filterMap);
552
- var _loop2 = function _loop2() {
553
- var oneClick = _this2.oneClicks[i];
591
+ var _loop3 = function _loop3() {
592
+ var oneClick = _this3.oneClicks[i];
554
593
  var {
555
594
  columns
556
595
  } = oneClick;
557
596
  // Need to get all the keys in case a filter was removed
558
- var keys = new Set([...filterMap.keys(), ..._this2.lastFilter.keys()]);
597
+ var keys = new Set([...filterMap.keys(), ..._this3.lastFilter.keys()]);
559
598
  keys.forEach(key => {
560
599
  var value = filterMap.get(key);
561
- if (_this2.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {
600
+ if (_this3.lastFilter.get(key) !== value && columns.find(column => column.name === key) != null) {
562
601
  oneClick.setValueForColumn(key, value);
563
602
  }
564
603
  });
565
604
  };
566
605
  for (var i = 0; i < this.oneClicks.length; i += 1) {
567
- _loop2();
606
+ _loop3();
568
607
  }
569
608
  this.lastFilter = new Map(filterMap);
570
609
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","Log","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","dh","figure","theme","_this","settings","arguments","length","undefined","this","_defineProperty","axes","getAllAxes","pendingSeries","_loop","_chart$showLegend","series","i","chart","charts","find","c","includes","addSeries","showLegend","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","timeZone","getTimeZone","value","chartUtils","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","template","layout","makeDefaultLayout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","title","clear","activeSeriesNames","j","push","name","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","axisTypeMap","groupArray","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","errors","error","fireError","addEventListener","Figure","EVENT_UPDATED","EVENT_SERIES_ADDED","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLEFAILED","EVENT_DOWNSAMPLENEEDED","Client","EVENT_REQUEST_FAILED","removeEventListener","event","fireDownsampleStart","detail","fireDownsampleFinish","fireDownsampleFail","info","fireDownsampleNeeded","figureUpdateEvent","seriesArray","debug2","sources","type","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","cleanSeries","size","fireLoadFinished","fireUpdate","concat","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","_match$length","_match","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","_objectSpread","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","width","Math","max","l","r","getPlotHeight","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","get","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","ERROR_BAR","BAR","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","requireAllFiltersToDisplay","setFilter","filterMap","_this2","warn","_loop2","key","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport type {\n Axis,\n Chart,\n dh as DhType,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport type { Layout, Data, PlotData } from 'plotly.js';\nimport type {\n DateTimeColumnFormatter,\n Formatter,\n} from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent } from './ChartModel';\nimport ChartUtils, {\n AxisTypeMap,\n ChartModelSettings,\n FilterColumnMap,\n FilterMap,\n} from './ChartUtils';\nimport { ChartTheme } from './ChartTheme';\n\nconst log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n static ADD_SERIES_DEBOUNCE = 50;\n\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param theme The theme for the figure\n * @param settings Chart settings\n */\n constructor(\n dh: DhType,\n figure: Figure,\n theme: ChartTheme,\n settings: Partial<ChartModelSettings> = {}\n ) {\n super(dh);\n\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n const template = {\n data: {},\n layout: this.chartUtils.makeDefaultLayout(theme),\n };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\n template,\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n chartUtils: ChartUtils;\n\n dh: DhType;\n\n figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: ChartTheme;\n\n data: Partial<Data>[];\n\n layout: Partial<Layout>;\n\n seriesDataMap: Map<\n string,\n Partial<PlotData> & {\n xLow?: number[];\n xHigh?: number[];\n yLow?: number[];\n yHigh?: number[];\n }\n >;\n\n pendingSeries: Series[];\n\n oneClicks: OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: FilterMap;\n\n isConnected: boolean; // Assume figure is connected to start\n\n seriesToProcess;\n\n close(): void {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle(): string {\n if (this.figure.charts.length > 0) {\n const chart = this.figure.charts[0];\n return chart.title;\n }\n\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axes = ChartUtils.getAllAxes(this.figure);\n const activeSeriesNames: string[] = [];\n for (let i = 0; i < charts.length; i += 1) {\n const chart = charts[i];\n\n for (let j = 0; j < chart.series.length; j += 1) {\n const series = chart.series[j];\n activeSeriesNames.push(series.name);\n this.addSeries(series, axes, chart.showLegend);\n }\n }\n\n // Remove any series that no longer exist\n const allSeriesNames = [...this.seriesDataMap.keys()];\n const inactiveSeriesNames = allSeriesNames.filter(\n seriesName => activeSeriesNames.indexOf(seriesName) < 0\n );\n for (let i = 0; i < inactiveSeriesNames.length; i += 1) {\n const seriesName = inactiveSeriesNames[i];\n this.seriesDataMap.delete(seriesName);\n }\n this.seriesToProcess = new Set([...this.seriesDataMap.keys()]);\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axes All the axis in this figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(series: Series, axes: Axis[], showLegend: boolean | null): void {\n const { dh } = this;\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(axes, 'type');\n\n const seriesData = this.chartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme,\n showLegend\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n\n this.data = [...this.seriesDataMap.values()];\n\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE\n ? showLegend ?? undefined\n : false;\n\n if (series.oneClick != null) {\n const { oneClick } = series;\n const { columns } = oneClick;\n for (let i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n\n this.oneClicks.push(oneClick);\n }\n\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n addPendingSeries = debounce(() => {\n const axes = ChartUtils.getAllAxes(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n const chart = this.figure.charts.find(c => c.series.includes(series));\n this.addSeries(series, axes, chart?.showLegend ?? null);\n\n series.subscribe();\n // We'll get an update with the data after subscribing\n }\n\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE);\n\n subscribe(callback: (event: ChartEvent) => void): void {\n super.subscribe(callback);\n\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n\n unsubscribe(callback: (event: ChartEvent) => void): void {\n super.unsubscribe(callback);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure(): void {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n\n this.figure.subscribe(\n this.isDownsamplingDisabled\n ? this.dh.plot.DownsampleOptions.DISABLE\n : this.dh.plot.DownsampleOptions.DEFAULT\n );\n\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n const { dh } = this;\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListeningFigure(): void {\n const { dh } = this;\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n getTimeZone = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return (dataFormatter as DateTimeColumnFormatter).dhTimeZone;\n }\n }\n return undefined;\n }\n );\n\n getValueTranslator = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => this.chartUtils.unwrapValue(value, timeZone);\n }\n );\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n this.chartUtils.wrapValue(value, columnType, timeZone);\n }\n );\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize(\n (columnType: string, formatter?: Formatter) => (range: Range) => {\n let [rangeStart, rangeEnd]: [unknown, unknown] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: Chart, formatter?: Formatter) => (axis: Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n }\n );\n\n handleDownsampleStart(event: ChartEvent): void {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event: ChartEvent): void {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event: ChartEvent): void {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event: ChartEvent): void {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event: ChartEvent): void {\n const { detail: figureUpdateEvent } = event;\n const { series: seriesArray } = figureUpdateEvent;\n\n log.debug2('handleFigureUpdated', seriesArray);\n\n for (let i = 0; i < seriesArray.length; i += 1) {\n const series = seriesArray[i];\n\n log.debug2('handleFigureUpdated updating series', series.name);\n\n const { sources } = series;\n for (let j = 0; j < sources.length; j += 1) {\n const source = sources[j];\n const { columnType, type } = source;\n const valueTranslator = this.getValueTranslator(\n columnType,\n this.formatter\n );\n const dataArray = figureUpdateEvent.getArray(\n series,\n type,\n valueTranslator\n );\n this.setDataArrayForSeries(series, type, dataArray);\n }\n\n this.seriesToProcess.delete(series.name);\n\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n this.fireError([`${event.detail}`]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe(): void {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter: Formatter): void {\n super.setFormatter(formatter);\n\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: CustomEvent): void {\n log.debug('Figure disconnected', event);\n\n this.isConnected = false;\n\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n\n this.fireDisconnect();\n }\n\n handleFigureReconnected(event: CustomEvent): void {\n log.debug('Figure reconnected', event);\n\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n\n this.fireReconnect();\n\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n handleFigureSeriesAdded(event: { detail: Series }): void {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n\n setDimensions(rect: DOMRect): void {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title: string): void {\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n const subtitleCount = (title ?? '').match(/<br>/g)?.length ?? 0;\n const margin =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = { t: margin };\n }\n\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = { ...this.layout.title };\n this.layout.title.text = title;\n this.layout.title.pad = { ...this.layout.title.pad };\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n\n getPlotWidth(): number {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width -\n (this.layout.margin?.l ?? 0) -\n (this.layout.margin?.r ?? 0),\n 0\n );\n }\n\n getPlotHeight(): number {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height -\n (this.layout.margin?.t ?? 0) -\n (this.layout.margin?.b ?? 0),\n 0\n );\n }\n\n updateAxisPositions(): void {\n const plotWidth = this.getPlotWidth();\n const plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n this.theme,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight\n );\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats(): void {\n if (!this.formatter) {\n return;\n }\n\n const axisFormats = this.chartUtils.getAxisFormats(\n this.figure,\n this.formatter\n );\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\n `Assigning ${axisLayoutProperty}`,\n this.layout[axisLayoutProperty],\n axisFormat\n );\n\n const props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(`Ignoring null layout.${axisLayoutProperty}`);\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(\n series: Series,\n sourceType: SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series: Series): void {\n const { dh } = this;\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n const { xLow, xHigh } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n const width = [];\n for (let i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (\n plotStyle === dh.plot.SeriesPlotStyle.LINE ||\n plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR ||\n plotStyle === dh.plot.SeriesPlotStyle.BAR\n ) {\n const { x, xLow, xHigh, y, yLow, yHigh } = seriesData;\n if (xLow && xHigh && xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(\n x as number[],\n xLow,\n xHigh,\n this.theme\n );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh,\n this.theme\n );\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n const { ids, labels } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n\n getData(): Partial<Data>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): FilterColumnMap {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired(): boolean {\n return (\n this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) !=\n null\n );\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap: FilterMap): void {\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n\n log.debug('setFilter', filterMap);\n\n for (let i = 0; i < this.oneClicks.length; i += 1) {\n const oneClick = this.oneClicks[i];\n const { columns } = oneClick;\n // Need to get all the keys in case a filter was removed\n const keys = new Set([...filterMap.keys(), ...this.lastFilter.keys()]);\n keys.forEach(key => {\n const value = filterMap.get(key);\n if (\n this.lastFilter.get(key) !== value &&\n columns.find(column => column.name === key) != null\n ) {\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: Figure): void {\n this.close();\n\n this.figure = figure;\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n updateSettings(settings: Partial<ChartModelSettings>): void {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","Log","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","dh","figure","theme","_this","settings","arguments","length","undefined","this","_defineProperty","axisTypeMap","getAxisTypeMap","pendingSeries","_loop","_chart$showLegend","series","i","chart","charts","find","c","includes","addSeries","showLegend","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","timeZone","getTimeZone","value","chartUtils","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","template","layout","makeDefaultLayout","grid","rows","columns","cols","pattern","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","title","_this$figure$charts$","_this2","clear","activeSeriesNames","_loop2","j","push","name","axes","xAxis","type","plot","AxisType","X","yAxis","Y","warn","_axisTypeMap$get$find","_axisTypeMap$get","_axisTypeMap$get$find2","_axisTypeMap$get2","xAxisIndex","get","findIndex","a","yAxisIndex","annotation","align","x","y","yshift","text","showarrow","xref","concat","yref","annotations","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","errors","error","fireError","addEventListener","Figure","EVENT_UPDATED","EVENT_SERIES_ADDED","EVENT_DISCONNECT","EVENT_RECONNECT","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLEFAILED","EVENT_DOWNSAMPLENEEDED","Client","EVENT_REQUEST_FAILED","removeEventListener","event","fireDownsampleStart","detail","fireDownsampleFinish","fireDownsampleFail","info","fireDownsampleNeeded","figureUpdateEvent","seriesArray","debug2","sources","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","cleanSeries","size","fireLoadFinished","fireUpdate","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","_match$length","_match","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","_objectSpread","pad","DEFAULT_TITLE_PADDING","getPlotWidth","_this$layout$margin$l","_this$layout$margin","_this$layout$margin$r","_this$layout$margin2","width","Math","max","l","r","getPlotHeight","_this$layout$margin$t","_this$layout$margin3","_this$layout$margin$b","_this$layout$margin4","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","ERROR_BAR","BAR","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","requireAllFiltersToDisplay","setFilter","filterMap","_this3","_loop3","key","column","setValueForColumn","setFigure","updateSettings"],"sources":["../src/FigureChartModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport set from 'lodash.set';\nimport type {\n Axis,\n Chart,\n dh as DhType,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport type {\n Annotations,\n Layout,\n Data,\n PlotData,\n XAxisName,\n YAxisName,\n} from 'plotly.js';\nimport type {\n DateTimeColumnFormatter,\n Formatter,\n} from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent } from './ChartModel';\nimport ChartUtils, {\n AxisTypeMap,\n ChartModelSettings,\n FilterColumnMap,\n FilterMap,\n} from './ChartUtils';\nimport { ChartTheme } from './ChartTheme';\n\nconst log = Log.module('FigureChartModel');\n\n/**\n * Takes a Figure object from a widget to make a model for a chart\n */\nclass FigureChartModel extends ChartModel {\n static ADD_SERIES_DEBOUNCE = 50;\n\n /**\n * @param dh JSAPI instance\n * @param figure The figure object created by the API\n * @param theme The theme for the figure\n * @param settings Chart settings\n */\n constructor(\n dh: DhType,\n figure: Figure,\n theme: ChartTheme,\n settings: Partial<ChartModelSettings> = {}\n ) {\n super(dh);\n\n this.handleFigureUpdated = this.handleFigureUpdated.bind(this);\n this.handleFigureDisconnected = this.handleFigureDisconnected.bind(this);\n this.handleFigureReconnected = this.handleFigureReconnected.bind(this);\n this.handleFigureSeriesAdded = this.handleFigureSeriesAdded.bind(this);\n this.handleDownsampleStart = this.handleDownsampleStart.bind(this);\n this.handleDownsampleFinish = this.handleDownsampleFinish.bind(this);\n this.handleDownsampleFail = this.handleDownsampleFail.bind(this);\n this.handleDownsampleNeeded = this.handleDownsampleNeeded.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n\n this.dh = dh;\n this.chartUtils = new ChartUtils(dh);\n this.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n const template = {\n data: {},\n layout: this.chartUtils.makeDefaultLayout(theme),\n };\n this.layout = {\n grid: {\n rows: figure.rows,\n columns: figure.cols,\n pattern: 'independent',\n },\n template,\n };\n this.seriesDataMap = new Map();\n this.pendingSeries = [];\n this.oneClicks = [];\n this.filterColumnMap = new Map();\n this.lastFilter = new Map();\n this.isConnected = true; // Assume figure is connected to start\n this.seriesToProcess = new Set();\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n }\n\n chartUtils: ChartUtils;\n\n dh: DhType;\n\n figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: ChartTheme;\n\n data: Partial<Data>[];\n\n layout: Partial<Layout>;\n\n seriesDataMap: Map<\n string,\n Partial<PlotData> & {\n xLow?: number[];\n xHigh?: number[];\n yLow?: number[];\n yHigh?: number[];\n }\n >;\n\n pendingSeries: Series[];\n\n oneClicks: OneClick[];\n\n filterColumnMap: FilterColumnMap;\n\n lastFilter: FilterMap;\n\n isConnected: boolean; // Assume figure is connected to start\n\n seriesToProcess;\n\n close(): void {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle(): string {\n if (this.figure.title != null && this.figure.title.length > 0) {\n return this.figure.title;\n }\n if (this.figure.charts.length === 1) {\n return this.figure.charts[0].title ?? '';\n }\n return '';\n }\n\n initAllSeries(): void {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const activeSeriesNames: string[] = [];\n for (let i = 0; i < charts.length; i += 1) {\n const chart = charts[i];\n\n for (let j = 0; j < chart.series.length; j += 1) {\n const series = chart.series[j];\n activeSeriesNames.push(series.name);\n this.addSeries(series, axisTypeMap, chart.showLegend);\n }\n\n // Need to add the chart titles as annotations if they are set\n const { axes, title } = chart;\n if (\n title != null &&\n title.length > 0 &&\n (charts.length > 1 || this.figure.title != null)\n ) {\n const xAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.X);\n const yAxis = axes.find(axis => axis.type === this.dh.plot.AxisType.Y);\n if (xAxis == null || yAxis == null) {\n log.warn(\n 'Chart title provided, but unknown how to map to the correct axes for this chart type',\n chart\n );\n } else {\n const xAxisIndex =\n (axisTypeMap.get(xAxis.type)?.findIndex(a => a === xAxis) ?? 0) + 1;\n const yAxisIndex =\n (axisTypeMap.get(yAxis.type)?.findIndex(a => a === yAxis) ?? 0) + 1;\n\n const annotation: Partial<Annotations> = {\n align: 'center',\n x: 0.5,\n y: 1,\n yshift: 17,\n text: title,\n showarrow: false,\n\n // Typing is incorrect in Plotly for this, as it doesn't seem to be typed for the \"domain\" part: https://plotly.com/javascript/reference/layout/annotations/#layout-annotations-items-annotation-xref\n xref: `x${xAxisIndex} domain` as XAxisName,\n yref: `y${yAxisIndex} domain` as YAxisName,\n };\n if (this.layout.annotations == null) {\n this.layout.annotations = [annotation];\n } else {\n this.layout.annotations.push(annotation);\n }\n }\n }\n }\n\n // Remove any series that no longer exist\n const allSeriesNames = [...this.seriesDataMap.keys()];\n const inactiveSeriesNames = allSeriesNames.filter(\n seriesName => activeSeriesNames.indexOf(seriesName) < 0\n );\n for (let i = 0; i < inactiveSeriesNames.length; i += 1) {\n const seriesName = inactiveSeriesNames[i];\n this.seriesDataMap.delete(seriesName);\n }\n this.seriesToProcess = new Set([...this.seriesDataMap.keys()]);\n }\n\n /**\n * Add a series to the model\n * @param series Series object to add\n * @param axisTypeMap Map of axis type to the axes in this Figure\n * @param showLegend Whether this series should show the legend or not\n */\n addSeries(\n series: Series,\n axisTypeMap: AxisTypeMap,\n showLegend: boolean | null\n ): void {\n const { dh } = this;\n\n const seriesData = this.chartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme,\n showLegend\n );\n\n this.seriesDataMap.set(series.name, seriesData);\n\n this.data = [...this.seriesDataMap.values()];\n\n if (series.plotStyle === dh.plot.SeriesPlotStyle.STACKED_BAR) {\n this.layout.barmode = 'stack';\n } else if (series.plotStyle === dh.plot.SeriesPlotStyle.PIE) {\n this.layout.hiddenlabels = ChartUtils.getHiddenLabels(this.settings);\n }\n\n // We only want to force hide the legend if there is only one series that is not a PIE\n // Right now this means that if the user only has one series, they cannot explicitly show the legend until deephaven-core#3254 is implemented\n // TODO: deephaven-core#3254, once done, this can be removed.\n this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE\n ? showLegend ?? undefined\n : false;\n\n if (series.oneClick != null) {\n const { oneClick } = series;\n const { columns } = oneClick;\n for (let i = 0; i < columns.length; i += 1) {\n this.filterColumnMap.set(columns[i].name, columns[i]);\n }\n\n this.oneClicks.push(oneClick);\n }\n\n this.updateLayoutFormats();\n }\n\n // We need to debounce adding series so we subscribe to them all in the same tick\n // This should no longer be necessary after IDS-5049 lands\n addPendingSeries = debounce(() => {\n const axisTypeMap = ChartUtils.getAxisTypeMap(this.figure);\n const { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n const chart = this.figure.charts.find(c => c.series.includes(series));\n this.addSeries(series, axisTypeMap, chart?.showLegend ?? null);\n\n series.subscribe();\n // We'll get an update with the data after subscribing\n }\n\n this.pendingSeries = [];\n }, FigureChartModel.ADD_SERIES_DEBOUNCE);\n\n subscribe(callback: (event: ChartEvent) => void): void {\n super.subscribe(callback);\n\n if (this.listeners.length === 1) {\n // Need to initialize the series here as we may have missed some series when not subscribed\n this.initAllSeries();\n this.subscribeFigure();\n }\n }\n\n unsubscribe(callback: (event: ChartEvent) => void): void {\n super.unsubscribe(callback);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure(): void {\n if (!this.isConnected) {\n log.debug('Ignoring subscribe when figure in disconnected state');\n return;\n }\n\n this.figure.subscribe(\n this.isDownsamplingDisabled\n ? this.dh.plot.DownsampleOptions.DISABLE\n : this.dh.plot.DownsampleOptions.DEFAULT\n );\n\n if (this.figure.errors.length > 0) {\n log.error('Errors in figure', this.figure.errors);\n this.fireError(this.figure.errors);\n }\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\n const { dh } = this;\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.addEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.addEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListeningFigure(): void {\n const { dh } = this;\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_UPDATED,\n this.handleFigureUpdated\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_SERIES_ADDED,\n this.handleFigureSeriesAdded\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DISCONNECT,\n this.handleFigureDisconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_RECONNECT,\n this.handleFigureReconnected\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLESTARTED,\n this.handleDownsampleStart\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFINISHED,\n this.handleDownsampleFinish\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLEFAILED,\n this.handleDownsampleFail\n );\n this.figure.removeEventListener(\n dh.plot.Figure.EVENT_DOWNSAMPLENEEDED,\n this.handleDownsampleNeeded\n );\n this.figure.removeEventListener(\n dh.Client.EVENT_REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n getTimeZone = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return (dataFormatter as DateTimeColumnFormatter).dhTimeZone;\n }\n }\n return undefined;\n }\n );\n\n getValueTranslator = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => this.chartUtils.unwrapValue(value, timeZone);\n }\n );\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize(\n (columnType: string, formatter: Formatter | undefined) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n this.chartUtils.wrapValue(value, columnType, timeZone);\n }\n );\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize(\n (columnType: string, formatter?: Formatter) => (range: Range) => {\n let [rangeStart, rangeEnd]: [unknown, unknown] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n }\n );\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize(\n (chart: Chart, formatter?: Formatter) => (axis: Axis) => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source != null) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return (range: [unknown, unknown]) => range;\n }\n );\n\n handleDownsampleStart(event: ChartEvent): void {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event: ChartEvent): void {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event: ChartEvent): void {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event: ChartEvent): void {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event: ChartEvent): void {\n const { detail: figureUpdateEvent } = event;\n const { series: seriesArray } = figureUpdateEvent;\n\n log.debug2('handleFigureUpdated', seriesArray);\n\n for (let i = 0; i < seriesArray.length; i += 1) {\n const series = seriesArray[i];\n\n log.debug2('handleFigureUpdated updating series', series.name);\n\n const { sources } = series;\n for (let j = 0; j < sources.length; j += 1) {\n const source = sources[j];\n const { columnType, type } = source;\n const valueTranslator = this.getValueTranslator(\n columnType,\n this.formatter\n );\n const dataArray = figureUpdateEvent.getArray(\n series,\n type,\n valueTranslator\n );\n this.setDataArrayForSeries(series, type, dataArray);\n }\n\n this.seriesToProcess.delete(series.name);\n\n this.cleanSeries(series);\n }\n if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\n this.fireError([`${event.detail}`]);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe(): void {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter: Formatter): void {\n super.setFormatter(formatter);\n\n this.updateLayoutFormats();\n\n // Unsubscribe and resubscribe to trigger a data update\n // Data may need to be translated again because of the new formatter\n this.resubscribe();\n }\n\n setDownsamplingDisabled(isDownsamplingDisabled: boolean): void {\n super.setDownsamplingDisabled(isDownsamplingDisabled);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event: CustomEvent): void {\n log.debug('Figure disconnected', event);\n\n this.isConnected = false;\n\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n }\n\n this.fireDisconnect();\n }\n\n handleFigureReconnected(event: CustomEvent): void {\n log.debug('Figure reconnected', event);\n\n this.isConnected = true;\n\n // It's possible the series have changed completely, as the query could have been changed\n this.initAllSeries();\n\n this.fireReconnect();\n\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n handleFigureSeriesAdded(event: { detail: Series }): void {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n this.addPendingSeries();\n }\n\n setDimensions(rect: DOMRect): void {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title: string): void {\n super.setTitle(title);\n\n // Need to recalculate the padding based on how many lines of text the title is\n // Plotly doesn't handle positioning it correctly, and it's an undocumented feature\n const subtitleCount = (title ?? '').match(/<br>/g)?.length ?? 0;\n const margin =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n\n if (this.layout.margin) {\n this.layout.margin.t = margin;\n } else {\n this.layout.margin = { t: margin };\n }\n\n if (typeof this.layout.title === 'string') {\n this.layout.title = title;\n } else {\n this.layout.title = { ...this.layout.title };\n this.layout.title.text = title;\n this.layout.title.pad = { ...this.layout.title.pad };\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n }\n\n getPlotWidth(): number {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width -\n (this.layout.margin?.l ?? 0) -\n (this.layout.margin?.r ?? 0),\n 0\n );\n }\n\n getPlotHeight(): number {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height -\n (this.layout.margin?.t ?? 0) -\n (this.layout.margin?.b ?? 0),\n 0\n );\n }\n\n updateAxisPositions(): void {\n const plotWidth = this.getPlotWidth();\n const plotHeight = this.getPlotHeight();\n this.chartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n this.theme,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight\n );\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats(): void {\n if (!this.formatter) {\n return;\n }\n\n const axisFormats = this.chartUtils.getAxisFormats(\n this.figure,\n this.formatter\n );\n axisFormats.forEach((axisFormat, axisLayoutProperty) => {\n log.debug(\n `Assigning ${axisLayoutProperty}`,\n this.layout[axisLayoutProperty],\n axisFormat\n );\n\n const props = this.layout[axisLayoutProperty];\n if (props != null) {\n Object.assign(props, axisFormat);\n } else {\n log.debug(`Ignoring null layout.${axisLayoutProperty}`);\n }\n });\n }\n\n /**\n * Set a specific array for the array of series properties specified.\n * @param series The series to set the data array for.\n * @param sourceType The source type within that series to set the data for.\n * @param dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(\n series: Series,\n sourceType: SourceType,\n dataArray: unknown[]\n ): void {\n const { name, plotStyle } = series;\n\n const seriesData = this.seriesDataMap.get(name);\n const property = this.chartUtils.getPlotlyProperty(plotStyle, sourceType);\n\n if (seriesData) {\n set(seriesData, property, dataArray);\n }\n }\n\n /**\n * After setting all the data in the series data, we may need to adjust some other properties\n * Eg. Calculating the width from the xLow/xHigh values; Plot.ly uses `width` instead of a low/high\n * value for x.\n * @param series The series to clean the data for\n */\n cleanSeries(series: Series): void {\n const { dh } = this;\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\n if (seriesData == null) {\n return;\n }\n if (plotStyle === dh.plot.SeriesPlotStyle.HISTOGRAM) {\n const { xLow, xHigh } = seriesData;\n if (xLow && xHigh && xLow.length === xHigh.length) {\n const width = [];\n for (let i = 0; i < xLow.length; i += 1) {\n width.push(xHigh[i] - xLow[i]);\n }\n seriesData.width = width;\n }\n } else if (\n plotStyle === dh.plot.SeriesPlotStyle.LINE ||\n plotStyle === dh.plot.SeriesPlotStyle.ERROR_BAR ||\n plotStyle === dh.plot.SeriesPlotStyle.BAR\n ) {\n const { x, xLow, xHigh, y, yLow, yHigh } = seriesData;\n if (xLow && xHigh && xLow !== x) {\n seriesData.error_x = ChartUtils.getPlotlyErrorBars(\n x as number[],\n xLow,\n xHigh,\n this.theme\n );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh,\n this.theme\n );\n }\n } else if (plotStyle === dh.plot.SeriesPlotStyle.TREEMAP) {\n const { ids, labels } = seriesData;\n if (ids !== undefined && labels === undefined) {\n // If the user only provided IDs, we assign the IDs to the labels property as well automatically\n // Plotly uses the labels primarily, which from our API perspective seems kind of backwards\n seriesData.labels = ids;\n }\n }\n }\n\n getData(): Partial<Data>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): FilterColumnMap {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired(): boolean {\n return (\n this.oneClicks.find(oneClick => oneClick.requireAllFiltersToDisplay) !=\n null\n );\n }\n\n /**\n * Sets the filter on the model. Will only set the values that have changed.\n * @param filterMap Map of filter column names to values\n */\n setFilter(filterMap: FilterMap): void {\n if (this.oneClicks.length === 0) {\n log.warn('Trying to set a filter, but no one click!');\n return;\n }\n\n log.debug('setFilter', filterMap);\n\n for (let i = 0; i < this.oneClicks.length; i += 1) {\n const oneClick = this.oneClicks[i];\n const { columns } = oneClick;\n // Need to get all the keys in case a filter was removed\n const keys = new Set([...filterMap.keys(), ...this.lastFilter.keys()]);\n keys.forEach(key => {\n const value = filterMap.get(key);\n if (\n this.lastFilter.get(key) !== value &&\n columns.find(column => column.name === key) != null\n ) {\n oneClick.setValueForColumn(key, value);\n }\n });\n }\n\n this.lastFilter = new Map(filterMap);\n }\n\n setFigure(figure: Figure): void {\n this.close();\n\n this.figure = figure;\n\n this.setTitle(this.getDefaultTitle());\n this.initAllSeries();\n this.updateAxisPositions();\n this.startListeningFigure();\n if (this.listeners.length > 0) {\n this.subscribeFigure();\n }\n }\n\n updateSettings(settings: Partial<ChartModelSettings>): void {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/chart",
3
- "version": "0.57.2-beta.0+9d519e10",
3
+ "version": "0.58.0",
4
4
  "description": "Deephaven Chart",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -27,13 +27,13 @@
27
27
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
28
28
  },
29
29
  "dependencies": {
30
- "@deephaven/components": "^0.57.2-beta.0+9d519e10",
31
- "@deephaven/icons": "^0.57.2-beta.0+9d519e10",
32
- "@deephaven/jsapi-types": "^0.57.2-beta.0+9d519e10",
33
- "@deephaven/jsapi-utils": "^0.57.2-beta.0+9d519e10",
34
- "@deephaven/log": "^0.57.2-beta.0+9d519e10",
35
- "@deephaven/react-hooks": "^0.57.2-beta.0+9d519e10",
36
- "@deephaven/utils": "^0.57.2-beta.0+9d519e10",
30
+ "@deephaven/components": "^0.58.0",
31
+ "@deephaven/icons": "^0.58.0",
32
+ "@deephaven/jsapi-types": "^0.58.0",
33
+ "@deephaven/jsapi-utils": "^0.58.0",
34
+ "@deephaven/log": "^0.58.0",
35
+ "@deephaven/react-hooks": "^0.58.0",
36
+ "@deephaven/utils": "^0.58.0",
37
37
  "deep-equal": "^2.0.5",
38
38
  "lodash.debounce": "^4.0.8",
39
39
  "lodash.set": "^4.3.2",
@@ -47,8 +47,8 @@
47
47
  "react": "^17.x"
48
48
  },
49
49
  "devDependencies": {
50
- "@deephaven/jsapi-shim": "^0.57.2-beta.0+9d519e10",
51
- "@deephaven/mocks": "^0.57.2-beta.0+9d519e10",
50
+ "@deephaven/jsapi-shim": "^0.58.0",
51
+ "@deephaven/mocks": "^0.58.0",
52
52
  "@types/plotly.js": "^2.12.11"
53
53
  },
54
54
  "files": [
@@ -60,5 +60,5 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "9d519e101d201498e87b81eea5d9b98b2acb582f"
63
+ "gitHead": "a25095e03076d51780ca8ee2f8dff034d0a6d67f"
64
64
  }