@deephaven/chart 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.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.js +79 -136
- package/dist/Chart.js.map +1 -1
- package/dist/ChartErrorOverlay.js +5 -7
- package/dist/ChartErrorOverlay.js.map +1 -1
- package/dist/ChartTestUtils.js +62 -47
- package/dist/ChartTestUtils.js.map +1 -1
- package/dist/ChartTheme.js +9 -1
- package/dist/ChartTheme.js.map +1 -1
- package/dist/ChartThemeProvider.js +3 -6
- package/dist/ChartThemeProvider.js.map +1 -1
- package/dist/ChartUtils.js +101 -164
- package/dist/ChartUtils.js.map +1 -1
- package/dist/FigureChartModel.js +41 -75
- package/dist/FigureChartModel.js.map +1 -1
- package/dist/MockChartModel.js +7 -5
- package/dist/MockChartModel.js.map +1 -1
- package/package.json +11 -11
package/dist/Chart.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
2
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
4
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
6
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
7
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
8
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
3
9
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
10
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
11
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
@@ -31,7 +37,9 @@ class Chart extends Component {
|
|
|
31
37
|
* @param faIcon The icon to convert
|
|
32
38
|
*/
|
|
33
39
|
static convertIcon(faIcon) {
|
|
34
|
-
var
|
|
40
|
+
var _faIcon$icon = _slicedToArray(faIcon.icon, 5),
|
|
41
|
+
width = _faIcon$icon[0],
|
|
42
|
+
path = _faIcon$icon[4];
|
|
35
43
|
// By default the icons are flipped upside down, so we need to add our own transform
|
|
36
44
|
// https://github.com/plotly/plotly.js/issues/1335
|
|
37
45
|
var stringPath = "".concat(path);
|
|
@@ -112,15 +120,11 @@ class Chart extends Component {
|
|
|
112
120
|
});
|
|
113
121
|
}
|
|
114
122
|
var has2D = data.some(_ref => {
|
|
115
|
-
var
|
|
116
|
-
type
|
|
117
|
-
} = _ref;
|
|
123
|
+
var type = _ref.type;
|
|
118
124
|
return type != null && !type.includes('3d');
|
|
119
125
|
});
|
|
120
126
|
var has3D = data.some(_ref2 => {
|
|
121
|
-
var
|
|
122
|
-
type
|
|
123
|
-
} = _ref2;
|
|
127
|
+
var type = _ref2.type;
|
|
124
128
|
return type != null && type.includes('3d');
|
|
125
129
|
});
|
|
126
130
|
var buttons2D = ['zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'];
|
|
@@ -175,10 +179,9 @@ class Chart extends Component {
|
|
|
175
179
|
this.updateModelDimensions();
|
|
176
180
|
this.initData();
|
|
177
181
|
this.initFormatter();
|
|
178
|
-
var
|
|
179
|
-
isActive,
|
|
180
|
-
model
|
|
181
|
-
} = this.props;
|
|
182
|
+
var _this$props = this.props,
|
|
183
|
+
isActive = _this$props.isActive,
|
|
184
|
+
model = _this$props.model;
|
|
182
185
|
if (isActive) {
|
|
183
186
|
this.subscribe(model);
|
|
184
187
|
}
|
|
@@ -188,12 +191,11 @@ class Chart extends Component {
|
|
|
188
191
|
this.handleThemeChange();
|
|
189
192
|
}
|
|
190
193
|
componentDidUpdate(prevProps) {
|
|
191
|
-
var
|
|
192
|
-
isActive,
|
|
193
|
-
model,
|
|
194
|
-
settings,
|
|
195
|
-
theme
|
|
196
|
-
} = this.props;
|
|
194
|
+
var _this$props2 = this.props,
|
|
195
|
+
isActive = _this$props2.isActive,
|
|
196
|
+
model = _this$props2.model,
|
|
197
|
+
settings = _this$props2.settings,
|
|
198
|
+
theme = _this$props2.theme;
|
|
197
199
|
this.updateFormatterSettings(settings);
|
|
198
200
|
if (model !== prevProps.model) {
|
|
199
201
|
this.unsubscribe(prevProps.model);
|
|
@@ -212,9 +214,7 @@ class Chart extends Component {
|
|
|
212
214
|
}
|
|
213
215
|
}
|
|
214
216
|
componentWillUnmount() {
|
|
215
|
-
var
|
|
216
|
-
model
|
|
217
|
-
} = this.props;
|
|
217
|
+
var model = this.props.model;
|
|
218
218
|
this.unsubscribe(model);
|
|
219
219
|
this.resizeObserver.disconnect();
|
|
220
220
|
}
|
|
@@ -223,13 +223,9 @@ class Chart extends Component {
|
|
|
223
223
|
return (_this$plotWrapper$cur = (_this$plotWrapper$cur2 = this.plotWrapper.current) === null || _this$plotWrapper$cur2 === void 0 ? void 0 : _this$plotWrapper$cur2.getBoundingClientRect()) !== null && _this$plotWrapper$cur !== void 0 ? _this$plotWrapper$cur : null;
|
|
224
224
|
}
|
|
225
225
|
initData() {
|
|
226
|
-
var
|
|
227
|
-
model
|
|
228
|
-
} = this.props;
|
|
226
|
+
var model = this.props.model;
|
|
229
227
|
this.setState(_ref3 => {
|
|
230
|
-
var
|
|
231
|
-
layout
|
|
232
|
-
} = _ref3;
|
|
228
|
+
var layout = _ref3.layout;
|
|
233
229
|
return {
|
|
234
230
|
data: model.getData(),
|
|
235
231
|
layout: _objectSpread(_objectSpread({}, layout), model.getLayout())
|
|
@@ -261,9 +257,7 @@ class Chart extends Component {
|
|
|
261
257
|
}
|
|
262
258
|
handleDownsampleClick() {
|
|
263
259
|
this.setState(_ref4 => {
|
|
264
|
-
var
|
|
265
|
-
isDownsamplingDisabled
|
|
266
|
-
} = _ref4;
|
|
260
|
+
var isDownsamplingDisabled = _ref4.isDownsamplingDisabled;
|
|
267
261
|
return {
|
|
268
262
|
downsamplingError: null,
|
|
269
263
|
isDownsampleInProgress: false,
|
|
@@ -271,12 +265,8 @@ class Chart extends Component {
|
|
|
271
265
|
isDownsamplingDisabled: !isDownsamplingDisabled
|
|
272
266
|
};
|
|
273
267
|
}, () => {
|
|
274
|
-
var
|
|
275
|
-
|
|
276
|
-
} = this.props;
|
|
277
|
-
var {
|
|
278
|
-
isDownsamplingDisabled
|
|
279
|
-
} = this.state;
|
|
268
|
+
var model = this.props.model;
|
|
269
|
+
var isDownsamplingDisabled = this.state.isDownsamplingDisabled;
|
|
280
270
|
model.setDownsamplingDisabled(isDownsamplingDisabled);
|
|
281
271
|
});
|
|
282
272
|
}
|
|
@@ -291,20 +281,16 @@ class Chart extends Component {
|
|
|
291
281
|
});
|
|
292
282
|
}
|
|
293
283
|
handleModelEvent(event) {
|
|
294
|
-
var
|
|
295
|
-
|
|
296
|
-
detail
|
|
297
|
-
} = event;
|
|
284
|
+
var type = event.type,
|
|
285
|
+
detail = event.detail;
|
|
298
286
|
log.debug2('Received data update', type, detail);
|
|
299
287
|
switch (type) {
|
|
300
288
|
case ChartModel.EVENT_UPDATED:
|
|
301
289
|
{
|
|
302
290
|
this.currentSeries += 1;
|
|
303
291
|
this.setState(state => {
|
|
304
|
-
var
|
|
305
|
-
|
|
306
|
-
revision
|
|
307
|
-
} = state;
|
|
292
|
+
var layout = state.layout,
|
|
293
|
+
revision = state.revision;
|
|
308
294
|
if (typeof layout.datarevision === 'number') {
|
|
309
295
|
layout.datarevision += 1;
|
|
310
296
|
}
|
|
@@ -314,9 +300,7 @@ class Chart extends Component {
|
|
|
314
300
|
revision: revision + 1
|
|
315
301
|
};
|
|
316
302
|
});
|
|
317
|
-
var
|
|
318
|
-
onUpdate
|
|
319
|
-
} = this.props;
|
|
303
|
+
var onUpdate = this.props.onUpdate;
|
|
320
304
|
onUpdate({
|
|
321
305
|
isLoading: !this.isLoadedFired
|
|
322
306
|
});
|
|
@@ -324,9 +308,7 @@ class Chart extends Component {
|
|
|
324
308
|
}
|
|
325
309
|
case ChartModel.EVENT_LOADFINISHED:
|
|
326
310
|
{
|
|
327
|
-
var
|
|
328
|
-
onUpdate: _onUpdate
|
|
329
|
-
} = this.props;
|
|
311
|
+
var _onUpdate = this.props.onUpdate;
|
|
330
312
|
this.isLoadedFired = true;
|
|
331
313
|
_onUpdate({
|
|
332
314
|
isLoading: false
|
|
@@ -335,17 +317,13 @@ class Chart extends Component {
|
|
|
335
317
|
}
|
|
336
318
|
case ChartModel.EVENT_DISCONNECT:
|
|
337
319
|
{
|
|
338
|
-
var
|
|
339
|
-
onDisconnect
|
|
340
|
-
} = this.props;
|
|
320
|
+
var onDisconnect = this.props.onDisconnect;
|
|
341
321
|
onDisconnect();
|
|
342
322
|
break;
|
|
343
323
|
}
|
|
344
324
|
case ChartModel.EVENT_RECONNECT:
|
|
345
325
|
{
|
|
346
|
-
var
|
|
347
|
-
onReconnect
|
|
348
|
-
} = this.props;
|
|
326
|
+
var onReconnect = this.props.onReconnect;
|
|
349
327
|
onReconnect();
|
|
350
328
|
break;
|
|
351
329
|
}
|
|
@@ -378,9 +356,7 @@ class Chart extends Component {
|
|
|
378
356
|
isDownsamplingDisabled: false,
|
|
379
357
|
downsamplingError
|
|
380
358
|
});
|
|
381
|
-
var
|
|
382
|
-
onError
|
|
383
|
-
} = this.props;
|
|
359
|
+
var onError = this.props.onError;
|
|
384
360
|
onError(new DownsamplingError(downsamplingError == null ? undefined : "".concat(downsamplingError)));
|
|
385
361
|
break;
|
|
386
362
|
}
|
|
@@ -390,9 +366,7 @@ class Chart extends Component {
|
|
|
390
366
|
this.setState({
|
|
391
367
|
error
|
|
392
368
|
});
|
|
393
|
-
var
|
|
394
|
-
onError: _onError
|
|
395
|
-
} = this.props;
|
|
369
|
+
var _onError = this.props.onError;
|
|
396
370
|
_onError(new Error(error));
|
|
397
371
|
break;
|
|
398
372
|
}
|
|
@@ -415,10 +389,8 @@ class Chart extends Component {
|
|
|
415
389
|
{
|
|
416
390
|
var newLayout = detail;
|
|
417
391
|
this.setState(_ref5 => {
|
|
418
|
-
var
|
|
419
|
-
|
|
420
|
-
revision
|
|
421
|
-
} = _ref5;
|
|
392
|
+
var layout = _ref5.layout,
|
|
393
|
+
revision = _ref5.revision;
|
|
422
394
|
return {
|
|
423
395
|
layout: _objectSpread(_objectSpread({}, layout), newLayout),
|
|
424
396
|
revision: revision + 1
|
|
@@ -434,9 +406,7 @@ class Chart extends Component {
|
|
|
434
406
|
// User could have modified zoom/pan here, update the model dimensions
|
|
435
407
|
// We don't need to update the datarevision, as we don't have any data changes
|
|
436
408
|
// until an update comes back from the server anyway
|
|
437
|
-
var
|
|
438
|
-
layout
|
|
439
|
-
} = figure;
|
|
409
|
+
var layout = figure.layout;
|
|
440
410
|
var ranges = ChartUtils.getLayoutRanges(layout);
|
|
441
411
|
var isRangesChanged = !deepEqual(ranges, this.ranges);
|
|
442
412
|
if (isRangesChanged) {
|
|
@@ -447,9 +417,7 @@ class Chart extends Component {
|
|
|
447
417
|
handleRelayout(changes) {
|
|
448
418
|
log.debug('handleRelayout', changes);
|
|
449
419
|
if (changes.hiddenlabels != null) {
|
|
450
|
-
var
|
|
451
|
-
onSettingsChanged
|
|
452
|
-
} = this.props;
|
|
420
|
+
var onSettingsChanged = this.props.onSettingsChanged;
|
|
453
421
|
// Pie charts store series visibility in layout.hiddenlabels and trigger relayout on changes
|
|
454
422
|
// Series visibility for other types of charts is handled in handleRestyle
|
|
455
423
|
var hiddenSeries = [...changes.hiddenlabels];
|
|
@@ -463,21 +431,17 @@ class Chart extends Component {
|
|
|
463
431
|
this.updateDimensions();
|
|
464
432
|
}
|
|
465
433
|
handleRestyle(_ref6) {
|
|
466
|
-
var
|
|
434
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
435
|
+
changes = _ref7[0],
|
|
436
|
+
seriesIndexes = _ref7[1];
|
|
467
437
|
log.debug('handleRestyle', changes, seriesIndexes);
|
|
468
438
|
if (Object.keys(changes).includes('visible')) {
|
|
469
|
-
var
|
|
470
|
-
|
|
471
|
-
} = this.state;
|
|
472
|
-
var {
|
|
473
|
-
onSettingsChanged
|
|
474
|
-
} = this.props;
|
|
439
|
+
var data = this.state.data;
|
|
440
|
+
var onSettingsChanged = this.props.onSettingsChanged;
|
|
475
441
|
if (data != null) {
|
|
476
|
-
var hiddenSeries = data.reduce((acc,
|
|
477
|
-
var
|
|
478
|
-
|
|
479
|
-
visible
|
|
480
|
-
} = _ref7;
|
|
442
|
+
var hiddenSeries = data.reduce((acc, _ref8) => {
|
|
443
|
+
var name = _ref8.name,
|
|
444
|
+
visible = _ref8.visible;
|
|
481
445
|
return name != null && visible === 'legendonly' ? [...acc, name] : acc;
|
|
482
446
|
}, []);
|
|
483
447
|
onSettingsChanged({
|
|
@@ -487,18 +451,13 @@ class Chart extends Component {
|
|
|
487
451
|
}
|
|
488
452
|
}
|
|
489
453
|
handleThemeChange() {
|
|
490
|
-
var
|
|
491
|
-
theme,
|
|
492
|
-
model
|
|
493
|
-
|
|
494
|
-
var {
|
|
495
|
-
dh
|
|
496
|
-
} = model;
|
|
454
|
+
var _this$props3 = this.props,
|
|
455
|
+
theme = _this$props3.theme,
|
|
456
|
+
model = _this$props3.model;
|
|
457
|
+
var dh = model.dh;
|
|
497
458
|
var chartUtils = new ChartUtils(dh);
|
|
498
|
-
this.setState(
|
|
499
|
-
var
|
|
500
|
-
layout
|
|
501
|
-
} = _ref8;
|
|
459
|
+
this.setState(_ref9 => {
|
|
460
|
+
var layout = _ref9.layout;
|
|
502
461
|
return {
|
|
503
462
|
layout: _objectSpread(_objectSpread({}, layout), {}, {
|
|
504
463
|
template: chartUtils.makeDefaultTemplate(theme)
|
|
@@ -511,10 +470,8 @@ class Chart extends Component {
|
|
|
511
470
|
* Toggle the error message. If it is already being displayed, then hide it.
|
|
512
471
|
*/
|
|
513
472
|
toggleErrorMessage(error) {
|
|
514
|
-
this.setState(
|
|
515
|
-
var
|
|
516
|
-
shownError
|
|
517
|
-
} = _ref9;
|
|
473
|
+
this.setState(_ref0 => {
|
|
474
|
+
var shownError = _ref0.shownError;
|
|
518
475
|
return {
|
|
519
476
|
shownError: shownError === error ? null : error
|
|
520
477
|
};
|
|
@@ -539,10 +496,9 @@ class Chart extends Component {
|
|
|
539
496
|
var isRectChanged = !this.rect || this.rect.width !== rect.width || this.rect.height !== rect.height;
|
|
540
497
|
if (isRectChanged || force) {
|
|
541
498
|
this.rect = rect;
|
|
542
|
-
var
|
|
543
|
-
isActive,
|
|
544
|
-
model
|
|
545
|
-
} = this.props;
|
|
499
|
+
var _this$props4 = this.props,
|
|
500
|
+
isActive = _this$props4.isActive,
|
|
501
|
+
model = _this$props4.model;
|
|
546
502
|
model.setDimensions(rect);
|
|
547
503
|
// We may need to resubscribe if dimensions were too small before
|
|
548
504
|
if (isActive) {
|
|
@@ -551,18 +507,16 @@ class Chart extends Component {
|
|
|
551
507
|
}
|
|
552
508
|
}
|
|
553
509
|
initFormatter() {
|
|
554
|
-
var
|
|
555
|
-
settings
|
|
556
|
-
} = this.props;
|
|
510
|
+
var settings = this.props.settings;
|
|
557
511
|
this.updateFormatterSettings(settings);
|
|
558
512
|
}
|
|
559
513
|
updateFormatterSettings(settings) {
|
|
560
514
|
var columnFormats = FormatterUtils.getColumnFormats(settings);
|
|
561
515
|
var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);
|
|
562
|
-
var
|
|
563
|
-
defaultDecimalFormatOptions = {},
|
|
564
|
-
|
|
565
|
-
|
|
516
|
+
var _settings$defaultDeci = settings.defaultDecimalFormatOptions,
|
|
517
|
+
defaultDecimalFormatOptions = _settings$defaultDeci === void 0 ? {} : _settings$defaultDeci,
|
|
518
|
+
_settings$defaultInte = settings.defaultIntegerFormatOptions,
|
|
519
|
+
defaultIntegerFormatOptions = _settings$defaultInte === void 0 ? {} : _settings$defaultInte;
|
|
566
520
|
if (!deepEqual(this.columnFormats, columnFormats) || !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) || !deepEqual(this.decimalFormatOptions, defaultDecimalFormatOptions) || !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions)) {
|
|
567
521
|
this.columnFormats = FormatterUtils.getColumnFormats(settings);
|
|
568
522
|
this.dateTimeFormatterOptions = dateTimeFormatterOptions;
|
|
@@ -576,16 +530,12 @@ class Chart extends Component {
|
|
|
576
530
|
}
|
|
577
531
|
}
|
|
578
532
|
updateFormatter() {
|
|
579
|
-
var
|
|
580
|
-
model
|
|
581
|
-
} = this.props;
|
|
533
|
+
var model = this.props.model;
|
|
582
534
|
var formatter = new Formatter(model.dh, this.columnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions);
|
|
583
535
|
model.setFormatter(formatter);
|
|
584
536
|
}
|
|
585
537
|
updateRenderOptions() {
|
|
586
|
-
var
|
|
587
|
-
model
|
|
588
|
-
} = this.props;
|
|
538
|
+
var model = this.props.model;
|
|
589
539
|
var renderOptions = {
|
|
590
540
|
webgl: this.webgl
|
|
591
541
|
};
|
|
@@ -593,9 +543,7 @@ class Chart extends Component {
|
|
|
593
543
|
}
|
|
594
544
|
updateDimensions() {
|
|
595
545
|
var rect = this.getPlotRect();
|
|
596
|
-
var
|
|
597
|
-
Plotly: PlotlyProp
|
|
598
|
-
} = this.props;
|
|
546
|
+
var PlotlyProp = this.props.Plotly;
|
|
599
547
|
if (this.plot.current != null && rect != null && rect.width > 0 && rect.height > 0) {
|
|
600
548
|
// Call relayout to resize avoiding the debouncing plotly does
|
|
601
549
|
// https://github.com/plotly/plotly.js/issues/2769#issuecomment-402099552
|
|
@@ -607,25 +555,20 @@ class Chart extends Component {
|
|
|
607
555
|
}
|
|
608
556
|
}
|
|
609
557
|
render() {
|
|
610
|
-
var
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
revision,
|
|
623
|
-
shownBlocker
|
|
624
|
-
} = this.state;
|
|
558
|
+
var PlotComponent = this.PlotComponent;
|
|
559
|
+
var _this$state = this.state,
|
|
560
|
+
data = _this$state.data,
|
|
561
|
+
downsamplingError = _this$state.downsamplingError,
|
|
562
|
+
isDownsampleFinished = _this$state.isDownsampleFinished,
|
|
563
|
+
isDownsampleInProgress = _this$state.isDownsampleInProgress,
|
|
564
|
+
isDownsamplingDisabled = _this$state.isDownsamplingDisabled,
|
|
565
|
+
error = _this$state.error,
|
|
566
|
+
shownError = _this$state.shownError,
|
|
567
|
+
layout = _this$state.layout,
|
|
568
|
+
revision = _this$state.revision,
|
|
569
|
+
shownBlocker = _this$state.shownBlocker;
|
|
625
570
|
var config = this.getCachedConfig(downsamplingError, isDownsampleFinished, isDownsampleInProgress, isDownsamplingDisabled, data !== null && data !== void 0 ? data : [], error);
|
|
626
|
-
var
|
|
627
|
-
model
|
|
628
|
-
} = this.props;
|
|
571
|
+
var model = this.props.model;
|
|
629
572
|
var isPlotShown = data != null && shownBlocker == null;
|
|
630
573
|
var errorOverlay = null;
|
|
631
574
|
if (shownBlocker != null) {
|
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","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","shownBlocker","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","_message","message","onError","EVENT_ERROR","Error","EVENT_BLOCKER","blocker","EVENT_BLOCKER_CLEAR","EVENT_LAYOUT_UPDATED","newLayout","_ref5","debug","handlePlotUpdate","figure","ranges","getLayoutRanges","isRangesChanged","handleRelayout","changes","hiddenlabels","onSettingsChanged","hiddenSeries","handleRestyle","_ref6","seriesIndexes","Object","keys","reduce","acc","_ref7","visible","dh","chartUtils","_ref8","template","makeDefaultTemplate","_ref9","force","arguments","length","warn","isRectChanged","setDimensions","getColumnFormats","getDateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","updateFormatter","webgl","updateRenderOptions","formatter","setFormatter","renderOptions","setRenderOptions","PlotlyProp","relayout","el","autosize","catch","e","render","config","getCachedConfig","isPlotShown","errorOverlay","errorMessage","onConfirm","fireBlockerClear","onDiscard","className","ref","children","onAfterPlot","onRelayout","onRestyle","style","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","ChartContainer","chartTheme"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, type ReactElement, type RefObject } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n type IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n type DateTimeColumnFormatterOptions,\n type DecimalColumnFormatterOptions,\n type IntegerColumnFormatterOptions,\n type FormattingRule,\n type ColumnFormatSettings,\n type DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type Config as PlotlyConfig,\n type Layout,\n type Icon,\n type Data,\n type PlotData,\n type 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 { type ChartTheme } from './ChartTheme';\nimport ChartUtils, { type 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 defaultDecimalFormatOptions?: DecimalColumnFormatterOptions;\n defaultIntegerFormatOptions?: 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 that doesn't completely block the chart from rendering */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n\n /** A message that blocks the chart from rendering. It can be bypassed by the user to continue rendering. */\n shownBlocker: string | null;\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 shownBlocker: null,\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?: readonly 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: DhType.Event<unknown>): 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 as Partial<Data>[] | null,\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 =\n (detail as { message?: string }).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(\n new DownsamplingError(\n downsamplingError == null ? undefined : `${downsamplingError}`\n )\n );\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 case ChartModel.EVENT_BLOCKER: {\n const blocker = `${detail}`;\n this.setState({ shownBlocker: blocker });\n break;\n }\n case ChartModel.EVENT_BLOCKER_CLEAR: {\n this.setState({ shownBlocker: null });\n break;\n }\n case ChartModel.EVENT_LAYOUT_UPDATED: {\n const newLayout = detail as Partial<Layout>;\n this.setState(({ layout, revision }) => ({\n layout: { ...layout, ...newLayout },\n revision: revision + 1,\n }));\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 {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {},\n } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, defaultDecimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\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 shownBlocker,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const { model } = this.props;\n const isPlotShown = data != null && shownBlocker == null;\n\n let errorOverlay: React.ReactNode = null;\n if (shownBlocker != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${shownBlocker}`}\n onConfirm={() => {\n model.fireBlockerClear();\n }}\n />\n );\n } else if (shownError != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n );\n } else if (downsamplingError != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n );\n }\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 {errorOverlay}\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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","ignoreList":[]}
|
|
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","_faIcon$icon","_slicedToArray","icon","width","path","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","shownBlocker","componentDidMount","updateDimensions","updateModelDimensions","initData","initFormatter","_this$props","isActive","model","subscribe","current","observe","handleThemeChange","componentDidUpdate","prevProps","_this$props2","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","_message","message","onError","EVENT_ERROR","Error","EVENT_BLOCKER","blocker","EVENT_BLOCKER_CLEAR","EVENT_LAYOUT_UPDATED","newLayout","_ref5","debug","handlePlotUpdate","figure","ranges","getLayoutRanges","isRangesChanged","handleRelayout","changes","hiddenlabels","onSettingsChanged","hiddenSeries","handleRestyle","_ref6","_ref7","seriesIndexes","Object","keys","reduce","acc","_ref8","visible","_this$props3","dh","chartUtils","_ref9","template","makeDefaultTemplate","_ref0","force","arguments","length","warn","isRectChanged","_this$props4","setDimensions","getColumnFormats","getDateTimeFormatterOptions","_settings$defaultDeci","defaultDecimalFormatOptions","_settings$defaultInte","defaultIntegerFormatOptions","updateFormatter","webgl","updateRenderOptions","formatter","setFormatter","renderOptions","setRenderOptions","PlotlyProp","relayout","el","autosize","catch","e","render","_this$state","config","getCachedConfig","isPlotShown","errorOverlay","errorMessage","onConfirm","fireBlockerClear","onDiscard","className","ref","children","onAfterPlot","onRelayout","onRestyle","style","timeZone","defaultDateTimeFormat","FULL_DATE_FORMAT","showTimeZone","showTSeparator","ChartContainer","chartTheme"],"sources":["../src/Chart.tsx"],"sourcesContent":["import React, { Component, type ReactElement, type RefObject } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoize-one';\nimport {\n vsLoading,\n dhGraphLineDown,\n dhWarningFilled,\n type IconDefinition,\n} from '@deephaven/icons';\nimport {\n Formatter,\n FormatterUtils,\n DateUtils,\n type DateTimeColumnFormatterOptions,\n type DecimalColumnFormatterOptions,\n type IntegerColumnFormatterOptions,\n type FormattingRule,\n type ColumnFormatSettings,\n type DateTimeFormatSettings,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type Config as PlotlyConfig,\n type Layout,\n type Icon,\n type Data,\n type PlotData,\n type 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 { type ChartTheme } from './ChartTheme';\nimport ChartUtils, { type 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 defaultDecimalFormatOptions?: DecimalColumnFormatterOptions;\n defaultIntegerFormatOptions?: 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 that doesn't completely block the chart from rendering */\n error: unknown;\n shownError: string | null;\n layout: Partial<Layout>;\n revision: number;\n\n /** A message that blocks the chart from rendering. It can be bypassed by the user to continue rendering. */\n shownBlocker: string | null;\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 shownBlocker: null,\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?: readonly 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: DhType.Event<unknown>): 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 as Partial<Data>[] | null,\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 =\n (detail as { message?: string }).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(\n new DownsamplingError(\n downsamplingError == null ? undefined : `${downsamplingError}`\n )\n );\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 case ChartModel.EVENT_BLOCKER: {\n const blocker = `${detail}`;\n this.setState({ shownBlocker: blocker });\n break;\n }\n case ChartModel.EVENT_BLOCKER_CLEAR: {\n this.setState({ shownBlocker: null });\n break;\n }\n case ChartModel.EVENT_LAYOUT_UPDATED: {\n const newLayout = detail as Partial<Layout>;\n this.setState(({ layout, revision }) => ({\n layout: { ...layout, ...newLayout },\n revision: revision + 1,\n }));\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 {\n defaultDecimalFormatOptions = {},\n defaultIntegerFormatOptions = {},\n } = settings;\n\n if (\n !deepEqual(this.columnFormats, columnFormats) ||\n !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions) ||\n !deepEqual(this.decimalFormatOptions, defaultDecimalFormatOptions) ||\n !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions)\n ) {\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\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 shownBlocker,\n } = this.state;\n const config = this.getCachedConfig(\n downsamplingError,\n isDownsampleFinished,\n isDownsampleInProgress,\n isDownsamplingDisabled,\n data ?? [],\n error\n );\n const { model } = this.props;\n const isPlotShown = data != null && shownBlocker == null;\n\n let errorOverlay: React.ReactNode = null;\n if (shownBlocker != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${shownBlocker}`}\n onConfirm={() => {\n model.fireBlockerClear();\n }}\n />\n );\n } else if (shownError != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n );\n } else if (downsamplingError != null) {\n errorOverlay = (\n <ChartErrorOverlay\n errorMessage={`${downsamplingError}`}\n onDiscard={() => {\n this.handleDownsampleErrorClose();\n }}\n onConfirm={() => {\n this.handleDownsampleErrorClose();\n this.handleDownsampleClick();\n }}\n />\n );\n }\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 {errorOverlay}\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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","ignoreList":[]}
|