@deephaven/chart 0.87.1-beta.4 → 0.87.1-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chart.d.ts +1 -1
- package/dist/Chart.d.ts.map +1 -1
- package/dist/Chart.js +5 -3
- package/dist/Chart.js.map +1 -1
- package/package.json +10 -10
package/dist/Chart.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ interface ChartProps {
|
|
|
17
17
|
settings: ChartSettings;
|
|
18
18
|
isActive: boolean;
|
|
19
19
|
Plotly: typeof Plotly;
|
|
20
|
-
containerRef?: React.
|
|
20
|
+
containerRef?: React.Ref<HTMLDivElement>;
|
|
21
21
|
onDisconnect: () => void;
|
|
22
22
|
onReconnect: () => void;
|
|
23
23
|
onUpdate: (obj: {
|
package/dist/Chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AASlE,OAAO,EAKL,6BAA6B,EAC7B,6BAA6B,EAE7B,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AASlE,OAAO,EAKL,6BAA6B,EAC7B,6BAA6B,EAE7B,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAchC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,cAAc,CAAC;AAMtB,KAAK,aAAa,GAAG,oBAAoB,GACvC,sBAAsB,GAAG;IACvB,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEJ,UAAU,UAAU;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAElB,4EAA4E;IAC5E,QAAQ,EAAE,aAAa,CAAC;IAExB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;CACpE;AAID,UAAU,mBAAoB,SAAQ,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtE,KAAK,EAAE,UAAU,CAAC;CACnB;AAgrBD,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,KAAK,EAAE,mBAAmB,GACzB,GAAG,CAAC,OAAO,CAIb"}
|
package/dist/Chart.js
CHANGED
|
@@ -9,6 +9,7 @@ import memoize from 'memoize-one';
|
|
|
9
9
|
import { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';
|
|
10
10
|
import { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';
|
|
11
11
|
import Log from '@deephaven/log';
|
|
12
|
+
import { mergeRefs } from '@deephaven/react-hooks';
|
|
12
13
|
import { bindAllMethods } from '@deephaven/utils';
|
|
13
14
|
import createPlotlyComponent from "./plotly/createPlotlyComponent.js";
|
|
14
15
|
import Plotly from "./plotly/Plotly.js";
|
|
@@ -55,12 +56,12 @@ class Chart extends Component {
|
|
|
55
56
|
return isDownsamplingDisabled ? undefined : 'fill-active';
|
|
56
57
|
}
|
|
57
58
|
constructor(props) {
|
|
58
|
-
var _props$containerRef;
|
|
59
59
|
super(props);
|
|
60
60
|
_defineProperty(this, "currentSeries", void 0);
|
|
61
61
|
_defineProperty(this, "PlotComponent", void 0);
|
|
62
62
|
_defineProperty(this, "plot", void 0);
|
|
63
63
|
_defineProperty(this, "plotWrapper", void 0);
|
|
64
|
+
_defineProperty(this, "plotWrapperMerged", void 0);
|
|
64
65
|
_defineProperty(this, "columnFormats", void 0);
|
|
65
66
|
_defineProperty(this, "dateTimeFormatterOptions", void 0);
|
|
66
67
|
_defineProperty(this, "decimalFormatOptions", void 0);
|
|
@@ -142,7 +143,8 @@ class Chart extends Component {
|
|
|
142
143
|
bindAllMethods(this);
|
|
143
144
|
this.PlotComponent = createPlotlyComponent(props.Plotly);
|
|
144
145
|
this.plot = /*#__PURE__*/React.createRef();
|
|
145
|
-
this.plotWrapper =
|
|
146
|
+
this.plotWrapper = /*#__PURE__*/React.createRef();
|
|
147
|
+
this.plotWrapperMerged = mergeRefs(this.plotWrapper, props.containerRef);
|
|
146
148
|
this.columnFormats = [];
|
|
147
149
|
this.dateTimeFormatterOptions = {};
|
|
148
150
|
this.decimalFormatOptions = {};
|
|
@@ -594,7 +596,7 @@ class Chart extends Component {
|
|
|
594
596
|
var isPlotShown = data != null;
|
|
595
597
|
return /*#__PURE__*/_jsxs("div", {
|
|
596
598
|
className: "h-100 w-100 chart-wrapper",
|
|
597
|
-
ref: this.
|
|
599
|
+
ref: this.plotWrapperMerged,
|
|
598
600
|
children: [isPlotShown && /*#__PURE__*/_jsx(PlotComponent
|
|
599
601
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
600
602
|
// @ts-ignore
|
package/dist/Chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","bindAllMethods","createPlotlyComponent","Plotly","ChartModel","ChartErrorOverlay","ChartUtils","DownsamplingError","useChartTheme","jsx","_jsx","jsxs","_jsxs","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","concat","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","_props$containerRef","_defineProperty","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","Boolean","push","name","title","click","toggleErrorMessage","attr","hasError","handleDownsampleClick","has2D","some","_ref","type","includes","has3D","_ref2","buttons2D","buttons3D","displaylogo","responsive","displayModeBar","modeBarButtons","PlotComponent","plot","createRef","plotWrapper","containerRef","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","resizeObserver","window","ResizeObserver","handleResize","state","shownError","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","model","subscribe","current","observe","handleThemeChange","componentDidUpdate","prevProps","settings","theme","updateFormatterSettings","unsubscribe","componentWillUnmount","disconnect","getPlotRect","_this$plotWrapper$cur","_this$plotWrapper$cur2","getBoundingClientRect","setState","_ref3","getData","_objectSpread","getLayout","rect","height","debug2","handleModelEvent","handleAfterPlot","_ref4","setDownsamplingDisabled","handleErrorClose","handleDownsampleErrorClose","event","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","_detail$message","message","onError","EVENT_ERROR","Error","debug","handlePlotUpdate","figure","ranges","getLayoutRanges","isRangesChanged","handleRelayout","changes","hiddenlabels","onSettingsChanged","hiddenSeries","handleRestyle","_ref5","seriesIndexes","Object","keys","reduce","acc","_ref6","visible","dh","chartUtils","_ref7","template","makeDefaultTemplate","_ref8","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","webgl","updateRenderOptions","formatter","setFormatter","renderOptions","setRenderOptions","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","style","errorMessage","onDiscard","onConfirm","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","ChartContainer","chartTheme"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n ColumnFormatSettings,\n DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n Config as PlotlyConfig,\n Layout,\n Icon,\n Data,\n PlotData,\n ModeBarButtonAny,\n} from 'plotly.js';\nimport type { PlotParams } from 'react-plotly.js';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from './plotly/createPlotlyComponent';\nimport Plotly from './plotly/Plotly';\nimport ChartModel from './ChartModel';\nimport ChartErrorOverlay from './ChartErrorOverlay';\nimport { ChartTheme } from './ChartTheme';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport './Chart.scss';\nimport DownsamplingError from './DownsamplingError';\nimport useChartTheme from './useChartTheme';\n\nconst log = Log.module('Chart');\n\ntype ChartSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n webgl?: boolean;\n };\n\ninterface ChartProps {\n model: ChartModel;\n theme: ChartTheme;\n\n /** User settings that are relevant to the chart, e.g. formatter settings */\n settings: ChartSettings;\n\n isActive: boolean;\n Plotly: typeof Plotly;\n containerRef?: React.RefObject<HTMLDivElement>;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n\n /** Called when the settings for the ChartModel are changed */\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\n// All of the ChartProps have default values except for model in the Chart\n// component, hence the Partial here.\ninterface ChartContainerProps extends Partial<Omit<ChartProps, 'theme'>> {\n model: ChartModel;\n}\n\ninterface ChartState {\n data: Partial<Data>[] | null;\n /** An error specific to downsampling */\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n\n /** Any other kind of error */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n}\n\nclass Chart extends Component<ChartProps, ChartState> {\n static defaultProps = {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n webgl: true,\n },\n Plotly,\n onDisconnect: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon: IconDefinition): Icon {\n const [width, , , , path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n const stringPath = `${path}`;\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: `matrix(1, 0, 0, 1, 0, 0)`,\n };\n }\n\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n bindAllMethods(this);\n\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = React.createRef();\n this.plotWrapper = props.containerRef ?? React.createRef();\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n error: null,\n shownError: null,\n layout: {\n datarevision: 0,\n },\n revision: 0,\n };\n }\n\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive, model } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n\n this.handleThemeChange();\n }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, model, settings, theme } = this.props;\n this.updateFormatterSettings(settings);\n\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.unsubscribe(model);\n\n this.resizeObserver.disconnect();\n }\n\n currentSeries: number;\n\n PlotComponent: React.ComponentType<PlotParams>;\n\n plot: RefObject<typeof this.PlotComponent>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n webgl?: boolean;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n getCachedConfig = memoize(\n (\n downsamplingError: unknown,\n isDownsampleFinished: boolean,\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean,\n data: Partial<Data>[],\n error: unknown\n ): Partial<PlotlyConfig> => {\n const customButtons: ModeBarButtonAny[] = [];\n const hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(`${downsamplingError}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n const hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: `Error: ${error}`,\n title: `Error`,\n click: () => {\n this.toggleErrorMessage(`${error}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n hasDownsampleError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr,\n });\n }\n\n const has2D = data.some(\n ({ type }) => type != null && !type.includes('3d')\n );\n const has3D = data.some(\n ({ type }) => type != null && type.includes('3d')\n );\n\n const buttons2D = [\n 'zoomIn2d',\n 'zoomOut2d',\n 'autoScale2d',\n 'resetScale2d',\n ] as const;\n const buttons3D = [\n 'orbitRotation',\n 'tableRotation',\n 'resetCameraDefault3d',\n ] as const;\n\n return {\n displaylogo: false,\n\n // scales the plot to the container size\n // https://github.com/plotly/react-plotly.js/issues/102\n responsive: true,\n\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError\n ? true\n : ('hover' as const),\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'], // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n\n this.setState(({ layout }) => ({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n }));\n }\n\n subscribe(model: ChartModel): void {\n if (this.isSubscribed) {\n return;\n }\n\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n\n unsubscribe(model: ChartModel): void {\n if (!this.isSubscribed) {\n return;\n }\n\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleErrorClose(): void {\n this.setState({ shownError: null });\n }\n\n handleDownsampleErrorClose(): void {\n this.setState({ downsamplingError: null });\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1,\n };\n });\n\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED: {\n const downsamplingError = detail.message ?? detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR: {\n const error = `${detail}`;\n this.setState({ error });\n const { onError } = this.props;\n onError(new Error(error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: Readonly<{ layout: Partial<Layout> }>): void {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: readonly [\n Record<string, unknown>,\n number[],\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = (data as Partial<PlotData>[]).reduce(\n (acc: string[], { name, visible }) =>\n name != null && visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n handleThemeChange(): void {\n const { theme, model } = this.props;\n const { dh } = model;\n const chartUtils = new ChartUtils(dh);\n\n this.setState(({ layout }) => ({\n layout: {\n ...layout,\n template: chartUtils.makeDefaultTemplate(theme),\n },\n }));\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error: string): void {\n this.setState(({ shownError }) => ({\n shownError: shownError === error ? null : error,\n }));\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n updateFormatterSettings(settings: ChartSettings): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions =\n FormatterUtils.getDateTimeFormatterOptions(settings);\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n\n if (this.webgl !== settings.webgl) {\n this.webgl = settings.webgl;\n this.updateRenderOptions();\n }\n }\n\n updateFormatter(): void {\n const { model } = this.props;\n const formatter = new Formatter(\n model.dh,\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n model.setFormatter(formatter);\n }\n\n updateRenderOptions(): void {\n const { model } = this.props;\n const renderOptions = { webgl: this.webgl };\n model.setRenderOptions(renderOptions);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n const { Plotly: PlotlyProp } = this.props;\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(\n (this.plot.current as unknown as { el: HTMLElement }).el,\n {\n autosize: true,\n }\n ).catch((e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n\n render(): ReactElement {\n const { PlotComponent } = this;\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const isPlotShown = data != null;\n\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapper}>\n {isPlotShown && (\n <PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ref={this.plot}\n data={data}\n layout={layout}\n revision={revision}\n config={config}\n onAfterPlot={this.handleAfterPlot}\n onError={log.error}\n onRelayout={this.handleRelayout}\n onUpdate={this.handlePlotUpdate}\n onRestyle={this.handleRestyle}\n style={{ height: '100%', width: '100%' }}\n />\n )}\n {downsamplingError != null && shownError == null && (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n )}\n {shownError != null && (\n <ChartErrorOverlay\n errorMessage={`${shownError}`}\n onDiscard={() => {\n this.handleErrorClose();\n }}\n />\n )}\n </div>\n );\n }\n}\n\nexport default function ChartContainer(\n props: ChartContainerProps\n): JSX.Element {\n const chartTheme = useChartTheme();\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <Chart {...props} theme={chartTheme} />;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","mergeRefs","bindAllMethods","createPlotlyComponent","Plotly","ChartModel","ChartErrorOverlay","ChartUtils","DownsamplingError","useChartTheme","jsx","_jsx","jsxs","_jsxs","log","module","Chart","convertIcon","faIcon","width","path","icon","stringPath","concat","ascent","descent","transform","downsampleButtonTitle","isDownsampleInProgress","isDownsamplingDisabled","downsampleButtonAttr","undefined","constructor","props","_defineProperty","downsamplingError","isDownsampleFinished","data","error","customButtons","hasDownsampleError","Boolean","push","name","title","click","toggleErrorMessage","attr","hasError","handleDownsampleClick","has2D","some","_ref","type","includes","has3D","_ref2","buttons2D","buttons3D","displaylogo","responsive","displayModeBar","modeBarButtons","PlotComponent","plot","createRef","plotWrapper","plotWrapperMerged","containerRef","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","resizeObserver","window","ResizeObserver","handleResize","state","shownError","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","model","subscribe","current","observe","handleThemeChange","componentDidUpdate","prevProps","settings","theme","updateFormatterSettings","unsubscribe","componentWillUnmount","disconnect","getPlotRect","_this$plotWrapper$cur","_this$plotWrapper$cur2","getBoundingClientRect","setState","_ref3","getData","_objectSpread","getLayout","rect","height","debug2","handleModelEvent","handleAfterPlot","_ref4","setDownsamplingDisabled","handleErrorClose","handleDownsampleErrorClose","event","detail","EVENT_UPDATED","onUpdate","isLoading","EVENT_LOADFINISHED","EVENT_DISCONNECT","onDisconnect","EVENT_RECONNECT","onReconnect","EVENT_DOWNSAMPLESTARTED","EVENT_DOWNSAMPLEFINISHED","EVENT_DOWNSAMPLENEEDED","EVENT_DOWNSAMPLEFAILED","_detail$message","message","onError","EVENT_ERROR","Error","debug","handlePlotUpdate","figure","ranges","getLayoutRanges","isRangesChanged","handleRelayout","changes","hiddenlabels","onSettingsChanged","hiddenSeries","handleRestyle","_ref5","seriesIndexes","Object","keys","reduce","acc","_ref6","visible","dh","chartUtils","_ref7","template","makeDefaultTemplate","_ref8","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","webgl","updateRenderOptions","formatter","setFormatter","renderOptions","setRenderOptions","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","style","errorMessage","onDiscard","onConfirm","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","ChartContainer","chartTheme"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n DateTimeColumnFormatterOptions,\n DecimalColumnFormatterOptions,\n IntegerColumnFormatterOptions,\n FormattingRule,\n ColumnFormatSettings,\n DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n Config as PlotlyConfig,\n Layout,\n Icon,\n Data,\n PlotData,\n ModeBarButtonAny,\n} from 'plotly.js';\nimport type { PlotParams } from 'react-plotly.js';\nimport { mergeRefs } from '@deephaven/react-hooks';\nimport { bindAllMethods } from '@deephaven/utils';\nimport createPlotlyComponent from './plotly/createPlotlyComponent';\nimport Plotly from './plotly/Plotly';\nimport ChartModel from './ChartModel';\nimport ChartErrorOverlay from './ChartErrorOverlay';\nimport { ChartTheme } from './ChartTheme';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport './Chart.scss';\nimport DownsamplingError from './DownsamplingError';\nimport useChartTheme from './useChartTheme';\n\nconst log = Log.module('Chart');\n\ntype ChartSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n webgl?: boolean;\n };\n\ninterface ChartProps {\n model: ChartModel;\n theme: ChartTheme;\n\n /** User settings that are relevant to the chart, e.g. formatter settings */\n settings: ChartSettings;\n\n isActive: boolean;\n Plotly: typeof Plotly;\n containerRef?: React.Ref<HTMLDivElement>;\n onDisconnect: () => void;\n onReconnect: () => void;\n onUpdate: (obj: { isLoading: boolean }) => void;\n onError: (error: Error) => void;\n\n /** Called when the settings for the ChartModel are changed */\n onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\n}\n\n// All of the ChartProps have default values except for model in the Chart\n// component, hence the Partial here.\ninterface ChartContainerProps extends Partial<Omit<ChartProps, 'theme'>> {\n model: ChartModel;\n}\n\ninterface ChartState {\n data: Partial<Data>[] | null;\n /** An error specific to downsampling */\n downsamplingError: unknown;\n isDownsampleFinished: boolean;\n isDownsampleInProgress: boolean;\n isDownsamplingDisabled: boolean;\n\n /** Any other kind of error */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n}\n\nclass Chart extends Component<ChartProps, ChartState> {\n static defaultProps = {\n isActive: true,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n formatter: [],\n webgl: true,\n },\n Plotly,\n onDisconnect: (): void => undefined,\n onReconnect: (): void => undefined,\n onUpdate: (): void => undefined,\n onError: (): void => undefined,\n onSettingsChanged: (): void => undefined,\n };\n\n /**\n * Convert a font awesome icon definition to a plotly icon definition\n * @param faIcon The icon to convert\n */\n static convertIcon(faIcon: IconDefinition): Icon {\n const [width, , , , path] = faIcon.icon;\n // By default the icons are flipped upside down, so we need to add our own transform\n // https://github.com/plotly/plotly.js/issues/1335\n const stringPath = `${path}`;\n return {\n width,\n path: stringPath,\n ascent: width,\n descent: 0,\n transform: `matrix(1, 0, 0, 1, 0, 0)`,\n };\n }\n\n static downsampleButtonTitle(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string {\n if (isDownsampleInProgress) {\n return 'Downsampling in progress...';\n }\n\n return isDownsamplingDisabled\n ? 'Downsampling disabled, click to enable'\n : 'Downsampling enabled, click to disable';\n }\n\n static downsampleButtonAttr(\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean\n ): string | undefined {\n if (isDownsampleInProgress) {\n return 'animation-spin';\n }\n\n return isDownsamplingDisabled ? undefined : 'fill-active';\n }\n\n constructor(props: ChartProps) {\n super(props);\n\n bindAllMethods(this);\n\n this.PlotComponent = createPlotlyComponent(props.Plotly);\n this.plot = React.createRef();\n this.plotWrapper = React.createRef();\n this.plotWrapperMerged = mergeRefs(this.plotWrapper, props.containerRef);\n this.columnFormats = [];\n this.dateTimeFormatterOptions = {};\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.isSubscribed = false;\n this.isLoadedFired = false;\n this.currentSeries = 0;\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n\n this.state = {\n data: null,\n downsamplingError: null,\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n error: null,\n shownError: null,\n layout: {\n datarevision: 0,\n },\n revision: 0,\n };\n }\n\n componentDidMount(): void {\n // Need to make sure the model dimensions are up to date before initializing the data\n this.updateDimensions();\n this.updateModelDimensions();\n\n this.initData();\n this.initFormatter();\n\n const { isActive, model } = this.props;\n if (isActive) {\n this.subscribe(model);\n }\n if (this.plotWrapper.current != null) {\n this.resizeObserver.observe(this.plotWrapper.current);\n }\n\n this.handleThemeChange();\n }\n\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, model, settings, theme } = this.props;\n this.updateFormatterSettings(settings);\n\n if (model !== prevProps.model) {\n this.unsubscribe(prevProps.model);\n this.subscribe(model);\n }\n\n if (isActive !== prevProps.isActive) {\n if (isActive) {\n this.updateDimensions();\n this.subscribe(model);\n } else {\n this.unsubscribe(model);\n }\n }\n\n if (theme !== prevProps.theme) {\n this.handleThemeChange();\n }\n }\n\n componentWillUnmount(): void {\n const { model } = this.props;\n this.unsubscribe(model);\n\n this.resizeObserver.disconnect();\n }\n\n currentSeries: number;\n\n PlotComponent: React.ComponentType<PlotParams>;\n\n plot: RefObject<typeof this.PlotComponent>;\n\n plotWrapper: RefObject<HTMLDivElement>;\n\n plotWrapperMerged: React.RefCallback<HTMLDivElement>;\n\n columnFormats?: FormattingRule[];\n\n dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;\n\n decimalFormatOptions: DecimalColumnFormatterOptions;\n\n integerFormatOptions: IntegerColumnFormatterOptions;\n\n webgl?: boolean;\n\n rect?: DOMRect;\n\n ranges?: unknown;\n\n isSubscribed: boolean;\n\n isLoadedFired: boolean;\n\n // Listen for resizing of the element and update the canvas appropriately\n resizeObserver: ResizeObserver;\n\n getCachedConfig = memoize(\n (\n downsamplingError: unknown,\n isDownsampleFinished: boolean,\n isDownsampleInProgress: boolean,\n isDownsamplingDisabled: boolean,\n data: Partial<Data>[],\n error: unknown\n ): Partial<PlotlyConfig> => {\n const customButtons: ModeBarButtonAny[] = [];\n const hasDownsampleError = Boolean(downsamplingError);\n if (hasDownsampleError) {\n customButtons.push({\n name: `Downsampling failed: ${downsamplingError}`,\n title: 'Downsampling failed',\n click: () => {\n this.toggleErrorMessage(`${downsamplingError}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n const hasError = Boolean(error);\n if (hasError) {\n customButtons.push({\n name: `Error: ${error}`,\n title: `Error`,\n click: () => {\n this.toggleErrorMessage(`${error}`);\n },\n icon: Chart.convertIcon(dhWarningFilled),\n attr: 'fill-warning',\n });\n }\n\n if (\n isDownsampleFinished ||\n isDownsampleInProgress ||\n isDownsamplingDisabled ||\n hasDownsampleError\n ) {\n const name = Chart.downsampleButtonTitle(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n const attr = Chart.downsampleButtonAttr(\n isDownsampleInProgress,\n isDownsamplingDisabled\n );\n\n const icon = isDownsampleInProgress ? vsLoading : dhGraphLineDown;\n customButtons.push({\n name,\n title: 'Downsampling status',\n icon: Chart.convertIcon(icon),\n click: this.handleDownsampleClick,\n attr,\n });\n }\n\n const has2D = data.some(\n ({ type }) => type != null && !type.includes('3d')\n );\n const has3D = data.some(\n ({ type }) => type != null && type.includes('3d')\n );\n\n const buttons2D = [\n 'zoomIn2d',\n 'zoomOut2d',\n 'autoScale2d',\n 'resetScale2d',\n ] as const;\n const buttons3D = [\n 'orbitRotation',\n 'tableRotation',\n 'resetCameraDefault3d',\n ] as const;\n\n return {\n displaylogo: false,\n\n // scales the plot to the container size\n // https://github.com/plotly/react-plotly.js/issues/102\n responsive: true,\n\n // Display the mode bar if there's an error or downsampling so user can see progress\n // Yes, the value is a boolean or the string 'hover': https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js#L249\n displayModeBar:\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n isDownsampleInProgress || hasDownsampleError || hasError\n ? true\n : ('hover' as const),\n\n // Each array gets grouped together in the mode bar\n modeBarButtons: [\n customButtons,\n ['toImage'],\n ['zoom2d', 'pan2d'], // These work the same for both 2d and 3d\n [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])],\n ],\n };\n }\n );\n\n getPlotRect(): DOMRect | null {\n return this.plotWrapper.current?.getBoundingClientRect() ?? null;\n }\n\n initData(): void {\n const { model } = this.props;\n\n this.setState(({ layout }) => ({\n data: model.getData(),\n layout: {\n ...layout,\n ...model.getLayout(),\n },\n }));\n }\n\n subscribe(model: ChartModel): void {\n if (this.isSubscribed) {\n return;\n }\n\n if (!this.rect || this.rect.width === 0 || this.rect.height === 0) {\n log.debug2('Delaying subscription until model dimensions are set');\n return;\n }\n model.subscribe(this.handleModelEvent);\n this.isSubscribed = true;\n }\n\n unsubscribe(model: ChartModel): void {\n if (!this.isSubscribed) {\n return;\n }\n\n model.unsubscribe(this.handleModelEvent);\n this.isSubscribed = false;\n }\n\n handleAfterPlot(): void {\n if (this.plot.current != null) {\n // TODO: Translate whatever Don was doing in plotting.js in the afterplot here so that area graphs show up properly\n }\n }\n\n handleDownsampleClick(): void {\n this.setState(\n ({ isDownsamplingDisabled }) => ({\n downsamplingError: null,\n isDownsampleInProgress: false,\n isDownsampleFinished: false,\n isDownsamplingDisabled: !isDownsamplingDisabled,\n }),\n () => {\n const { model } = this.props;\n const { isDownsamplingDisabled } = this.state;\n model.setDownsamplingDisabled(isDownsamplingDisabled);\n }\n );\n }\n\n handleErrorClose(): void {\n this.setState({ shownError: null });\n }\n\n handleDownsampleErrorClose(): void {\n this.setState({ downsamplingError: null });\n }\n\n handleModelEvent(event: CustomEvent): void {\n const { type, detail } = event;\n log.debug2('Received data update', type, detail);\n\n switch (type) {\n case ChartModel.EVENT_UPDATED: {\n this.currentSeries += 1;\n this.setState(state => {\n const { layout, revision } = state;\n if (typeof layout.datarevision === 'number') {\n layout.datarevision += 1;\n }\n return {\n data: detail,\n layout,\n revision: revision + 1,\n };\n });\n\n const { onUpdate } = this.props;\n onUpdate({ isLoading: !this.isLoadedFired });\n break;\n }\n case ChartModel.EVENT_LOADFINISHED: {\n const { onUpdate } = this.props;\n this.isLoadedFired = true;\n onUpdate({ isLoading: false });\n break;\n }\n case ChartModel.EVENT_DISCONNECT: {\n const { onDisconnect } = this.props;\n onDisconnect();\n break;\n }\n case ChartModel.EVENT_RECONNECT: {\n const { onReconnect } = this.props;\n onReconnect();\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLESTARTED: {\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: true,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLEFINISHED: {\n this.setState({\n isDownsampleFinished: true,\n isDownsampleInProgress: false,\n downsamplingError: null,\n });\n break;\n }\n case ChartModel.EVENT_DOWNSAMPLENEEDED:\n case ChartModel.EVENT_DOWNSAMPLEFAILED: {\n const downsamplingError = detail.message ?? detail;\n this.setState({\n isDownsampleFinished: false,\n isDownsampleInProgress: false,\n isDownsamplingDisabled: false,\n downsamplingError,\n });\n\n const { onError } = this.props;\n onError(new DownsamplingError(downsamplingError));\n break;\n }\n case ChartModel.EVENT_ERROR: {\n const error = `${detail}`;\n this.setState({ error });\n const { onError } = this.props;\n onError(new Error(error));\n break;\n }\n default:\n log.debug('Unknown event type', type, event);\n }\n }\n\n handlePlotUpdate(figure: Readonly<{ layout: Partial<Layout> }>): void {\n // User could have modified zoom/pan here, update the model dimensions\n // We don't need to update the datarevision, as we don't have any data changes\n // until an update comes back from the server anyway\n const { layout } = figure;\n const ranges = ChartUtils.getLayoutRanges(layout);\n\n const isRangesChanged = !deepEqual(ranges, this.ranges);\n\n if (isRangesChanged) {\n this.ranges = ranges;\n\n this.updateModelDimensions(true);\n }\n }\n\n handleRelayout(changes: { hiddenlabels?: string[] }): void {\n log.debug('handleRelayout', changes);\n if (changes.hiddenlabels != null) {\n const { onSettingsChanged } = this.props;\n // Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes\n // Series visibility for other types of charts is handled in handleRestyle\n const hiddenSeries = [...changes.hiddenlabels];\n onSettingsChanged({ hiddenSeries });\n }\n\n this.updateModelDimensions();\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n handleRestyle([changes, seriesIndexes]: readonly [\n Record<string, unknown>,\n number[],\n ]): void {\n log.debug('handleRestyle', changes, seriesIndexes);\n if (Object.keys(changes).includes('visible')) {\n const { data } = this.state;\n const { onSettingsChanged } = this.props;\n if (data != null) {\n const hiddenSeries = (data as Partial<PlotData>[]).reduce(\n (acc: string[], { name, visible }) =>\n name != null && visible === 'legendonly' ? [...acc, name] : acc,\n []\n );\n onSettingsChanged({ hiddenSeries });\n }\n }\n }\n\n handleThemeChange(): void {\n const { theme, model } = this.props;\n const { dh } = model;\n const chartUtils = new ChartUtils(dh);\n\n this.setState(({ layout }) => ({\n layout: {\n ...layout,\n template: chartUtils.makeDefaultTemplate(theme),\n },\n }));\n }\n\n /**\n * Toggle the error message. If it is already being displayed, then hide it.\n */\n toggleErrorMessage(error: string): void {\n this.setState(({ shownError }) => ({\n shownError: shownError === error ? null : error,\n }));\n }\n\n /**\n * Update the models dimensions and ranges.\n * Note that this will update it all whether the plot size changes OR the range\n * the user is looking at has changed (eg. panning/zooming).\n * Could update each independently, but doing them at the same time keeps the\n * ChartModel API a bit cleaner.\n * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)\n */\n updateModelDimensions(force = false): void {\n const rect = this.getPlotRect();\n if (!rect) {\n log.warn('Unable to get plotting rect');\n return;\n }\n\n const isRectChanged =\n !this.rect ||\n this.rect.width !== rect.width ||\n this.rect.height !== rect.height;\n\n if (isRectChanged || force) {\n this.rect = rect;\n\n const { isActive, model } = this.props;\n model.setDimensions(rect);\n // We may need to resubscribe if dimensions were too small before\n if (isActive) {\n this.subscribe(model);\n }\n }\n }\n\n initFormatter(): void {\n const { settings } = this.props;\n this.updateFormatterSettings(settings);\n }\n\n updateFormatterSettings(settings: ChartSettings): void {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n const dateTimeFormatterOptions =\n FormatterUtils.getDateTimeFormatterOptions(settings);\n const { decimalFormatOptions = {}, integerFormatOptions = {} } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, decimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, integerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = decimalFormatOptions;\n this.integerFormatOptions = integerFormatOptions;\n this.updateFormatter();\n }\n\n if (this.webgl !== settings.webgl) {\n this.webgl = settings.webgl;\n this.updateRenderOptions();\n }\n }\n\n updateFormatter(): void {\n const { model } = this.props;\n const formatter = new Formatter(\n model.dh,\n this.columnFormats,\n this.dateTimeFormatterOptions,\n this.decimalFormatOptions,\n this.integerFormatOptions\n );\n model.setFormatter(formatter);\n }\n\n updateRenderOptions(): void {\n const { model } = this.props;\n const renderOptions = { webgl: this.webgl };\n model.setRenderOptions(renderOptions);\n }\n\n updateDimensions(): void {\n const rect = this.getPlotRect();\n const { Plotly: PlotlyProp } = this.props;\n if (\n this.plot.current != null &&\n rect != null &&\n rect.width > 0 &&\n rect.height > 0\n ) {\n // Call relayout to resize avoiding the debouncing plotly does\n // https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552\n PlotlyProp.relayout(\n (this.plot.current as unknown as { el: HTMLElement }).el,\n {\n autosize: true,\n }\n ).catch((e: unknown) => {\n log.debug('Unable to resize, promise rejected', e);\n });\n }\n }\n\n render(): ReactElement {\n const { PlotComponent } = this;\n const {\n data,\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n error,\n shownError,\n layout,\n revision,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const isPlotShown = data != null;\n\n return (\n <div className=\"h-100 w-100 chart-wrapper\" ref={this.plotWrapperMerged}>\n {isPlotShown && (\n <PlotComponent\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ref={this.plot}\n data={data}\n layout={layout}\n revision={revision}\n config={config}\n onAfterPlot={this.handleAfterPlot}\n onError={log.error}\n onRelayout={this.handleRelayout}\n onUpdate={this.handlePlotUpdate}\n onRestyle={this.handleRestyle}\n style={{ height: '100%', width: '100%' }}\n />\n )}\n {downsamplingError != null && shownError == null && (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n )}\n {shownError != null && (\n <ChartErrorOverlay\n errorMessage={`${shownError}`}\n onDiscard={() => {\n this.handleErrorClose();\n }}\n />\n )}\n </div>\n );\n }\n}\n\nexport default function ChartContainer(\n props: ChartContainerProps\n): JSX.Element {\n const chartTheme = useChartTheme();\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <Chart {...props} theme={chartTheme} />;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/chart",
|
|
3
|
-
"version": "0.87.1-beta.
|
|
3
|
+
"version": "0.87.1-beta.7+56d1fa9b",
|
|
4
4
|
"description": "Deephaven Chart",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@deephaven/components": "^0.87.1-beta.
|
|
31
|
-
"@deephaven/icons": "^0.87.1-beta.
|
|
30
|
+
"@deephaven/components": "^0.87.1-beta.7+56d1fa9b",
|
|
31
|
+
"@deephaven/icons": "^0.87.1-beta.7+56d1fa9b",
|
|
32
32
|
"@deephaven/jsapi-types": "^1.0.0-dev0.34.0",
|
|
33
|
-
"@deephaven/jsapi-utils": "^0.87.1-beta.
|
|
34
|
-
"@deephaven/log": "^0.87.1-beta.
|
|
35
|
-
"@deephaven/react-hooks": "^0.87.1-beta.
|
|
36
|
-
"@deephaven/utils": "^0.87.1-beta.
|
|
33
|
+
"@deephaven/jsapi-utils": "^0.87.1-beta.7+56d1fa9b",
|
|
34
|
+
"@deephaven/log": "^0.87.1-beta.7+56d1fa9b",
|
|
35
|
+
"@deephaven/react-hooks": "^0.87.1-beta.7+56d1fa9b",
|
|
36
|
+
"@deephaven/utils": "^0.87.1-beta.7+56d1fa9b",
|
|
37
37
|
"buffer": "^6.0.3",
|
|
38
38
|
"fast-deep-equal": "^3.1.3",
|
|
39
39
|
"lodash.debounce": "^4.0.8",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"react": ">=16.8.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@deephaven/jsapi-shim": "^0.87.1-beta.
|
|
52
|
-
"@deephaven/mocks": "^0.87.1-beta.
|
|
51
|
+
"@deephaven/jsapi-shim": "^0.87.1-beta.7+56d1fa9b",
|
|
52
|
+
"@deephaven/mocks": "^0.87.1-beta.7+56d1fa9b",
|
|
53
53
|
"@types/plotly.js": "^2.12.11"
|
|
54
54
|
},
|
|
55
55
|
"files": [
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"publishConfig": {
|
|
62
62
|
"access": "public"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "56d1fa9ba00d319794d686365be245c757ad2178"
|
|
65
65
|
}
|