@deephaven/chart 0.5.1 → 0.6.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,"sources":["../src/FigureChartModel.js"],"names":["memoize","debounce","dh","Log","ChartModel","ChartUtils","log","module","FigureChartModel","figure","settings","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","addPendingSeries","ADD_SERIES_DEBOUNCE","data","layout","makeDefaultLayout","seriesDataMap","Map","pendingSeries","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","cancel","stopListeningFigure","charts","length","title","clear","activeSeriesNames","i","j","series","push","name","addSeries","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","getChartForSeries","error","axisTypeMap","groupArray","axes","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","set","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","columns","updateLayoutFormats","subscribe","args","listeners","subscribeFigure","unsubscribeFigure","debug","isDownsamplingDisabled","DownsampleOptions","DISABLE","DEFAULT","unsubscribe","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","fireDisconnect","fireReconnect","rect","subtitleCount","match","margin","t","DEFAULT_MARGIN","SUBTITLE_LINE_HEIGHT","text","pad","DEFAULT_TITLE_PADDING","width","Math","max","l","r","height","b","plotWidth","getPlotWidth","plotHeight","getPlotHeight","axisRangeParser","getAxisRangeParser","updateLayoutAxes","axisFormats","getAxisFormats","forEach","axisFormat","axisLayoutProperty","Object","assign","sourceType","property","getPlotlyProperty","get","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","find","requireAllFiltersToDisplay","filterMap","warn","key","column","setValueForColumn"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport ChartModel from './ChartModel';\nimport ChartUtils from './ChartUtils';\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.plot.Figure} figure The figure object created by the API\n * @param {Object} settings Chart settings\n */\n constructor(figure, settings = {}) {\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 // 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 this.addPendingSeries = debounce(\n this.addPendingSeries.bind(this),\n FigureChartModel.ADD_SERIES_DEBOUNCE\n );\n\n this.figure = figure;\n this.settings = settings;\n this.data = [];\n this.layout = ChartUtils.makeDefaultLayout();\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 close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle() {\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() {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const activeSeriesNames = [];\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; 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) {\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 = ChartUtils.groupArray(chart.axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings)\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) {\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 addPendingSeries() {\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 }\n\n subscribe(...args) {\n super.subscribe(...args);\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(...args) {\n super.unsubscribe(...args);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure() {\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() {\n this.figure.unsubscribe();\n }\n\n startListeningFigure() {\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() {\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 => 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 => ChartUtils.wrapValue(value, columnType, timeZone);\n });\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize((columnType, formatter) => range => {\n let [rangeStart, rangeEnd] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n });\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize((chart, formatter) => axis => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return range => range;\n });\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event) {\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) {\n log.error('Request failed', event);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter) {\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(...args) {\n super.setDownsamplingDisabled(...args);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event) {\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) {\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) {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n\n this.addPendingSeries();\n }\n\n setDimensions(rect) {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title) {\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 this.layout.margin.t =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n this.layout.title.text = title;\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n\n getPlotWidth() {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width - this.layout.margin.l - this.layout.margin.r,\n 0\n );\n }\n\n getPlotHeight() {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height - this.layout.margin.t - this.layout.margin.b,\n 0\n );\n }\n\n updateAxisPositions() {\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 );\n }\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\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 if (this.layout[axisLayoutProperty] != null) {\n Object.assign(this.layout[axisLayoutProperty], 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 {dh.Series} series The series to set the data array for.\n * @param {dh.plot.SourceType} sourceType The source type within that series to set the data for.\n * @param {Any[]} dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n const { name, plotStyle } = series;\n\n const property = ChartUtils.getPlotlyProperty(plotStyle, sourceType);\n const seriesData = this.seriesDataMap.get(name);\n seriesData[property] = dataArray;\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 {dh.Series} series The series to clean the data for\n */\n cleanSeries(series) {\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\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(x, xLow, xHigh);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh);\n }\n }\n }\n\n getData() {\n return this.data;\n }\n\n getLayout() {\n return this.layout;\n }\n\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired() {\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 {Map<String, String>} filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\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) {\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) {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"file":"FigureChartModel.js"}
1
+ {"version":3,"sources":["../src/FigureChartModel.js"],"names":["memoize","debounce","dh","Log","ChartModel","ChartUtils","log","module","FigureChartModel","constructor","figure","settings","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","addPendingSeries","ADD_SERIES_DEBOUNCE","data","layout","makeDefaultLayout","seriesDataMap","Map","pendingSeries","oneClicks","filterColumnMap","lastFilter","isConnected","seriesToProcess","Set","setTitle","getDefaultTitle","initAllSeries","updateAxisPositions","startListeningFigure","close","cancel","stopListeningFigure","charts","length","title","clear","activeSeriesNames","i","j","series","push","name","addSeries","allSeriesNames","keys","inactiveSeriesNames","filter","seriesName","indexOf","delete","getChartForSeries","error","axisTypeMap","groupArray","axes","seriesData","makeSeriesDataFromSeries","getSeriesVisibility","set","values","plotStyle","plot","SeriesPlotStyle","STACKED_BAR","barmode","PIE","hiddenlabels","getHiddenLabels","showlegend","oneClick","columns","updateLayoutFormats","subscribe","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","t","DEFAULT_MARGIN","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","Object","assign","sourceType","property","getPlotlyProperty","get","HISTOGRAM","xLow","xHigh","LINE","x","y","yLow","yHigh","error_x","getPlotlyErrorBars","error_y","getData","getLayout","getFilterColumnMap","isFilterRequired","find","requireAllFiltersToDisplay","setFilter","filterMap","warn","key","column","setValueForColumn","setFigure","updateSettings"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport ChartModel from './ChartModel';\nimport ChartUtils from './ChartUtils';\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.plot.Figure} figure The figure object created by the API\n * @param {Object} settings Chart settings\n */\n constructor(figure, settings = {}) {\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 // 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 this.addPendingSeries = debounce(\n this.addPendingSeries.bind(this),\n FigureChartModel.ADD_SERIES_DEBOUNCE\n );\n\n this.figure = figure;\n this.settings = settings;\n this.data = [];\n this.layout = ChartUtils.makeDefaultLayout();\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 close() {\n this.figure.close();\n this.addPendingSeries.cancel();\n this.stopListeningFigure();\n }\n\n getDefaultTitle() {\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() {\n this.oneClicks = [];\n this.filterColumnMap.clear();\n\n const { charts } = this.figure;\n const activeSeriesNames = [];\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; 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) {\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 = ChartUtils.groupArray(chart.axes, 'type');\n\n const seriesData = ChartUtils.makeSeriesDataFromSeries(\n series,\n axisTypeMap,\n ChartUtils.getSeriesVisibility(series.name, this.settings)\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) {\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 addPendingSeries() {\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 }\n\n subscribe(...args) {\n super.subscribe(...args);\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(...args) {\n super.unsubscribe(...args);\n\n if (this.listeners.length === 0) {\n this.unsubscribeFigure();\n }\n }\n\n subscribeFigure() {\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() {\n this.figure.unsubscribe();\n }\n\n startListeningFigure() {\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() {\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 => 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 => ChartUtils.wrapValue(value, columnType, timeZone);\n });\n\n /**\n * Gets the range parser for a particular column type\n */\n getRangeParser = memoize((columnType, formatter) => range => {\n let [rangeStart, rangeEnd] = range;\n const valueParser = this.getValueParser(columnType, formatter);\n rangeStart = valueParser(rangeStart);\n rangeEnd = valueParser(rangeEnd);\n return [rangeStart, rangeEnd];\n });\n\n /**\n * Gets the parser for parsing the range from an axis within the given chart\n */\n getAxisRangeParser = memoize((chart, formatter) => axis => {\n const source = ChartUtils.getSourceForAxis(chart, axis);\n if (source) {\n return this.getRangeParser(source.columnType, formatter);\n }\n\n return range => range;\n });\n\n handleDownsampleStart(event) {\n log.debug('Downsample started', event);\n\n this.fireDownsampleStart(event.detail);\n }\n\n handleDownsampleFinish(event) {\n log.debug('Downsample finished', event);\n\n this.fireDownsampleFinish(event.detail);\n }\n\n handleDownsampleFail(event) {\n log.error('Downsample failed', event);\n\n this.fireDownsampleFail(event.detail);\n }\n\n handleDownsampleNeeded(event) {\n log.info('Downsample needed', event);\n\n this.fireDownsampleNeeded(event.detail);\n }\n\n handleFigureUpdated(event) {\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) {\n log.error('Request failed', event);\n }\n\n /**\n * Resubscribe to the figure, should be done if settings change\n */\n resubscribe() {\n if (this.listeners.length > 0) {\n this.unsubscribeFigure();\n this.subscribeFigure();\n }\n }\n\n setFormatter(formatter) {\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(...args) {\n super.setDownsamplingDisabled(...args);\n\n this.resubscribe();\n }\n\n handleFigureDisconnected(event) {\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) {\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) {\n const { detail: series } = event;\n log.debug('handleFigureSeriesAdded', series);\n\n this.pendingSeries.push(series);\n\n this.addPendingSeries();\n }\n\n setDimensions(rect) {\n super.setDimensions(rect);\n\n this.updateAxisPositions();\n }\n\n setTitle(title) {\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 this.layout.margin.t =\n ChartUtils.DEFAULT_MARGIN.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT;\n this.layout.title.text = title;\n this.layout.title.pad.t =\n ChartUtils.DEFAULT_TITLE_PADDING.t +\n subtitleCount * ChartUtils.SUBTITLE_LINE_HEIGHT * 0.5;\n }\n\n getPlotWidth() {\n if (!this.rect || !this.rect.width) {\n return 0;\n }\n\n return Math.max(\n this.rect.width - this.layout.margin.l - this.layout.margin.r,\n 0\n );\n }\n\n getPlotHeight() {\n if (!this.rect || !this.rect.height) {\n return 0;\n }\n\n return Math.max(\n this.rect.height - this.layout.margin.t - this.layout.margin.b,\n 0\n );\n }\n\n updateAxisPositions() {\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 );\n }\n }\n\n /**\n * Updates the format patterns used\n */\n updateLayoutFormats() {\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 if (this.layout[axisLayoutProperty] != null) {\n Object.assign(this.layout[axisLayoutProperty], 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 {dh.Series} series The series to set the data array for.\n * @param {dh.plot.SourceType} sourceType The source type within that series to set the data for.\n * @param {Any[]} dataArray The array to use for the data for this series source.\n */\n setDataArrayForSeries(series, sourceType, dataArray) {\n const { name, plotStyle } = series;\n\n const property = ChartUtils.getPlotlyProperty(plotStyle, sourceType);\n const seriesData = this.seriesDataMap.get(name);\n seriesData[property] = dataArray;\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 {dh.Series} series The series to clean the data for\n */\n cleanSeries(series) {\n const { name, plotStyle } = series;\n const seriesData = this.seriesDataMap.get(name);\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(x, xLow, xHigh);\n }\n if (yLow && yHigh && yLow !== y) {\n seriesData.error_y = ChartUtils.getPlotlyErrorBars(y, yLow, yHigh);\n }\n }\n }\n\n getData() {\n return this.data;\n }\n\n getLayout() {\n return this.layout;\n }\n\n getFilterColumnMap() {\n return new Map(this.filterColumnMap);\n }\n\n isFilterRequired() {\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 {Map<String, String>} filterMap Map of filter column names to values\n */\n setFilter(filterMap) {\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) {\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) {\n this.settings = settings;\n }\n}\n\nexport default FigureChartModel;\n"],"file":"FigureChartModel.js"}
@@ -1,251 +1,201 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
+ import ChartModel from "./ChartModel.js";
4
+ import ChartTheme from "./ChartTheme.js";
5
+ import ChartUtils from "./ChartUtils.js";
6
+ /** Displays a basic random chark */
4
7
 
5
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
8
+ class MockChartModel extends ChartModel {
9
+ static makeRandomSeries(offset) {
10
+ var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
11
+ var steps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100;
12
+ var dates = [];
13
+ var values = [];
14
+ var smooth = [];
15
+ var linear = [];
16
+ var startDate = new Date();
17
+
18
+ for (var i = 0; i < steps; i += 1) {
19
+ var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i - steps);
20
+ dates.push("".concat(date.getFullYear(), "-").concat(date.getMonth() + 1, "-").concat(date.getDate()));
21
+ var v = (Math.sin(i / steps * offset) * steps / 3 + Math.cos(i * 0.2) * steps / 6 + Math.sin(i * 0.5) * steps / 10 + Math.random() * steps / 5 + i * MockChartModel.smoothing) * scale;
22
+ v = Math.round(v * 100) / 100; // 2 decimals only
23
+ // using steps acts as amplititude scaling based on value
24
+ // large sine wave for course shape + small sine waves for bumpiness +
25
+ // general randomness noise + index to be constantly up and to the right + smoothing factor
26
+
27
+ values.push(v);
28
+ linear.push(40 + i * MockChartModel.smoothing);
29
+ smooth.push(Math.sin(i / steps * offset) * steps / 3 + Math.random() * steps / 10 + i * MockChartModel.smoothing); // push a smoother version of the same thing
30
+ }
6
31
 
7
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
32
+ return {
33
+ x: dates,
34
+ y: values,
35
+ s: smooth,
36
+ l: linear
37
+ };
38
+ }
8
39
 
9
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
40
+ static makeScatter(series) {
41
+ return {
42
+ name: 'SCTR',
43
+ x: series.x,
44
+ y: series.y,
45
+ type: 'scattergl',
46
+ mode: 'markers',
47
+ hoverinfo: 'skip',
48
+ marker: {
49
+ size: 5
50
+ }
51
+ };
52
+ }
10
53
 
11
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
54
+ static makeArea(series) {
55
+ return {
56
+ name: 'AREA',
57
+ x: series.x,
58
+ y: series.s,
59
+ type: 'scatter',
60
+ mode: 'line',
61
+ fill: 'tozeroy',
62
+ hoverinfo: 'all',
63
+ line: {
64
+ color: ChartTheme.area_color,
65
+ width: 3 // area patten gets applied as hack in post render plot.ly callback + css
12
66
 
13
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
67
+ }
68
+ };
69
+ }
14
70
 
15
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
71
+ static makeTrendline(series) {
72
+ return {
73
+ // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot
74
+ name: 'Trendline <br>R<sup>2</sup> = 0.91',
75
+ x: series.x,
76
+ y: series.l,
77
+ type: 'scattergl',
78
+ mode: 'line',
79
+ hoverinfo: 'skip',
80
+ line: {
81
+ width: 3,
82
+ dash: 'dot',
83
+ // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple
84
+ color: ChartTheme.trend_color // chroma(c.$green).brighten(1.2).hex()
16
85
 
17
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
86
+ }
87
+ };
88
+ }
18
89
 
19
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
90
+ static makeErrorBand(series) {
91
+ // generate continouous error bands values and text
92
+ var erroryforward = [];
93
+ var errorybackward = [];
94
+
95
+ for (var i = 0; i < series.y.length; i += 1) {
96
+ var value = series.y[i];
97
+ erroryforward[i] = Math.round((value + 18) * 100) / 100;
98
+ errorybackward[i] = Math.round((value - 18) * 100) / 100;
99
+ } // makes a closed shape of points winding clockwise for y values
100
+
101
+
102
+ var errory = erroryforward.concat(errorybackward.reverse());
103
+ return {
104
+ name: 'error',
105
+ x: series.x.concat(series.x.slice().reverse()),
106
+ // winding for x values, that slice just clones so reverse doesn't apply inplace
107
+ y: errory,
108
+ type: 'scattergl',
109
+ mode: 'line',
110
+ hoverinfo: 'skip',
111
+ fill: 'toself',
112
+ // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render
113
+ fillcolor: ChartTheme.error_band_fill_color,
114
+ line: {
115
+ width: 0,
116
+ color: ChartTheme.error_band_line_color,
117
+ shape: 'spline'
118
+ }
119
+ };
120
+ }
20
121
 
21
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
122
+ static makeLine(series) {
123
+ return {
124
+ name: 'LINE',
125
+ x: series.x,
126
+ y: series.y,
127
+ type: 'scattergl',
128
+ mode: 'line',
129
+ hoverinfo: 'x+y+text+name',
130
+ line: {
131
+ color: ChartTheme.line_color,
132
+ width: 3
133
+ }
134
+ };
135
+ }
22
136
 
23
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
137
+ static makeRandomData() {
138
+ var series1 = MockChartModel.makeRandomSeries(6);
139
+ var areaPattern = MockChartModel.makeArea(series1);
140
+ var trendLine = MockChartModel.makeTrendline(series1);
141
+ var series2 = MockChartModel.makeRandomSeries(2);
142
+ var line = MockChartModel.makeLine(series2);
143
+ var errorBand = MockChartModel.makeErrorBand(series2);
144
+ return [areaPattern, trendLine, line, errorBand];
145
+ }
24
146
 
25
- import ChartModel from './ChartModel';
26
- import ChartTheme from './ChartTheme';
27
- import ChartUtils from './ChartUtils';
28
- /** Displays a basic random chark */
147
+ static makeDefaultLayout() {
148
+ var layout = ChartUtils.makeDefaultLayout();
149
+ layout.title = 'Chart';
150
+ layout.xaxis.title = 'Datestamp';
151
+ layout.yaxis.title = 'Price';
152
+ return layout;
153
+ }
29
154
 
30
- var MockChartModel = /*#__PURE__*/function (_ChartModel) {
31
- _inherits(MockChartModel, _ChartModel);
155
+ constructor() {
156
+ var {
157
+ data = MockChartModel.makeRandomData(),
158
+ layout = MockChartModel.makeDefaultLayout(),
159
+ filterFields = []
160
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
161
+ super();
162
+ this.data = data;
163
+ this.layout = layout;
164
+ this.filterFields = filterFields;
165
+ }
32
166
 
33
- var _super = _createSuper(MockChartModel);
167
+ getData() {
168
+ return this.data;
169
+ }
34
170
 
35
- function MockChartModel() {
36
- var _this;
171
+ getLayout() {
172
+ return this.layout;
173
+ }
37
174
 
38
- var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
39
- _ref$data = _ref.data,
40
- data = _ref$data === void 0 ? MockChartModel.makeRandomData() : _ref$data,
41
- _ref$layout = _ref.layout,
42
- layout = _ref$layout === void 0 ? MockChartModel.makeDefaultLayout() : _ref$layout,
43
- _ref$filterFields = _ref.filterFields,
44
- filterFields = _ref$filterFields === void 0 ? [] : _ref$filterFields;
175
+ getFilterColumnMap() {
176
+ var map = new Map();
45
177
 
46
- _classCallCheck(this, MockChartModel);
178
+ for (var i = 0; i < this.filterFields.length; i += 1) {
179
+ var name = this.filterFields[i];
180
+ var type = 'java.lang.String';
181
+ map.set(name, {
182
+ name,
183
+ type
184
+ });
185
+ }
47
186
 
48
- _this = _super.call(this);
49
- _this.data = data;
50
- _this.layout = layout;
51
- _this.filterFields = filterFields;
52
- return _this;
187
+ return map;
53
188
  }
54
189
 
55
- _createClass(MockChartModel, [{
56
- key: "getData",
57
- value: function getData() {
58
- return this.data;
59
- }
60
- }, {
61
- key: "getLayout",
62
- value: function getLayout() {
63
- return this.layout;
64
- }
65
- }, {
66
- key: "getFilterColumnMap",
67
- value: function getFilterColumnMap() {
68
- var map = new Map();
69
-
70
- for (var i = 0; i < this.filterFields.length; i += 1) {
71
- var name = this.filterFields[i];
72
- var type = 'java.lang.String';
73
- map.set(name, {
74
- name: name,
75
- type: type
76
- });
77
- }
78
-
79
- return map;
80
- }
81
- }, {
82
- key: "isFilterRequired",
83
- value: function isFilterRequired() {
84
- return this.filterFields.length > 0;
85
- }
86
- }, {
87
- key: "setFilter",
88
- value: function setFilter() {
89
- this.fireUpdate(this.data);
90
- }
91
- }], [{
92
- key: "makeRandomSeries",
93
- value: function makeRandomSeries(offset) {
94
- var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
95
- var steps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 100;
96
- var dates = [];
97
- var values = [];
98
- var smooth = [];
99
- var linear = [];
100
- var startDate = new Date();
101
-
102
- for (var i = 0; i < steps; i += 1) {
103
- var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i - steps);
104
- dates.push("".concat(date.getFullYear(), "-").concat(date.getMonth() + 1, "-").concat(date.getDate()));
105
- var v = (Math.sin(i / steps * offset) * steps / 3 + Math.cos(i * 0.2) * steps / 6 + Math.sin(i * 0.5) * steps / 10 + Math.random() * steps / 5 + i * MockChartModel.smoothing) * scale;
106
- v = Math.round(v * 100) / 100; // 2 decimals only
107
- // using steps acts as amplititude scaling based on value
108
- // large sine wave for course shape + small sine waves for bumpiness +
109
- // general randomness noise + index to be constantly up and to the right + smoothing factor
110
-
111
- values.push(v);
112
- linear.push(40 + i * MockChartModel.smoothing);
113
- smooth.push(Math.sin(i / steps * offset) * steps / 3 + Math.random() * steps / 10 + i * MockChartModel.smoothing); // push a smoother version of the same thing
114
- }
190
+ isFilterRequired() {
191
+ return this.filterFields.length > 0;
192
+ }
115
193
 
116
- return {
117
- x: dates,
118
- y: values,
119
- s: smooth,
120
- l: linear
121
- };
122
- }
123
- }, {
124
- key: "makeScatter",
125
- value: function makeScatter(series) {
126
- return {
127
- name: 'SCTR',
128
- x: series.x,
129
- y: series.y,
130
- type: 'scattergl',
131
- mode: 'markers',
132
- hoverinfo: 'skip',
133
- marker: {
134
- size: 5
135
- }
136
- };
137
- }
138
- }, {
139
- key: "makeArea",
140
- value: function makeArea(series) {
141
- return {
142
- name: 'AREA',
143
- x: series.x,
144
- y: series.s,
145
- type: 'scatter',
146
- mode: 'line',
147
- fill: 'tozeroy',
148
- hoverinfo: 'all',
149
- line: {
150
- color: ChartTheme.area_color,
151
- width: 3 // area patten gets applied as hack in post render plot.ly callback + css
152
-
153
- }
154
- };
155
- }
156
- }, {
157
- key: "makeTrendline",
158
- value: function makeTrendline(series) {
159
- return {
160
- // we probably want to toss the line formula in legend I guess? either that or render it as text manually on plot
161
- name: 'Trendline <br>R<sup>2</sup> = 0.91',
162
- x: series.x,
163
- y: series.l,
164
- type: 'scattergl',
165
- mode: 'line',
166
- hoverinfo: 'skip',
167
- line: {
168
- width: 3,
169
- dash: 'dot',
170
- // trendlines should follow some sort of color convention + dots/dashed. Remember there can multiple
171
- color: ChartTheme.trend_color // chroma(c.$green).brighten(1.2).hex()
172
-
173
- }
174
- };
175
- }
176
- }, {
177
- key: "makeErrorBand",
178
- value: function makeErrorBand(series) {
179
- // generate continouous error bands values and text
180
- var erroryforward = [];
181
- var errorybackward = [];
182
-
183
- for (var i = 0; i < series.y.length; i += 1) {
184
- var value = series.y[i];
185
- erroryforward[i] = Math.round((value + 18) * 100) / 100;
186
- errorybackward[i] = Math.round((value - 18) * 100) / 100;
187
- } // makes a closed shape of points winding clockwise for y values
188
-
189
-
190
- var errory = erroryforward.concat(errorybackward.reverse());
191
- return {
192
- name: 'error',
193
- x: series.x.concat(series.x.slice().reverse()),
194
- // winding for x values, that slice just clones so reverse doesn't apply inplace
195
- y: errory,
196
- type: 'scattergl',
197
- mode: 'line',
198
- hoverinfo: 'skip',
199
- fill: 'toself',
200
- // there's some ordering bug with scattergl where if the areas traces are ordered after the lines they don't render
201
- fillcolor: ChartTheme.error_band_fill_color,
202
- line: {
203
- width: 0,
204
- color: ChartTheme.error_band_line_color,
205
- shape: 'spline'
206
- }
207
- };
208
- }
209
- }, {
210
- key: "makeLine",
211
- value: function makeLine(series) {
212
- return {
213
- name: 'LINE',
214
- x: series.x,
215
- y: series.y,
216
- type: 'scattergl',
217
- mode: 'line',
218
- hoverinfo: 'x+y+text+name',
219
- line: {
220
- color: ChartTheme.line_color,
221
- width: 3
222
- }
223
- };
224
- }
225
- }, {
226
- key: "makeRandomData",
227
- value: function makeRandomData() {
228
- var series1 = MockChartModel.makeRandomSeries(6);
229
- var areaPattern = MockChartModel.makeArea(series1);
230
- var trendLine = MockChartModel.makeTrendline(series1);
231
- var series2 = MockChartModel.makeRandomSeries(2);
232
- var line = MockChartModel.makeLine(series2);
233
- var errorBand = MockChartModel.makeErrorBand(series2);
234
- return [areaPattern, trendLine, line, errorBand];
235
- }
236
- }, {
237
- key: "makeDefaultLayout",
238
- value: function makeDefaultLayout() {
239
- var layout = ChartUtils.makeDefaultLayout();
240
- layout.title = 'Chart';
241
- layout.xaxis.title = 'Datestamp';
242
- layout.yaxis.title = 'Price';
243
- return layout;
244
- }
245
- }]);
194
+ setFilter() {
195
+ this.fireUpdate(this.data);
196
+ }
246
197
 
247
- return MockChartModel;
248
- }(ChartModel);
198
+ }
249
199
 
250
200
  _defineProperty(MockChartModel, "smoothing", 1.5);
251
201