@deephaven/chart 0.50.1-beta.4 → 0.51.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","Log","ChartModel","ChartUtils","ChartTheme","log","module","FigureChartModel","constructor","dh","figure","settings","theme","axes","getAllAxes","pendingSeries","series","i","chart","charts","find","c","includes","addSeries","showLegend","subscribe","length","ADD_SERIES_DEBOUNCE","columnType","formatter","dataFormatter","getColumnTypeFormatter","dhTimeZone","undefined","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","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","ERROR_BAR","BAR","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","TREEMAP","ids","labels","getData","getLayout","getFilterColumnMap","isFilterRequired","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 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 settings Chart settings\n */\n constructor(\n dh: DhType,\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\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: typeof 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 showLegend,\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 // 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\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 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 this.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 = 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 );\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<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","ChartTheme","log","module","FigureChartModel","constructor","dh","figure","_this","settings","arguments","length","undefined","theme","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","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","_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","concat","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 settings Chart settings\n */\n constructor(\n dh: DhType,\n figure: Figure,\n settings: Partial<ChartModelSettings> = {},\n theme: typeof ChartTheme = ChartTheme\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: typeof 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 showLegend,\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 // 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\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 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 this.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 = 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 );\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<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 +1 @@
1
- {"version":3,"file":"MockChartModel.js","names":["ChartModel","ChartTheme","ChartUtils","MockChartModel","makeRandomSeries","offset","scale","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","color","area_color","width","makeTrendline","dash","trend_color","makeErrorBand","erroryforward","errorybackward","length","value","errory","concat","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","title","xaxis","yaxis","constructor","data","filterFields","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport ChartTheme from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static smoothing = 1.5;\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n const startDate = new Date();\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (Math.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: ChartTheme.area_color,\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n color: ChartTheme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n fillcolor: ChartTheme.error_band_fill_color,\n line: {\n width: 0,\n color: ChartTheme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n color: ChartTheme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: DhType): Partial<Layout> {\n const layout = new ChartUtils(dh).makeDefaultLayout(ChartTheme);\n layout.title = 'Chart';\n\n if (layout.xaxis) {\n layout.xaxis.title = 'Datestamp';\n }\n\n if (layout.yaxis) {\n layout.yaxis.title = 'Price';\n }\n\n return layout;\n }\n\n constructor(\n dh: DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MockChartModel.js","names":["ChartModel","ChartTheme","ChartUtils","MockChartModel","makeRandomSeries","offset","scale","arguments","length","undefined","steps","dates","values","smooth","linear","startDate","Date","i","date","getFullYear","getMonth","getDate","push","concat","v","Math","sin","cos","random","smoothing","round","x","y","s","l","makeScatter","series","name","type","mode","hoverinfo","marker","size","makeArea","fill","line","color","area_color","width","makeTrendline","dash","trend_color","makeErrorBand","erroryforward","errorybackward","value","errory","reverse","slice","fillcolor","error_band_fill_color","error_band_line_color","shape","makeLine","line_color","makeRandomData","series1","areaPattern","trendLine","series2","errorBand","makeDefaultLayout","dh","layout","title","xaxis","yaxis","constructor","data","filterFields","_defineProperty","getData","getLayout","getFilterColumnMap","map","Map","set","isFilterRequired","setFilter","fireUpdate"],"sources":["../src/MockChartModel.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport type { Datum, Layout, PlotData } from 'plotly.js';\nimport ChartModel from './ChartModel';\nimport ChartTheme from './ChartTheme';\nimport ChartUtils from './ChartUtils';\n\ninterface Series {\n x: PlotData['x'];\n y: PlotData['y'];\n s: number[];\n l: number[];\n}\n\n/** Displays a basic random chart */\nclass MockChartModel extends ChartModel {\n static smoothing = 1.5;\n\n static makeRandomSeries(offset: number, scale = 1, steps = 100): Series {\n const dates = [];\n const values = [];\n const smooth = [];\n const linear = [];\n const startDate = new Date();\n\n for (let i = 0; i < steps; i += 1) {\n const date = new Date(\n startDate.getFullYear(),\n startDate.getMonth(),\n startDate.getDate() + i - steps\n );\n dates.push(\n `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n );\n let v =\n ((Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.cos(i * 0.2) * steps) / 6 +\n (Math.sin(i * 0.5) * steps) / 10 +\n (Math.random() * steps) / 5 +\n i * MockChartModel.smoothing) *\n scale;\n v = Math.round(v * 100) / 100; // 2 decimals only\n // using steps acts as amplititude scaling based on value\n // large sine wave for course shape + small sine waves for bumpiness +\n // general randomness noise + index to be constantly up and to the right + smoothing factor\n values.push(v);\n linear.push(40 + i * MockChartModel.smoothing);\n smooth.push(\n (Math.sin((i / steps) * offset) * steps) / 3 +\n (Math.random() * steps) / 10 +\n i * MockChartModel.smoothing\n ); // push a smoother version of the same thing\n }\n\n return { x: dates, y: values, s: smooth, l: linear };\n }\n\n static makeScatter(series: Series): Partial<PlotData> {\n return {\n name: 'SCTR',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'markers',\n hoverinfo: 'skip',\n marker: {\n size: 5,\n },\n };\n }\n\n static makeArea(series: Series): Partial<PlotData> {\n return {\n name: 'AREA',\n x: series.x,\n y: series.s,\n type: 'scatter',\n mode: 'line' as PlotData['mode'],\n fill: 'tozeroy',\n hoverinfo: 'all',\n line: {\n color: ChartTheme.area_color,\n width: 3,\n // area patten gets applied as hack in post render plot.ly callback + css\n },\n };\n }\n\n static makeTrendline(series: Series): Partial<PlotData> {\n return {\n // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot\n name: 'Trendline <br>R<sup>2</sup> = 0.91',\n x: series.x,\n y: series.l,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n line: {\n width: 3,\n dash: 'dot', // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple\n color: ChartTheme.trend_color,\n // chroma(c.$green).brighten(1.2).hex()\n },\n };\n }\n\n static makeErrorBand(series: Series): Partial<PlotData> {\n // generate continouous error bands values and text\n const erroryforward = [];\n const errorybackward = [];\n for (let i = 0; i < series.y.length; i += 1) {\n const value = series.y[i] as number;\n erroryforward[i] = Math.round((value + 18) * 100) / 100;\n errorybackward[i] = Math.round((value - 18) * 100) / 100;\n }\n\n // makes a closed shape of points winding clockwise for y values\n const errory = erroryforward.concat(errorybackward.reverse());\n\n return {\n name: 'error',\n x: (series.x as Datum[]).concat((series.x as Datum[]).slice().reverse()), // winding for x values, that slice just clones so reverse doesn't apply inplace\n y: errory,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'skip',\n fill: 'toself', // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render\n fillcolor: ChartTheme.error_band_fill_color,\n line: {\n width: 0,\n color: ChartTheme.error_band_line_color,\n shape: 'spline',\n },\n };\n }\n\n static makeLine(series: Series): Partial<PlotData> {\n return {\n name: 'LINE',\n x: series.x,\n y: series.y,\n type: 'scattergl',\n mode: 'line' as PlotData['mode'],\n hoverinfo: 'x+y+text+name' as PlotData['hoverinfo'],\n line: {\n color: ChartTheme.line_color,\n width: 3,\n },\n };\n }\n\n static makeRandomData(): Partial<PlotData>[] {\n const series1 = MockChartModel.makeRandomSeries(6);\n const areaPattern = MockChartModel.makeArea(series1);\n const trendLine = MockChartModel.makeTrendline(series1);\n\n const series2 = MockChartModel.makeRandomSeries(2);\n const line = MockChartModel.makeLine(series2);\n const errorBand = MockChartModel.makeErrorBand(series2);\n\n return [areaPattern, trendLine, line, errorBand];\n }\n\n static makeDefaultLayout(dh: DhType): Partial<Layout> {\n const layout = new ChartUtils(dh).makeDefaultLayout(ChartTheme);\n layout.title = 'Chart';\n\n if (layout.xaxis) {\n layout.xaxis.title = 'Datestamp';\n }\n\n if (layout.yaxis) {\n layout.yaxis.title = 'Price';\n }\n\n return layout;\n }\n\n constructor(\n dh: DhType,\n {\n data = MockChartModel.makeRandomData(),\n layout = MockChartModel.makeDefaultLayout(dh),\n filterFields = [],\n } = {}\n ) {\n super(dh);\n\n this.data = data;\n this.layout = layout;\n this.filterFields = filterFields;\n }\n\n data: Partial<PlotData>[];\n\n filterFields: string[];\n\n layout: Partial<Layout>;\n\n getData(): Partial<PlotData>[] {\n return this.data;\n }\n\n getLayout(): Partial<Layout> {\n return this.layout;\n }\n\n getFilterColumnMap(): Map<string, { name: string; type: string }> {\n const map = new Map();\n\n for (let i = 0; i < this.filterFields.length; i += 1) {\n const name = this.filterFields[i];\n const type = 'java.lang.String';\n map.set(name, { name, type });\n }\n\n return map;\n }\n\n isFilterRequired(): boolean {\n return this.filterFields.length > 0;\n }\n\n setFilter(): void {\n this.fireUpdate(this.data);\n }\n}\n\nexport default MockChartModel;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"isFigureChartModel.js","names":["isFigureChartModel","model","setFigure","undefined"],"sources":["../src/isFigureChartModel.ts"],"sourcesContent":["import ChartModel from './ChartModel';\nimport FigureChartModel from './FigureChartModel';\n\nexport default function isFigureChartModel(\n model: ChartModel\n): model is FigureChartModel {\n return (model as FigureChartModel).setFigure !== undefined;\n}\n"],"mappings":"AAGA,eAAe,SAASA,kBAAkB,CACxCC,KAAiB,EACU;EAC3B,OAAQA,KAAK,CAAsBC,SAAS,KAAKC,SAAS;AAC5D"}
1
+ {"version":3,"file":"isFigureChartModel.js","names":["isFigureChartModel","model","setFigure","undefined"],"sources":["../src/isFigureChartModel.ts"],"sourcesContent":["import ChartModel from './ChartModel';\nimport FigureChartModel from './FigureChartModel';\n\nexport default function isFigureChartModel(\n model: ChartModel\n): model is FigureChartModel {\n return (model as FigureChartModel).setFigure !== undefined;\n}\n"],"mappings":"AAGA,eAAe,SAASA,kBAAkBA,CACxCC,KAAiB,EACU;EAC3B,OAAQA,KAAK,CAAsBC,SAAS,KAAKC,SAAS;AAC5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/chart",
3
- "version": "0.50.1-beta.4+f440a383",
3
+ "version": "0.51.0",
4
4
  "description": "Deephaven Chart",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -27,11 +27,11 @@
27
27
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
28
28
  },
29
29
  "dependencies": {
30
- "@deephaven/icons": "^0.50.1-beta.4+f440a383",
31
- "@deephaven/jsapi-types": "^0.50.1-beta.4+f440a383",
32
- "@deephaven/jsapi-utils": "^0.50.1-beta.4+f440a383",
33
- "@deephaven/log": "^0.50.1-beta.4+f440a383",
34
- "@deephaven/utils": "^0.50.1-beta.4+f440a383",
30
+ "@deephaven/icons": "^0.51.0",
31
+ "@deephaven/jsapi-types": "^0.51.0",
32
+ "@deephaven/jsapi-utils": "^0.51.0",
33
+ "@deephaven/log": "^0.51.0",
34
+ "@deephaven/utils": "^0.51.0",
35
35
  "deep-equal": "^2.0.5",
36
36
  "lodash.debounce": "^4.0.8",
37
37
  "lodash.set": "^4.3.2",
@@ -45,8 +45,8 @@
45
45
  "react": "^17.x"
46
46
  },
47
47
  "devDependencies": {
48
- "@deephaven/jsapi-shim": "^0.50.1-beta.4+f440a383",
49
- "@deephaven/mocks": "^0.50.1-beta.4+f440a383",
48
+ "@deephaven/jsapi-shim": "^0.51.0",
49
+ "@deephaven/mocks": "^0.51.0",
50
50
  "@types/plotly.js": "^2.12.11"
51
51
  },
52
52
  "files": [
@@ -58,5 +58,5 @@
58
58
  "publishConfig": {
59
59
  "access": "public"
60
60
  },
61
- "gitHead": "f440a383bc5ddc7c8beb06d858d6e0bf4ad1da29"
61
+ "gitHead": "54f7cc5d08a9c1a390b2e89a9fb84fe1018008eb"
62
62
  }