@deephaven/chart 0.20.1-beta.5 → 0.21.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.
@@ -1 +1 @@
1
- {"version":3,"file":"FigureChartModel.js","names":["memoize","debounce","set","dh","Log","ChartModel","ChartUtils","ChartTheme","log","module","FigureChartModel","constructor","figure","settings","theme","pendingSeries","i","length","series","addSeries","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","timeZone","getTimeZone","value","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","chart","axis","source","getSourceForAxis","getRangeParser","handleFigureUpdated","bind","handleFigureDisconnected","handleFigureReconnected","handleFigureSeriesAdded","handleDownsampleStart","handleDownsampleFinish","handleDownsampleFail","handleDownsampleNeeded","handleRequestFailed","data","layout","makeDefaultLayout","seriesDataMap","Map","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","addPendingSeries","cancel","stopListeningFigure","charts","title","clear","activeSeriesNames","j","push","name","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","getChartForSeries","error","axisTypeMap","groupArray","axes","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","columns","updateLayoutFormats","callback","listeners","subscribeFigure","unsubscribe","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","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","size","fireLoadFinished","cleanSeries","fireUpdate","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","width","Math","max","l","r","getPlotHeight","height","b","plotWidth","plotHeight","axisRangeParser","getAxisRangeParser","updateLayoutAxes","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","get","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","undefined","getData","getLayout","getFilterColumnMap","isFilterRequired","find","requireAllFiltersToDisplay","setFilter","filterMap","warn","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 dh, {\n Axis,\n Chart,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport { Layout, PlotData } from 'plotly.js';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent, FilterColumnMap } from './ChartModel';\nimport ChartUtils, { AxisTypeMap, ChartModelSettings } 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 figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\n ) {\n super();\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.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n this.layout = ChartUtils.makeDefaultLayout(theme);\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 figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: typeof ChartTheme;\n\n data: Partial<PlotData>[];\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: Map<string, string>;\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 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);\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 addSeries(series: Series): void {\n const chart = ChartUtils.getChartForSeries(this.figure, series);\n if (chart == null) {\n log.error('Unable to find matching chart for series', series);\n return;\n }\n\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(chart.axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme\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 this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE;\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 { pendingSeries } = this;\n for (let i = 0; i < pendingSeries.length; i += 1) {\n const series = pendingSeries[i];\n this.addSeries(series);\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 ? dh.plot.DownsampleOptions.DISABLE\n : dh.plot.DownsampleOptions.DEFAULT\n );\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\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 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((columnType, formatter) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return null;\n });\n\n getValueTranslator = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => ChartUtils.unwrapValue(value, timeZone);\n });\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n ChartUtils.wrapValue(value, columnType, timeZone);\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) {\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 if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n this.cleanSeries(series);\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\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\n for (let i = 0; i < this.figure.charts.length; i += 1) {\n const chart = this.figure.charts[i];\n const axisRangeParser = this.getAxisRangeParser(chart, this.formatter);\n ChartUtils.updateLayoutAxes(\n this.layout,\n chart.axes,\n plotWidth,\n plotHeight,\n axisRangeParser,\n this.theme\n );\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 = ChartUtils.getAxisFormats(this.figure, this.formatter);\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 = 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 { 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 (plotStyle === dh.plot.SeriesPlotStyle.LINE) {\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 );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh\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<PlotData>[] {\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: Map<string, string>): 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","dh","Log","ChartModel","ChartUtils","ChartTheme","log","module","FigureChartModel","constructor","figure","settings","theme","axes","getAllAxes","pendingSeries","i","length","series","addSeries","subscribe","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","timeZone","getTimeZone","value","unwrapValue","wrapValue","range","rangeStart","rangeEnd","valueParser","getValueParser","chart","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","charts","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","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","error","fireDownsampleFail","info","fireDownsampleNeeded","figureUpdateEvent","seriesArray","debug2","sources","type","valueTranslator","getValueTranslator","dataArray","getArray","setDataArrayForSeries","size","fireLoadFinished","cleanSeries","fireUpdate","resubscribe","setFormatter","setDownsamplingDisabled","fireDisconnect","fireReconnect","setDimensions","rect","subtitleCount","match","margin","DEFAULT_MARGIN","t","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","getPlotWidth","width","Math","max","l","r","getPlotHeight","height","b","plotWidth","plotHeight","updateFigureAxes","getAxisRangeParser","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","props","Object","assign","sourceType","get","property","getPlotlyProperty","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","undefined","getData","getLayout","getFilterColumnMap","isFilterRequired","find","requireAllFiltersToDisplay","setFilter","filterMap","warn","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 dh, {\n Axis,\n Chart,\n Figure,\n OneClick,\n Series,\n SourceType,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { Range } from '@deephaven/utils';\nimport { Layout, PlotData } from 'plotly.js';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport ChartModel, { ChartEvent, FilterColumnMap } from './ChartModel';\nimport ChartUtils, { AxisTypeMap, ChartModelSettings } 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 figure The figure object created by the API\n * @param settings Chart settings\n */\n constructor(\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\n ) {\n super();\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.figure = figure;\n this.settings = settings;\n this.theme = theme;\n this.data = [];\n const template = { data: {}, layout: ChartUtils.makeDefaultLayout(theme) };\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 figure: Figure;\n\n settings: Partial<ChartModelSettings>;\n\n theme: typeof ChartTheme;\n\n data: Partial<PlotData>[];\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: Map<string, string>;\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);\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 */\n addSeries(series: Series, axes: Axis[]): void {\n const axisTypeMap: AxisTypeMap = ChartUtils.groupArray(axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings),\n this.theme\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 this.layout.showlegend =\n this.data.length > 1 || series.plotStyle === dh.plot.SeriesPlotStyle.PIE;\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 this.addSeries(series, axes);\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 ? dh.plot.DownsampleOptions.DISABLE\n : dh.plot.DownsampleOptions.DEFAULT\n );\n }\n\n unsubscribeFigure(): void {\n this.figure.unsubscribe();\n }\n\n startListeningFigure(): void {\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 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((columnType, formatter) => {\n if (formatter != null) {\n const dataFormatter = formatter.getColumnTypeFormatter(columnType);\n if (dataFormatter != null) {\n return dataFormatter.dhTimeZone;\n }\n }\n return null;\n });\n\n getValueTranslator = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) => ChartUtils.unwrapValue(value, timeZone);\n });\n\n /** Gets the parser for a value with the provided column type */\n getValueParser = memoize((columnType, formatter) => {\n const timeZone = this.getTimeZone(columnType, formatter);\n return (value: unknown) =>\n ChartUtils.wrapValue(value, columnType, timeZone);\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) {\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 if (this.seriesToProcess.size === 0) {\n this.fireLoadFinished();\n }\n\n this.cleanSeries(series);\n }\n\n const { data } = this;\n this.fireUpdate(data);\n }\n\n handleRequestFailed(event: ChartEvent): void {\n log.error('Request failed', event);\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 ChartUtils.updateFigureAxes(\n this.layout,\n this.figure,\n chart => this.getAxisRangeParser(chart, this.formatter),\n plotWidth,\n plotHeight,\n this.theme\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 = ChartUtils.getAxisFormats(this.figure, this.formatter);\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 = 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 { 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 (plotStyle === dh.plot.SeriesPlotStyle.LINE) {\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 );\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(\n y as number[],\n yLow,\n yHigh\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<PlotData>[] {\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: Map<string, string>): 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.20.1-beta.5+4068f9e",
3
+ "version": "0.21.0",
4
4
  "description": "Deephaven Chart",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,11 +30,11 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/icons": "^0.20.1-beta.5+4068f9e",
34
- "@deephaven/jsapi-shim": "^0.20.1-beta.5+4068f9e",
35
- "@deephaven/jsapi-utils": "^0.20.1-beta.5+4068f9e",
36
- "@deephaven/log": "^0.20.1-beta.5+4068f9e",
37
- "@deephaven/utils": "^0.20.1-beta.5+4068f9e",
33
+ "@deephaven/icons": "^0.21.0",
34
+ "@deephaven/jsapi-shim": "^0.21.0",
35
+ "@deephaven/jsapi-utils": "^0.21.0",
36
+ "@deephaven/log": "^0.21.0",
37
+ "@deephaven/utils": "^0.21.0",
38
38
  "deep-equal": "^2.0.5",
39
39
  "lodash.debounce": "^4.0.8",
40
40
  "lodash.set": "^4.3.2",
@@ -48,8 +48,8 @@
48
48
  "react": "^17.x"
49
49
  },
50
50
  "devDependencies": {
51
- "@deephaven/mocks": "^0.20.1-beta.5+4068f9e",
52
- "@deephaven/tsconfig": "^0.20.1-beta.5+4068f9e",
51
+ "@deephaven/mocks": "^0.21.0",
52
+ "@deephaven/tsconfig": "^0.21.0",
53
53
  "@types/plotly.js": "^2.12.2"
54
54
  },
55
55
  "files": [
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "4068f9ee66e8a07971656aa2388a6a01620fff31"
64
+ "gitHead": "3dbfa81c03d76b04ea1b1e05ec5f3d7e95b65b9d"
65
65
  }