@deephaven/chart 0.63.1-express-memory-fix.2 → 0.64.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.
package/dist/Chart.d.ts CHANGED
@@ -1,10 +1,8 @@
1
- import React, { Component, ReactElement, RefObject } from 'react';
2
- import { IconDefinition } from '@deephaven/icons';
3
- import { DateTimeColumnFormatterOptions, DecimalColumnFormatterOptions, IntegerColumnFormatterOptions, FormattingRule, ColumnFormatSettings, DateTimeFormatSettings } from '@deephaven/jsapi-utils';
4
- import { Config as PlotlyConfig, Layout, Icon, Data } from 'plotly.js';
5
- import type { PlotParams } from 'react-plotly.js';
1
+ import React from 'react';
2
+ import { DecimalColumnFormatterOptions, IntegerColumnFormatterOptions, ColumnFormatSettings, DateTimeFormatSettings } from '@deephaven/jsapi-utils';
6
3
  import Plotly from './plotly/Plotly';
7
4
  import ChartModel from './ChartModel';
5
+ import { ChartTheme } from './ChartTheme';
8
6
  import { ChartModelSettings } from './ChartUtils';
9
7
  import './Chart.scss';
10
8
  type FormatterSettings = ColumnFormatSettings & DateTimeFormatSettings & {
@@ -13,6 +11,7 @@ type FormatterSettings = ColumnFormatSettings & DateTimeFormatSettings & {
13
11
  };
14
12
  interface ChartProps {
15
13
  model: ChartModel;
14
+ theme: ChartTheme;
16
15
  settings: FormatterSettings;
17
16
  isActive: boolean;
18
17
  Plotly: typeof Plotly;
@@ -25,98 +24,9 @@ interface ChartProps {
25
24
  onError: (error: Error) => void;
26
25
  onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;
27
26
  }
28
- interface ChartState {
29
- data: Partial<Data>[] | null;
30
- /** An error specific to downsampling */
31
- downsamplingError: unknown;
32
- isDownsampleFinished: boolean;
33
- isDownsampleInProgress: boolean;
34
- isDownsamplingDisabled: boolean;
35
- /** Any other kind of error */
36
- error: unknown;
37
- shownError: string | null;
38
- layout: Partial<Layout>;
39
- revision: number;
40
- }
41
- export declare class Chart extends Component<ChartProps, ChartState> {
42
- static defaultProps: {
43
- isActive: boolean;
44
- settings: {
45
- timeZone: string;
46
- defaultDateTimeFormat: string;
47
- showTimeZone: boolean;
48
- showTSeparator: boolean;
49
- formatter: never[];
50
- };
51
- Plotly: typeof Plotly;
52
- onDisconnect: () => void;
53
- onReconnect: () => void;
54
- onUpdate: () => void;
55
- onError: () => void;
56
- onSettingsChanged: () => void;
57
- };
58
- /**
59
- * Convert a font awesome icon definition to a plotly icon definition
60
- * @param faIcon The icon to convert
61
- */
62
- static convertIcon(faIcon: IconDefinition): Icon;
63
- static downsampleButtonTitle(isDownsampleInProgress: boolean, isDownsamplingDisabled: boolean): string;
64
- static downsampleButtonAttr(isDownsampleInProgress: boolean, isDownsamplingDisabled: boolean): string | undefined;
65
- constructor(props: ChartProps);
66
- componentDidMount(): void;
67
- componentDidUpdate(prevProps: ChartProps): void;
68
- componentWillUnmount(): void;
69
- currentSeries: number;
70
- PlotComponent: React.ComponentType<PlotParams>;
71
- plot: RefObject<typeof this.PlotComponent>;
72
- plotWrapper: RefObject<HTMLDivElement>;
73
- columnFormats?: FormattingRule[];
74
- dateTimeFormatterOptions?: DateTimeColumnFormatterOptions;
75
- decimalFormatOptions: DecimalColumnFormatterOptions;
76
- integerFormatOptions: IntegerColumnFormatterOptions;
77
- rect?: DOMRect;
78
- ranges?: unknown;
79
- isSubscribed: boolean;
80
- isLoadedFired: boolean;
81
- resizeObserver: ResizeObserver;
82
- getCachedConfig: (downsamplingError: unknown, isDownsampleFinished: boolean, isDownsampleInProgress: boolean, isDownsamplingDisabled: boolean, data: Partial<Data>[], error: unknown) => Partial<PlotlyConfig>;
83
- getPlotRect(): DOMRect | null;
84
- initData(): void;
85
- subscribe(model: ChartModel): void;
86
- unsubscribe(model: ChartModel): void;
87
- handleAfterPlot(): void;
88
- handleDownsampleClick(): void;
89
- handleErrorClose(): void;
90
- handleModelEvent(event: CustomEvent): void;
91
- handlePlotUpdate(figure: Readonly<{
92
- layout: Partial<Layout>;
93
- }>): void;
94
- handleRelayout(changes: {
95
- hiddenlabels?: string[];
96
- }): void;
97
- handleResize(): void;
98
- handleRestyle([changes, seriesIndexes]: readonly [
99
- Record<string, unknown>,
100
- number[]
101
- ]): void;
102
- /**
103
- * Toggle the error message. If it is already being displayed, then hide it.
104
- */
105
- toggleErrorMessage(error: string): void;
106
- /**
107
- * Update the models dimensions and ranges.
108
- * Note that this will update it all whether the plot size changes OR the range
109
- * the user is looking at has changed (eg. panning/zooming).
110
- * Could update each independently, but doing them at the same time keeps the
111
- * ChartModel API a bit cleaner.
112
- * @param force Force a change even if the chart dimensions haven't changed (eg. after pan/zoom)
113
- */
114
- updateModelDimensions(force?: boolean): void;
115
- initFormatter(): void;
116
- updateFormatterSettings(settings: FormatterSettings): void;
117
- updateFormatter(): void;
118
- updateDimensions(): void;
119
- render(): ReactElement;
27
+ interface ChartContainerProps extends Partial<Omit<ChartProps, 'theme'>> {
28
+ model: ChartModel;
120
29
  }
121
- export default Chart;
30
+ export default function ChartContainer(props: ChartContainerProps): JSX.Element;
31
+ export {};
122
32
  //# sourceMappingURL=Chart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,OAAO,EAIL,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAIL,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,MAAM,IAAI,YAAY,EACtB,MAAM,EACN,IAAI,EACJ,IAAI,EAGL,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,cAAc,CAAC;AAKtB,KAAK,iBAAiB,GAAG,oBAAoB,GAC3C,sBAAsB,GAAG;IACvB,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEJ,UAAU,UAAU;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,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;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;CACpE;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IAC7B,wCAAwC;IACxC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAEhC,8BAA8B;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,KAAM,SAAQ,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IAC1D,MAAM,CAAC,YAAY;;;;;;;;;;4BAUC,IAAI;2BACL,IAAI;wBACP,IAAI;uBACL,IAAI;iCACM,IAAI;MAC3B;IAEF;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAchD,MAAM,CAAC,qBAAqB,CAC1B,sBAAsB,EAAE,OAAO,EAC/B,sBAAsB,EAAE,OAAO,GAC9B,MAAM;IAUT,MAAM,CAAC,oBAAoB,CACzB,sBAAsB,EAAE,OAAO,EAC/B,sBAAsB,EAAE,OAAO,GAC9B,MAAM,GAAG,SAAS;gBAQT,KAAK,EAAE,UAAU;IAuC7B,iBAAiB,IAAI,IAAI;IAiBzB,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAmB/C,oBAAoB,IAAI,IAAI;IAO5B,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,EAAE,SAAS,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IAE3C,WAAW,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAEvC,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IAEjC,wBAAwB,CAAC,EAAE,8BAA8B,CAAC;IAE1D,oBAAoB,EAAE,6BAA6B,CAAC;IAEpD,oBAAoB,EAAE,6BAA6B,CAAC;IAEpD,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,YAAY,EAAE,OAAO,CAAC;IAEtB,aAAa,EAAE,OAAO,CAAC;IAGvB,cAAc,EAAE,cAAc,CAAC;IAE/B,eAAe,sBAEQ,OAAO,wBACJ,OAAO,0BACL,OAAO,0BACP,OAAO,QACzB,QAAQ,IAAI,CAAC,EAAE,SACd,OAAO,KACb,QAAQ,YAAY,CAAC,CA2FxB;IAEF,WAAW,IAAI,OAAO,GAAG,IAAI;IAI7B,QAAQ,IAAI,IAAI;IAYhB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAalC,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASpC,eAAe,IAAI,IAAI;IAMvB,qBAAqB,IAAI,IAAI;IAgB7B,gBAAgB,IAAI,IAAI;IAIxB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAiF1C,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAgBrE,cAAc,CAAC,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAa1D,YAAY,IAAI,IAAI;IAIpB,aAAa,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,SAAS;QAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QACvB,MAAM,EAAE;KACT,GAAG,IAAI;IAgBR;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvC;;;;;;;OAOG;IACH,qBAAqB,CAAC,KAAK,UAAQ,GAAG,IAAI;IAwB1C,aAAa,IAAI,IAAI;IAKrB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAoB1D,eAAe,IAAI,IAAI;IAYvB,gBAAgB,IAAI,IAAI;IAsBxB,MAAM,IAAI,YAAY;CA8DvB;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Chart.d.ts","sourceRoot":"","sources":["../src/Chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAUlE,OAAO,EAKL,6BAA6B,EAC7B,6BAA6B,EAE7B,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAahC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,cAAc,CAAC;AAMtB,KAAK,iBAAiB,GAAG,oBAAoB,GAC3C,sBAAsB,GAAG;IACvB,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;IACrD,oBAAoB,CAAC,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEJ,UAAU,UAAU;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,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;IAChC,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;AAqpBD,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,KAAK,EAAE,mBAAmB,GACzB,GAAG,CAAC,OAAO,CAIb"}
package/dist/Chart.js CHANGED
@@ -10,17 +10,22 @@ import { CopyButton, Popper } from '@deephaven/components';
10
10
  import { vsLoading, dhGraphLineDown, dhWarningFilled } from '@deephaven/icons';
11
11
  import { Formatter, FormatterUtils, DateUtils } from '@deephaven/jsapi-utils';
12
12
  import Log from '@deephaven/log';
13
+ import { bindAllMethods } from '@deephaven/utils';
13
14
  import createPlotlyComponent from "./plotly/createPlotlyComponent.js";
14
15
  import Plotly from "./plotly/Plotly.js";
15
16
  import ChartModel from "./ChartModel.js";
16
17
  import ChartUtils from "./ChartUtils.js";
17
18
  import "./Chart.css";
18
19
  import DownsamplingError from "./DownsamplingError.js";
20
+ import useChartTheme from "./useChartTheme.js";
19
21
  import { jsx as _jsx } from "react/jsx-runtime";
20
22
  import { Fragment as _Fragment } from "react/jsx-runtime";
21
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
24
  var log = Log.module('Chart');
23
- export class Chart extends Component {
25
+
26
+ // All of the ChartProps have default values except for model in the Chart
27
+ // component, hence the Partial here.
28
+ class Chart extends Component {
24
29
  /**
25
30
  * Convert a font awesome icon definition to a plotly icon definition
26
31
  * @param faIcon The icon to convert
@@ -131,14 +136,7 @@ export class Chart extends Component {
131
136
  [...(has2D ? buttons2D : []), ...(has3D ? buttons3D : [])]]
132
137
  };
133
138
  }));
134
- this.handleAfterPlot = this.handleAfterPlot.bind(this);
135
- this.handleDownsampleClick = this.handleDownsampleClick.bind(this);
136
- this.handleErrorClose = this.handleErrorClose.bind(this);
137
- this.handleModelEvent = this.handleModelEvent.bind(this);
138
- this.handlePlotUpdate = this.handlePlotUpdate.bind(this);
139
- this.handleRelayout = this.handleRelayout.bind(this);
140
- this.handleResize = this.handleResize.bind(this);
141
- this.handleRestyle = this.handleRestyle.bind(this);
139
+ bindAllMethods(this);
142
140
  this.PlotComponent = createPlotlyComponent(props.Plotly);
143
141
  this.plot = /*#__PURE__*/React.createRef();
144
142
  this.plotWrapper = (_props$containerRef = props.containerRef) !== null && _props$containerRef !== void 0 ? _props$containerRef : /*#__PURE__*/React.createRef();
@@ -180,12 +178,14 @@ export class Chart extends Component {
180
178
  if (this.plotWrapper.current != null) {
181
179
  this.resizeObserver.observe(this.plotWrapper.current);
182
180
  }
181
+ this.handleThemeChange();
183
182
  }
184
183
  componentDidUpdate(prevProps) {
185
184
  var {
186
185
  isActive,
187
186
  model,
188
- settings
187
+ settings,
188
+ theme
189
189
  } = this.props;
190
190
  this.updateFormatterSettings(settings);
191
191
  if (model !== prevProps.model) {
@@ -200,6 +200,9 @@ export class Chart extends Component {
200
200
  this.unsubscribe(model);
201
201
  }
202
202
  }
203
+ if (theme !== prevProps.theme) {
204
+ this.handleThemeChange();
205
+ }
203
206
  }
204
207
  componentWillUnmount() {
205
208
  var {
@@ -219,12 +222,14 @@ export class Chart extends Component {
219
222
  var {
220
223
  model
221
224
  } = this.props;
222
- var {
223
- layout
224
- } = this.state;
225
- this.setState({
226
- data: model.getData(),
227
- layout: _objectSpread(_objectSpread({}, layout), model.getLayout())
225
+ this.setState(_ref3 => {
226
+ var {
227
+ layout
228
+ } = _ref3;
229
+ return {
230
+ data: model.getData(),
231
+ layout: _objectSpread(_objectSpread({}, layout), model.getLayout())
232
+ };
228
233
  });
229
234
  }
230
235
  subscribe(model) {
@@ -251,10 +256,10 @@ export class Chart extends Component {
251
256
  }
252
257
  }
253
258
  handleDownsampleClick() {
254
- this.setState(_ref3 => {
259
+ this.setState(_ref4 => {
255
260
  var {
256
261
  isDownsamplingDisabled
257
- } = _ref3;
262
+ } = _ref4;
258
263
  return {
259
264
  downsamplingError: null,
260
265
  isDownsampleInProgress: false,
@@ -418,8 +423,8 @@ export class Chart extends Component {
418
423
  handleResize() {
419
424
  this.updateDimensions();
420
425
  }
421
- handleRestyle(_ref4) {
422
- var [changes, seriesIndexes] = _ref4;
426
+ handleRestyle(_ref5) {
427
+ var [changes, seriesIndexes] = _ref5;
423
428
  log.debug('handleRestyle', changes, seriesIndexes);
424
429
  if (Object.keys(changes).includes('visible')) {
425
430
  var {
@@ -429,11 +434,11 @@ export class Chart extends Component {
429
434
  onSettingsChanged
430
435
  } = this.props;
431
436
  if (data != null) {
432
- var hiddenSeries = data.reduce((acc, _ref5) => {
437
+ var hiddenSeries = data.reduce((acc, _ref6) => {
433
438
  var {
434
439
  name,
435
440
  visible
436
- } = _ref5;
441
+ } = _ref6;
437
442
  return name != null && visible === 'legendonly' ? [...acc, name] : acc;
438
443
  }, []);
439
444
  onSettingsChanged({
@@ -442,15 +447,35 @@ export class Chart extends Component {
442
447
  }
443
448
  }
444
449
  }
450
+ handleThemeChange() {
451
+ var {
452
+ theme,
453
+ model
454
+ } = this.props;
455
+ var {
456
+ dh
457
+ } = model;
458
+ var chartUtils = new ChartUtils(dh);
459
+ this.setState(_ref7 => {
460
+ var {
461
+ layout
462
+ } = _ref7;
463
+ return {
464
+ layout: _objectSpread(_objectSpread({}, layout), {}, {
465
+ template: chartUtils.makeDefaultTemplate(theme)
466
+ })
467
+ };
468
+ });
469
+ }
445
470
 
446
471
  /**
447
472
  * Toggle the error message. If it is already being displayed, then hide it.
448
473
  */
449
474
  toggleErrorMessage(error) {
450
- this.setState(_ref6 => {
475
+ this.setState(_ref8 => {
451
476
  var {
452
477
  shownError
453
- } = _ref6;
478
+ } = _ref8;
454
479
  return {
455
480
  shownError: shownError === error ? null : error
456
481
  };
@@ -607,5 +632,11 @@ _defineProperty(Chart, "defaultProps", {
607
632
  onError: () => undefined,
608
633
  onSettingsChanged: () => undefined
609
634
  });
610
- export default Chart;
635
+ export default function ChartContainer(props) {
636
+ var chartTheme = useChartTheme();
637
+ // eslint-disable-next-line react/jsx-props-no-spreading
638
+ return /*#__PURE__*/_jsx(Chart, _objectSpread(_objectSpread({}, props), {}, {
639
+ theme: chartTheme
640
+ }));
641
+ }
611
642
  //# sourceMappingURL=Chart.js.map
package/dist/Chart.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","CopyButton","Popper","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","createPlotlyComponent","Plotly","ChartModel","ChartUtils","DownsamplingError","jsx","_jsx","Fragment","_Fragment","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","displayModeBar","modeBarButtons","handleAfterPlot","bind","handleErrorClose","handleModelEvent","handlePlotUpdate","handleRelayout","handleResize","handleRestyle","PlotComponent","plot","createRef","plotWrapper","containerRef","columnFormats","dateTimeFormatterOptions","decimalFormatOptions","integerFormatOptions","isSubscribed","isLoadedFired","currentSeries","resizeObserver","window","ResizeObserver","state","shownError","layout","datarevision","revision","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","isActive","model","subscribe","current","observe","componentDidUpdate","prevProps","settings","updateFormatterSettings","unsubscribe","componentWillUnmount","disconnect","getPlotRect","_this$plotWrapper$cur","_this$plotWrapper$cur2","getBoundingClientRect","setState","getData","_objectSpread","getLayout","rect","height","debug2","_ref3","setDownsamplingDisabled","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","figure","ranges","getLayoutRanges","isRangesChanged","changes","hiddenlabels","onSettingsChanged","hiddenSeries","_ref4","seriesIndexes","Object","keys","reduce","acc","_ref5","visible","_ref6","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","updateFormatter","formatter","dh","setFormatter","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","useResizeHandler","style","options","placement","isShown","onExited","closeOnBlur","interactive","tooltip","copy","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\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 createPlotlyComponent from './plotly/createPlotlyComponent';\nimport Plotly from './plotly/Plotly';\nimport ChartModel from './ChartModel';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport './Chart.scss';\nimport DownsamplingError from './DownsamplingError';\n\nconst log = Log.module('Chart');\n\ntype FormatterSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n };\n\ninterface ChartProps {\n model: ChartModel;\n settings: FormatterSettings;\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 onSettingsChanged: (settings: Partial<ChartModelSettings>) => void;\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\nexport class 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 },\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 this.handleAfterPlot = this.handleAfterPlot.bind(this);\n this.handleDownsampleClick = this.handleDownsampleClick.bind(this);\n this.handleErrorClose = this.handleErrorClose.bind(this);\n this.handleModelEvent = this.handleModelEvent.bind(this);\n this.handlePlotUpdate = this.handlePlotUpdate.bind(this);\n this.handleRelayout = this.handleRelayout.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRestyle = this.handleRestyle.bind(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\n componentDidUpdate(prevProps: ChartProps): void {\n const { isActive, model, settings } = this.props;\n this.updateFormatterSettings(settings as FormatterSettings);\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\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 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 // 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 const { layout } = this.state;\n this.setState({\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 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 /**\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 as FormatterSettings);\n }\n\n updateFormatterSettings(settings: FormatterSettings): 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\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 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 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 useResizeHandler\n style={{ height: '100%', width: '100%' }}\n />\n )}\n <Popper\n className=\"chart-error-popper\"\n options={{ placement: 'top' }}\n isShown={shownError != null}\n onExited={this.handleErrorClose}\n closeOnBlur\n interactive\n >\n {shownError != null && (\n <>\n <div className=\"chart-error\">{shownError}</div>\n <CopyButton tooltip=\"Copy Error\" copy={shownError}>\n Copy Error\n </CopyButton>\n </>\n )}\n </Popper>\n </div>\n );\n }\n}\n\nexport default Chart;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.js","names":["React","Component","deepEqual","memoize","CopyButton","Popper","vsLoading","dhGraphLineDown","dhWarningFilled","Formatter","FormatterUtils","DateUtils","Log","bindAllMethods","createPlotlyComponent","Plotly","ChartModel","ChartUtils","DownsamplingError","useChartTheme","jsx","_jsx","Fragment","_Fragment","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","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","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","formatter","setFormatter","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","className","ref","children","onAfterPlot","onRelayout","onRestyle","useResizeHandler","style","options","placement","isShown","onExited","closeOnBlur","interactive","tooltip","copy","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","ChartContainer","chartTheme"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, ReactElement, RefObject } from 'react';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { CopyButton, Popper } from '@deephaven/components';\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 { 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 FormatterSettings = ColumnFormatSettings &\n DateTimeFormatSettings & {\n decimalFormatOptions?: DecimalColumnFormatterOptions;\n integerFormatOptions?: IntegerColumnFormatterOptions;\n };\n\ninterface ChartProps {\n model: ChartModel;\n theme: ChartTheme;\n settings: FormatterSettings;\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 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 },\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 as FormatterSettings);\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 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 // 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 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 as FormatterSettings);\n }\n\n updateFormatterSettings(settings: FormatterSettings): 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\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 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 useResizeHandler\n style={{ height: '100%', width: '100%' }}\n />\n )}\n <Popper\n className=\"chart-error-popper\"\n options={{ placement: 'top' }}\n isShown={shownError != null}\n onExited={this.handleErrorClose}\n closeOnBlur\n interactive\n >\n {shownError != null && (\n <>\n <div className=\"chart-error\">{shownError}</div>\n <CopyButton tooltip=\"Copy Error\" copy={shownError}>\n Copy Error\n </CopyButton>\n </>\n )}\n </Popper>\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,6 +1,5 @@
1
1
  import type { dh as DhType, Figure, Table } from '@deephaven/jsapi-types';
2
2
  import { ChartModelSettings } from './ChartUtils';
3
- import { ChartTheme } from './ChartTheme';
4
3
  import ChartModel from './ChartModel';
5
4
  declare class ChartModelFactory {
6
5
  /**
@@ -14,12 +13,11 @@ declare class ChartModelFactory {
14
13
  * @param settings.xAxis The column name to use for the x-axis
15
14
  * @param [settings.hiddenSeries] Array of hidden series names
16
15
  * @param table The table to build the model for
17
- * @param theme The theme for the figure
18
16
  * @returns The ChartModel Promise representing the figure
19
17
  * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel
20
18
  * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel
21
19
  */
22
- static makeModelFromSettings(dh: DhType, settings: ChartModelSettings, table: Table, theme: ChartTheme): Promise<ChartModel>;
20
+ static makeModelFromSettings(dh: DhType, settings: ChartModelSettings, table: Table): Promise<ChartModel>;
23
21
  /**
24
22
  * Creates a model from the settings provided.
25
23
  * Tries to create a Figure in the API with it.
@@ -45,12 +43,11 @@ declare class ChartModelFactory {
45
43
  * @param settings.xAxis The column name to use for the x-axis
46
44
  * @param [settings.hiddenSeries] Array of hidden series names
47
45
  * @param figure The figure to build the model for
48
- * @param theme The theme for the figure
49
46
  * @returns The FigureChartModel representing the figure
50
47
  * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel
51
48
  * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel
52
49
  */
53
- static makeModel(dh: DhType, settings: ChartModelSettings | undefined, figure: Figure, theme: ChartTheme): Promise<ChartModel>;
50
+ static makeModel(dh: DhType, settings: ChartModelSettings | undefined, figure: Figure): Promise<ChartModel>;
54
51
  }
55
52
  export default ChartModelFactory;
56
53
  //# sourceMappingURL=ChartModelFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartModelFactory.d.ts","sourceRoot":"","sources":["../src/ChartModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,cAAM,iBAAiB;IACrB;;;;;;;;;;;;;;;OAeG;WACU,qBAAqB,CAChC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,UAAU,CAAC;IAStB;;;;;;;;;;;;OAYG;WACU,sBAAsB,CACjC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,CAAC;IAelB;;;;;;;;;;;;;;;OAeG;WACU,SAAS,CACpB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,UAAU,CAAC;CAGvB;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"ChartModelFactory.d.ts","sourceRoot":"","sources":["../src/ChartModelFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAmB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,cAAM,iBAAiB;IACrB;;;;;;;;;;;;;;OAcG;WACU,qBAAqB,CAChC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,UAAU,CAAC;IAStB;;;;;;;;;;;;OAYG;WACU,sBAAsB,CACjC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,CAAC;IAelB;;;;;;;;;;;;;;OAcG;WACU,SAAS,CACpB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC;CAGvB;AAED,eAAe,iBAAiB,CAAC"}
@@ -14,15 +14,14 @@ class ChartModelFactory {
14
14
  * @param settings.xAxis The column name to use for the x-axis
15
15
  * @param [settings.hiddenSeries] Array of hidden series names
16
16
  * @param table The table to build the model for
17
- * @param theme The theme for the figure
18
17
  * @returns The ChartModel Promise representing the figure
19
18
  * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel
20
19
  * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel
21
20
  */
22
- static makeModelFromSettings(dh, settings, table, theme) {
21
+ static makeModelFromSettings(dh, settings, table) {
23
22
  return _asyncToGenerator(function* () {
24
23
  var figure = yield ChartModelFactory.makeFigureFromSettings(dh, settings, table);
25
- return new FigureChartModel(dh, figure, theme, settings);
24
+ return new FigureChartModel(dh, figure, settings);
26
25
  })();
27
26
  }
28
27
 
@@ -64,14 +63,13 @@ class ChartModelFactory {
64
63
  * @param settings.xAxis The column name to use for the x-axis
65
64
  * @param [settings.hiddenSeries] Array of hidden series names
66
65
  * @param figure The figure to build the model for
67
- * @param theme The theme for the figure
68
66
  * @returns The FigureChartModel representing the figure
69
67
  * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel
70
68
  * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel
71
69
  */
72
- static makeModel(dh, settings, figure, theme) {
70
+ static makeModel(dh, settings, figure) {
73
71
  return _asyncToGenerator(function* () {
74
- return new FigureChartModel(dh, figure, theme, settings);
72
+ return new FigureChartModel(dh, figure, settings);
75
73
  })();
76
74
  }
77
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChartModelFactory.js","names":["ChartUtils","FigureChartModel","ChartModelFactory","makeModelFromSettings","dh","settings","table","theme","_asyncToGenerator","figure","makeFigureFromSettings","tableCopy","copy","applyCustomColumns","customColumns","applyFilter","filter","applySort","sort","plot","Figure","create","makeFigureSettings","makeModel"],"sources":["../src/ChartModelFactory.ts"],"sourcesContent":["import type { dh as DhType, Figure, Table } from '@deephaven/jsapi-types';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport FigureChartModel from './FigureChartModel';\nimport { ChartTheme } from './ChartTheme';\nimport ChartModel from './ChartModel';\n\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @param theme The theme for the figure\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static async makeModelFromSettings(\n dh: DhType,\n settings: ChartModelSettings,\n table: Table,\n theme: ChartTheme\n ): Promise<ChartModel> {\n const figure = await ChartModelFactory.makeFigureFromSettings(\n dh,\n settings,\n table\n );\n return new FigureChartModel(dh, figure, theme, settings);\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static async makeFigureFromSettings(\n dh: DhType,\n settings: ChartModelSettings,\n table: Table\n ): Promise<Figure> {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n const tableCopy = await table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n\n return dh.plot.Figure.create(\n new ChartUtils(dh).makeFigureSettings(settings, tableCopy)\n );\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @param theme The theme for the figure\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static async makeModel(\n dh: DhType,\n settings: ChartModelSettings | undefined,\n figure: Figure,\n theme: ChartTheme\n ): Promise<ChartModel> {\n return new FigureChartModel(dh, figure, theme, settings);\n }\n}\n\nexport default ChartModelFactory;\n"],"mappings":";;OACOA,UAAU;AAAA,OACVC,gBAAgB;AAIvB,MAAMC,iBAAiB,CAAC;EACtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaC,qBAAqBA,CAChCC,EAAU,EACVC,QAA4B,EAC5BC,KAAY,EACZC,KAAiB,EACI;IAAA,OAAAC,iBAAA;MACrB,IAAMC,MAAM,SAASP,iBAAiB,CAACQ,sBAAsB,CAC3DN,EAAE,EACFC,QAAQ,EACRC,KACF,CAAC;MACD,OAAO,IAAIL,gBAAgB,CAACG,EAAE,EAAEK,MAAM,EAAEF,KAAK,EAAEF,QAAQ,CAAC;IAAC;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaK,sBAAsBA,CACjCN,EAAU,EACVC,QAA4B,EAC5BC,KAAY,EACK;IAAA,OAAAE,iBAAA;MACjB;MACA;MACA;MACA;MACA,IAAMG,SAAS,SAASL,KAAK,CAACM,IAAI,CAAC,CAAC;MACpCD,SAAS,CAACE,kBAAkB,CAACP,KAAK,CAACQ,aAAa,CAAC;MACjDH,SAAS,CAACI,WAAW,CAACT,KAAK,CAACU,MAAM,CAAC;MACnCL,SAAS,CAACM,SAAS,CAACX,KAAK,CAACY,IAAI,CAAC;MAE/B,OAAOd,EAAE,CAACe,IAAI,CAACC,MAAM,CAACC,MAAM,CAC1B,IAAIrB,UAAU,CAACI,EAAE,CAAC,CAACkB,kBAAkB,CAACjB,QAAQ,EAAEM,SAAS,CAC3D,CAAC;IAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaY,SAASA,CACpBnB,EAAU,EACVC,QAAwC,EACxCI,MAAc,EACdF,KAAiB,EACI;IAAA,OAAAC,iBAAA;MACrB,OAAO,IAAIP,gBAAgB,CAACG,EAAE,EAAEK,MAAM,EAAEF,KAAK,EAAEF,QAAQ,CAAC;IAAC;EAC3D;AACF;AAEA,eAAeH,iBAAiB"}
1
+ {"version":3,"file":"ChartModelFactory.js","names":["ChartUtils","FigureChartModel","ChartModelFactory","makeModelFromSettings","dh","settings","table","_asyncToGenerator","figure","makeFigureFromSettings","tableCopy","copy","applyCustomColumns","customColumns","applyFilter","filter","applySort","sort","plot","Figure","create","makeFigureSettings","makeModel"],"sources":["../src/ChartModelFactory.ts"],"sourcesContent":["import type { dh as DhType, Figure, Table } from '@deephaven/jsapi-types';\nimport ChartUtils, { ChartModelSettings } from './ChartUtils';\nimport FigureChartModel from './FigureChartModel';\nimport ChartModel from './ChartModel';\n\nclass ChartModelFactory {\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The ChartModel Promise representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static async makeModelFromSettings(\n dh: DhType,\n settings: ChartModelSettings,\n table: Table\n ): Promise<ChartModel> {\n const figure = await ChartModelFactory.makeFigureFromSettings(\n dh,\n settings,\n table\n );\n return new FigureChartModel(dh, figure, settings);\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param table The table to build the model for\n * @returns The Figure created with the settings provided\n */\n static async makeFigureFromSettings(\n dh: DhType,\n settings: ChartModelSettings,\n table: Table\n ): Promise<Figure> {\n // Copy the table first and then re-apply the filters from the original table\n // When we add table linking we'll want to listen to the original table and update\n // the copied table with any changes that occur.\n // The table gets owned by the Figure that gets created, which closes the table\n const tableCopy = await table.copy();\n tableCopy.applyCustomColumns(table.customColumns);\n tableCopy.applyFilter(table.filter);\n tableCopy.applySort(table.sort);\n\n return dh.plot.Figure.create(\n new ChartUtils(dh).makeFigureSettings(settings, tableCopy)\n );\n }\n\n /**\n * Creates a model from the settings provided.\n * Tries to create a Figure in the API with it.\n * @param dh DH JSAPI instance\n * @param settings The chart builder settings\n * @param settings.isLinked Whether the newly created chart should stay linked with the original table, update when filters are updated\n * @param settings.series The column names to use for creating the series of this chart\n * @param settings.type Chart builder type, from ChartBuilder.types\n * @param settings.xAxis The column name to use for the x-axis\n * @param [settings.hiddenSeries] Array of hidden series names\n * @param figure The figure to build the model for\n * @returns The FigureChartModel representing the figure\n * CRA sets tsconfig to type check JS based on jsdoc comments. It isn't able to figure out FigureChartModel extends ChartModel\n * This causes TS issues in 1 or 2 spots. Once this is TS it can be returned to just FigureChartModel\n */\n static async makeModel(\n dh: DhType,\n settings: ChartModelSettings | undefined,\n figure: Figure\n ): Promise<ChartModel> {\n return new FigureChartModel(dh, figure, settings);\n }\n}\n\nexport default ChartModelFactory;\n"],"mappings":";;OACOA,UAAU;AAAA,OACVC,gBAAgB;AAGvB,MAAMC,iBAAiB,CAAC;EACtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaC,qBAAqBA,CAChCC,EAAU,EACVC,QAA4B,EAC5BC,KAAY,EACS;IAAA,OAAAC,iBAAA;MACrB,IAAMC,MAAM,SAASN,iBAAiB,CAACO,sBAAsB,CAC3DL,EAAE,EACFC,QAAQ,EACRC,KACF,CAAC;MACD,OAAO,IAAIL,gBAAgB,CAACG,EAAE,EAAEI,MAAM,EAAEH,QAAQ,CAAC;IAAC;EACpD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaI,sBAAsBA,CACjCL,EAAU,EACVC,QAA4B,EAC5BC,KAAY,EACK;IAAA,OAAAC,iBAAA;MACjB;MACA;MACA;MACA;MACA,IAAMG,SAAS,SAASJ,KAAK,CAACK,IAAI,CAAC,CAAC;MACpCD,SAAS,CAACE,kBAAkB,CAACN,KAAK,CAACO,aAAa,CAAC;MACjDH,SAAS,CAACI,WAAW,CAACR,KAAK,CAACS,MAAM,CAAC;MACnCL,SAAS,CAACM,SAAS,CAACV,KAAK,CAACW,IAAI,CAAC;MAE/B,OAAOb,EAAE,CAACc,IAAI,CAACC,MAAM,CAACC,MAAM,CAC1B,IAAIpB,UAAU,CAACI,EAAE,CAAC,CAACiB,kBAAkB,CAAChB,QAAQ,EAAEK,SAAS,CAC3D,CAAC;IAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAaY,SAASA,CACpBlB,EAAU,EACVC,QAAwC,EACxCG,MAAc,EACO;IAAA,OAAAD,iBAAA;MACrB,OAAO,IAAIN,gBAAgB,CAACG,EAAE,EAAEI,MAAM,EAAEH,QAAQ,CAAC;IAAC;EACpD;AACF;AAEA,eAAeH,iBAAiB"}