@deephaven/dashboard-core-plugins 0.15.5-beta.0 → 0.15.5-beta.4
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/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +2 -1
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts +1 -0
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +5 -3
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +1 -1
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +73 -81
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +41 -58
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +46 -46
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -39
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.d.ts +11 -16
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +5 -8
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +17 -19
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +5 -8
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.d.ts +24 -28
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +19 -23
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts +4 -4
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +2 -2
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.d.ts +1 -1
- package/dist/events/ChartEvent.d.ts.map +1 -1
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.d.ts +1 -1
- package/dist/events/ConsoleEvent.d.ts.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.d.ts +1 -1
- package/dist/events/InputFilterEvent.d.ts.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.d.ts +1 -1
- package/dist/events/IrisGridEvent.d.ts.map +1 -1
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.d.ts +1 -1
- package/dist/events/NotebookEvent.d.ts.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.d.ts +1 -1
- package/dist/events/PQEvent.d.ts.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.d.ts +1 -1
- package/dist/events/PandasEvent.d.ts.map +1 -1
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.d.ts +1 -1
- package/dist/events/TabEvent.d.ts.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.d.ts +8 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +4 -0
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -0
- package/dist/linker/ColumnSelectionValidator.js +2 -0
- package/dist/linker/ColumnSelectionValidator.js.map +1 -0
- package/dist/linker/Linker.d.ts +11 -11
- package/dist/linker/Linker.js +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +3 -3
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.d.ts +1 -1
- package/dist/linker/ToolType.d.ts.map +1 -1
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +22 -26
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +5 -14
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +27 -21
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +149 -152
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +65 -73
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts +41 -56
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +13 -35
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +63 -73
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +67 -83
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +110 -106
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +60 -62
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +5 -7
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts +3 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +83 -62
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +58 -36
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts +50 -51
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +35 -34
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +191 -178
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +150 -179
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +29 -45
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js +9 -11
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.d.ts +34 -34
- package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
- package/dist/panels/MarkdownNotebook.js +21 -18
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +41 -47
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +17 -19
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +137 -117
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +94 -68
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.d.ts +20 -17
- package/dist/panels/PandasPanel.d.ts.map +1 -1
- package/dist/panels/PandasPanel.js +17 -13
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +87 -123
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +29 -54
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.d.ts +16 -31
- package/dist/panels/PanelContextMenu.d.ts.map +1 -1
- package/dist/panels/PanelContextMenu.js +12 -15
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.d.ts +26 -28
- package/dist/panels/RenameDialog.d.ts.map +1 -1
- package/dist/panels/RenameDialog.js +15 -19
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts +72 -106
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +17 -47
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +29 -22
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.d.ts +4 -4
- package/dist/prop-types/CommonPropTypes.d.ts.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.d.ts +2 -7
- package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
- package/dist/prop-types/UIPropTypes.js +0 -7
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.d.ts +2 -2
- package/dist/prop-types/index.d.ts.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.d.ts +1 -1
- package/dist/redux/actionTypes.d.ts.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.d.ts +63 -8
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js +17 -17
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/reducers/index.d.ts +3 -4
- package/dist/redux/reducers/index.d.ts.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.d.ts +63 -9
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js +24 -24
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +20 -17
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
3
|
import React, { Component } from 'react';
|
|
4
|
-
import PropTypes from 'prop-types';
|
|
5
4
|
import { connect } from 'react-redux';
|
|
6
5
|
import debounce from 'lodash.debounce';
|
|
7
6
|
import deepEqual from 'deep-equal';
|
|
8
7
|
import memoize from 'memoize-one';
|
|
9
|
-
import {
|
|
8
|
+
import { LayoutUtils } from '@deephaven/dashboard';
|
|
10
9
|
import dh from '@deephaven/jsapi-shim';
|
|
11
10
|
import { DateTimeColumnFormatter, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
|
|
12
11
|
import Log from '@deephaven/log';
|
|
@@ -16,7 +15,6 @@ import DropdownFilter from "../controls/dropdown-filter/DropdownFilter.js";
|
|
|
16
15
|
import { InputFilterEvent } from "../events/index.js";
|
|
17
16
|
import { getColumnsForDashboard, getColumnSelectionValidatorForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard } from "../redux/index.js";
|
|
18
17
|
import "./DropdownFilterPanel.css";
|
|
19
|
-
import { UIPropTypes } from "../prop-types/index.js";
|
|
20
18
|
import ToolType from "../linker/ToolType.js";
|
|
21
19
|
import WidgetPanel from "./WidgetPanel.js";
|
|
22
20
|
var log = Log.module('DropdownFilterPanel');
|
|
@@ -27,18 +25,28 @@ class DropdownFilterPanel extends Component {
|
|
|
27
25
|
constructor(props) {
|
|
28
26
|
super(props);
|
|
29
27
|
|
|
28
|
+
_defineProperty(this, "dropdownFilterRef", void 0);
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "panelContainer", void 0);
|
|
31
|
+
|
|
32
|
+
_defineProperty(this, "pending", void 0);
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "cleanup", void 0);
|
|
35
|
+
|
|
36
|
+
_defineProperty(this, "columnFormats", void 0);
|
|
37
|
+
|
|
30
38
|
_defineProperty(this, "getCachedValues", memoize((rawValues, _ref, formatter) => {
|
|
31
39
|
var {
|
|
32
40
|
type,
|
|
33
41
|
name
|
|
34
42
|
} = _ref;
|
|
35
43
|
|
|
36
|
-
if (TableUtils.isDateType(type)) {
|
|
44
|
+
if (type && TableUtils.isDateType(type)) {
|
|
37
45
|
return rawValues.map(value => DropdownFilterPanel.DATETIME_FORMATTER.format(value));
|
|
38
46
|
}
|
|
39
47
|
|
|
40
48
|
return rawValues.map(value => // Skip formatting for nulls so they don't get converted to ''
|
|
41
|
-
value != null ? formatter.getFormattedString(value, type, name) : null);
|
|
49
|
+
value != null && type != null ? formatter.getFormattedString(value, type, name) : null);
|
|
42
50
|
}));
|
|
43
51
|
|
|
44
52
|
_defineProperty(this, "getCachedPanelLinks", memoize((dashboardLinks, panel) => {
|
|
@@ -114,28 +122,27 @@ class DropdownFilterPanel extends Component {
|
|
|
114
122
|
this.dropdownFilterRef = /*#__PURE__*/React.createRef();
|
|
115
123
|
this.panelContainer = /*#__PURE__*/React.createRef();
|
|
116
124
|
this.pending = new Pending();
|
|
117
|
-
this.cleanup = null;
|
|
118
125
|
var {
|
|
119
126
|
panelState,
|
|
120
127
|
settings
|
|
121
128
|
} = props;
|
|
122
|
-
this.columnFormats = settings
|
|
129
|
+
this.columnFormats = FormatterUtils.getColumnFormats(settings);
|
|
123
130
|
var {
|
|
124
131
|
value: _value = '',
|
|
125
132
|
isValueShown = false,
|
|
126
133
|
name: _name,
|
|
127
134
|
type: _type,
|
|
128
|
-
timestamp
|
|
135
|
+
timestamp
|
|
129
136
|
} = panelState !== null && panelState !== void 0 ? panelState : {};
|
|
130
137
|
var column = _name != null && _type != null ? {
|
|
131
138
|
name: _name,
|
|
132
139
|
type: _type
|
|
133
|
-
} :
|
|
140
|
+
} : undefined;
|
|
134
141
|
this.state = {
|
|
135
142
|
column,
|
|
136
143
|
formatter: new Formatter(this.columnFormats),
|
|
137
|
-
valuesTable:
|
|
138
|
-
valuesColumn:
|
|
144
|
+
valuesTable: undefined,
|
|
145
|
+
valuesColumn: undefined,
|
|
139
146
|
sourceSize: 0,
|
|
140
147
|
value: _value,
|
|
141
148
|
timestamp,
|
|
@@ -187,11 +194,11 @@ class DropdownFilterPanel extends Component {
|
|
|
187
194
|
var prevSource = this.getSource(prevProps);
|
|
188
195
|
var prevSourceTable = this.getSourceTable(prevProps);
|
|
189
196
|
|
|
190
|
-
if (settings !== prevProps.settings) {
|
|
197
|
+
if (settings !== prevProps.settings && settings !== undefined) {
|
|
191
198
|
this.updateFormatterSettings(settings);
|
|
192
199
|
}
|
|
193
200
|
|
|
194
|
-
if (valuesTable !== prevState.valuesTable && prevState.valuesTable
|
|
201
|
+
if (valuesTable !== prevState.valuesTable && prevState.valuesTable != null) {
|
|
195
202
|
log.debug('Table in state modified, closing the old table.');
|
|
196
203
|
prevState.valuesTable.close();
|
|
197
204
|
} // Checking source change in addition to table change
|
|
@@ -228,7 +235,7 @@ class DropdownFilterPanel extends Component {
|
|
|
228
235
|
this.cleanup();
|
|
229
236
|
}
|
|
230
237
|
|
|
231
|
-
if (valuesTable
|
|
238
|
+
if (valuesTable != null) {
|
|
232
239
|
valuesTable.close();
|
|
233
240
|
}
|
|
234
241
|
}
|
|
@@ -236,7 +243,7 @@ class DropdownFilterPanel extends Component {
|
|
|
236
243
|
getCoordinateForColumn() {
|
|
237
244
|
var _element$getBoundingC;
|
|
238
245
|
|
|
239
|
-
if (
|
|
246
|
+
if (this.panelContainer.current == null) {
|
|
240
247
|
return null;
|
|
241
248
|
}
|
|
242
249
|
|
|
@@ -261,14 +268,14 @@ class DropdownFilterPanel extends Component {
|
|
|
261
268
|
return "Table too large, must have fewer than ".concat(DropdownFilterPanel.MAX_TABLE_SIZE, " options.");
|
|
262
269
|
}
|
|
263
270
|
|
|
264
|
-
return
|
|
271
|
+
return undefined;
|
|
265
272
|
}
|
|
266
273
|
|
|
267
274
|
getPanelErrorMessage() {
|
|
268
275
|
var {
|
|
269
276
|
error
|
|
270
277
|
} = this.state;
|
|
271
|
-
return error ? "".concat(error) :
|
|
278
|
+
return error ? "".concat(error) : undefined;
|
|
272
279
|
}
|
|
273
280
|
|
|
274
281
|
getSource() {
|
|
@@ -319,12 +326,14 @@ class DropdownFilterPanel extends Component {
|
|
|
319
326
|
value
|
|
320
327
|
} = _ref3;
|
|
321
328
|
var {
|
|
322
|
-
name =
|
|
323
|
-
type =
|
|
329
|
+
name = undefined,
|
|
330
|
+
type = undefined
|
|
324
331
|
} = column !== null && column !== void 0 ? column : {};
|
|
325
332
|
var sendUpdate = true;
|
|
326
333
|
var timestamp = Date.now();
|
|
327
334
|
this.setState(_ref4 => {
|
|
335
|
+
var _ref5, _timestamp;
|
|
336
|
+
|
|
328
337
|
var {
|
|
329
338
|
panelState,
|
|
330
339
|
timestamp: prevTimestamp,
|
|
@@ -333,7 +342,7 @@ class DropdownFilterPanel extends Component {
|
|
|
333
342
|
} = _ref4;
|
|
334
343
|
// If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it
|
|
335
344
|
var isFlip = panelState != null && isValueShown !== panelState.isValueShown && name === panelState.name && type === panelState.type && value === panelState.value;
|
|
336
|
-
sendUpdate = !skipUpdate && isValueShown && (!isFlip || !wasFlipped);
|
|
345
|
+
sendUpdate = (_ref5 = !skipUpdate && isValueShown && (!isFlip || !wasFlipped)) !== null && _ref5 !== void 0 ? _ref5 : false;
|
|
337
346
|
|
|
338
347
|
if (!sendUpdate) {
|
|
339
348
|
timestamp = prevTimestamp;
|
|
@@ -345,7 +354,7 @@ class DropdownFilterPanel extends Component {
|
|
|
345
354
|
name,
|
|
346
355
|
type,
|
|
347
356
|
value,
|
|
348
|
-
timestamp
|
|
357
|
+
timestamp: (_timestamp = timestamp) !== null && _timestamp !== void 0 ? _timestamp : undefined
|
|
349
358
|
},
|
|
350
359
|
timestamp,
|
|
351
360
|
wasFlipped: isFlip,
|
|
@@ -353,7 +362,7 @@ class DropdownFilterPanel extends Component {
|
|
|
353
362
|
};
|
|
354
363
|
}, () => {
|
|
355
364
|
if (sendUpdate) {
|
|
356
|
-
this.sendUpdate(name, type, value, timestamp);
|
|
365
|
+
this.sendUpdate(name !== null && name !== void 0 ? name : null, type, value, timestamp);
|
|
357
366
|
}
|
|
358
367
|
});
|
|
359
368
|
}
|
|
@@ -381,10 +390,10 @@ class DropdownFilterPanel extends Component {
|
|
|
381
390
|
this.applySourceSorts();
|
|
382
391
|
}
|
|
383
392
|
|
|
384
|
-
handleSourceSizeChange(
|
|
393
|
+
handleSourceSizeChange(_ref6) {
|
|
385
394
|
var {
|
|
386
395
|
detail
|
|
387
|
-
} =
|
|
396
|
+
} = _ref6;
|
|
388
397
|
this.setState({
|
|
389
398
|
sourceSize: detail
|
|
390
399
|
});
|
|
@@ -399,17 +408,19 @@ class DropdownFilterPanel extends Component {
|
|
|
399
408
|
}
|
|
400
409
|
|
|
401
410
|
handleClearAllFilters() {
|
|
402
|
-
|
|
411
|
+
var _this$dropdownFilterR, _this$dropdownFilterR2;
|
|
412
|
+
|
|
413
|
+
(_this$dropdownFilterR = this.dropdownFilterRef) === null || _this$dropdownFilterR === void 0 ? void 0 : (_this$dropdownFilterR2 = _this$dropdownFilterR.current) === null || _this$dropdownFilterR2 === void 0 ? void 0 : _this$dropdownFilterR2.clearFilter();
|
|
403
414
|
}
|
|
404
415
|
/**
|
|
405
416
|
* Set the filter value, card side, selected column
|
|
406
|
-
* @param
|
|
407
|
-
* @param
|
|
417
|
+
* @param state Filter state to set
|
|
418
|
+
* @param sendUpdate Emit filters changed event if true
|
|
408
419
|
*/
|
|
409
420
|
|
|
410
421
|
|
|
411
422
|
setPanelState(state) {
|
|
412
|
-
var _this$
|
|
423
|
+
var _this$dropdownFilterR3, _this$dropdownFilterR4;
|
|
413
424
|
|
|
414
425
|
var sendUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
415
426
|
|
|
@@ -424,7 +435,7 @@ class DropdownFilterPanel extends Component {
|
|
|
424
435
|
}); // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes
|
|
425
436
|
// Setting the ref state directly triggers the onChange handler and updates the panelState
|
|
426
437
|
|
|
427
|
-
(_this$
|
|
438
|
+
(_this$dropdownFilterR3 = this.dropdownFilterRef) === null || _this$dropdownFilterR3 === void 0 ? void 0 : (_this$dropdownFilterR4 = _this$dropdownFilterR3.current) === null || _this$dropdownFilterR4 === void 0 ? void 0 : _this$dropdownFilterR4.setFilterState(state);
|
|
428
439
|
}
|
|
429
440
|
|
|
430
441
|
sendUpdate(name, type, value, timestamp) {
|
|
@@ -457,7 +468,7 @@ class DropdownFilterPanel extends Component {
|
|
|
457
468
|
log.debug('updateValuesTable', source, sourceTable);
|
|
458
469
|
this.setState({
|
|
459
470
|
values: [],
|
|
460
|
-
valuesTable:
|
|
471
|
+
valuesTable: undefined,
|
|
461
472
|
error: null
|
|
462
473
|
});
|
|
463
474
|
|
|
@@ -491,7 +502,7 @@ class DropdownFilterPanel extends Component {
|
|
|
491
502
|
valuesTable
|
|
492
503
|
});
|
|
493
504
|
}).catch(error => {
|
|
494
|
-
if (PromiseUtils.
|
|
505
|
+
if (PromiseUtils.isCanceled(error)) {
|
|
495
506
|
return;
|
|
496
507
|
}
|
|
497
508
|
|
|
@@ -545,7 +556,7 @@ class DropdownFilterPanel extends Component {
|
|
|
545
556
|
}
|
|
546
557
|
|
|
547
558
|
if (valuesTable == null) {
|
|
548
|
-
this.cleanup =
|
|
559
|
+
this.cleanup = undefined;
|
|
549
560
|
return;
|
|
550
561
|
}
|
|
551
562
|
|
|
@@ -555,6 +566,12 @@ class DropdownFilterPanel extends Component {
|
|
|
555
566
|
|
|
556
567
|
setViewport(valuesTable) {
|
|
557
568
|
var valuesColumn = this.getValuesColumn(valuesTable);
|
|
569
|
+
|
|
570
|
+
if (!valuesColumn) {
|
|
571
|
+
log.error('values column is null');
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
|
|
558
575
|
valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [valuesColumn]);
|
|
559
576
|
}
|
|
560
577
|
|
|
@@ -569,16 +586,22 @@ class DropdownFilterPanel extends Component {
|
|
|
569
586
|
}
|
|
570
587
|
}
|
|
571
588
|
|
|
572
|
-
handleValuesTableUpdate(
|
|
589
|
+
handleValuesTableUpdate(_ref7) {
|
|
573
590
|
var {
|
|
574
591
|
detail
|
|
575
|
-
} =
|
|
592
|
+
} = _ref7;
|
|
576
593
|
var {
|
|
577
594
|
rows
|
|
578
595
|
} = detail;
|
|
579
596
|
var {
|
|
580
597
|
valuesTable
|
|
581
598
|
} = this.state;
|
|
599
|
+
|
|
600
|
+
if (!valuesTable) {
|
|
601
|
+
log.error('valuesTable is null');
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
|
|
582
605
|
var valuesColumn = this.getValuesColumn(valuesTable);
|
|
583
606
|
|
|
584
607
|
if (!valuesColumn) {
|
|
@@ -616,7 +639,7 @@ class DropdownFilterPanel extends Component {
|
|
|
616
639
|
return;
|
|
617
640
|
}
|
|
618
641
|
|
|
619
|
-
columnSelectionValidator(this,
|
|
642
|
+
columnSelectionValidator(this, undefined);
|
|
620
643
|
}
|
|
621
644
|
|
|
622
645
|
render() {
|
|
@@ -678,6 +701,8 @@ class DropdownFilterPanel extends Component {
|
|
|
678
701
|
|
|
679
702
|
}
|
|
680
703
|
|
|
704
|
+
_defineProperty(DropdownFilterPanel, "displayName", 'DropdownFilterPanel');
|
|
705
|
+
|
|
681
706
|
_defineProperty(DropdownFilterPanel, "COMPONENT", 'DropdownFilterPanel');
|
|
682
707
|
|
|
683
708
|
_defineProperty(DropdownFilterPanel, "MAX_TABLE_SIZE", 256);
|
|
@@ -693,33 +718,6 @@ _defineProperty(DropdownFilterPanel, "SOURCE_COLUMN", Object.freeze({
|
|
|
693
718
|
type: null
|
|
694
719
|
}));
|
|
695
720
|
|
|
696
|
-
DropdownFilterPanel.propTypes = {
|
|
697
|
-
glContainer: GLPropTypes.Container.isRequired,
|
|
698
|
-
glEventHub: GLPropTypes.EventHub.isRequired,
|
|
699
|
-
panelState: PropTypes.shape({
|
|
700
|
-
name: PropTypes.string,
|
|
701
|
-
type: PropTypes.string,
|
|
702
|
-
value: PropTypes.string,
|
|
703
|
-
isValueShown: PropTypes.bool
|
|
704
|
-
}),
|
|
705
|
-
isLinkerActive: PropTypes.bool.isRequired,
|
|
706
|
-
columns: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
|
|
707
|
-
columnSelectionValidator: PropTypes.func,
|
|
708
|
-
disableLinking: PropTypes.bool.isRequired,
|
|
709
|
-
settings: PropTypes.shape({
|
|
710
|
-
columnFormats: PropTypes.arrayOf(PropTypes.shape({}))
|
|
711
|
-
}).isRequired,
|
|
712
|
-
// eslint-disable-next-line react/no-unused-prop-types
|
|
713
|
-
panelTableMap: PropTypes.instanceOf(Map).isRequired,
|
|
714
|
-
// eslint-disable-next-line react/no-unused-prop-types
|
|
715
|
-
dashboardLinks: UIPropTypes.Links.isRequired
|
|
716
|
-
};
|
|
717
|
-
DropdownFilterPanel.defaultProps = {
|
|
718
|
-
columnSelectionValidator: null,
|
|
719
|
-
panelState: null
|
|
720
|
-
};
|
|
721
|
-
DropdownFilterPanel.displayName = 'DropdownFilterPanel';
|
|
722
|
-
|
|
723
721
|
var mapStateToProps = (state, ownProps) => {
|
|
724
722
|
var {
|
|
725
723
|
localDashboardId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/DropdownFilterPanel.jsx"],"names":["React","Component","PropTypes","connect","debounce","deepEqual","memoize","GLPropTypes","LayoutUtils","dh","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","UIPropTypes","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","DropdownFilterPanel","constructor","props","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","dashboardLinks","panel","panelId","getIdFromPanel","debug","filter","link","end","links","source","length","start","error","panelTableMap","get","table","columns","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","cleanup","panelState","settings","columnFormats","isValueShown","timestamp","column","state","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCancelled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","getColumnFormats","rows","row","columnSelectionValidator","render","disableLinking","glContainer","isLinkerActive","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","propTypes","Container","isRequired","EventHub","shape","string","bool","arrayOf","func","instanceOf","Map","Links","defaultProps","displayName","mapStateToProps","ownProps","localDashboardId","activeTool","isolatedLinkerPanelId","LINKER","undefined","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport dh from '@deephaven/jsapi-shim';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport { UIPropTypes } from '../prop-types';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\nclass DropdownFilterPanel extends Component {\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n static DATETIME_FORMATTER = new DateTimeColumnFormatter({\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n this.cleanup = null;\n\n const { panelState, settings } = props;\n this.columnFormats = settings.columnFormats;\n const { value = '', isValueShown = false, name, type, timestamp = null } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : null;\n this.state = {\n column,\n formatter: new Formatter(this.columnFormats),\n valuesTable: null,\n valuesColumn: null,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount() {\n this.updateValuesTable();\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable();\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { valuesTable } = this.state;\n const { settings } = this.props;\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n const prevSource = this.getSource(prevProps);\n const prevSourceTable = this.getSourceTable(prevProps);\n\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable !== null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable !== null) {\n valuesTable.close();\n }\n }\n\n getCachedValues = memoize((rawValues, { type, name }, formatter) => {\n if (TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n DropdownFilterPanel.DATETIME_FORMATTER.format(value)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null ? formatter.getFormattedString(value, type, name) : null\n );\n });\n\n getCoordinateForColumn() {\n if (!this.panelContainer.current) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage() {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return null;\n }\n\n getPanelErrorMessage() {\n const { error } = this.state;\n return error ? `${error}` : null;\n }\n\n getCachedPanelLinks = memoize((dashboardLinks, panel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n });\n\n getCachedSource = memoize(links => {\n log.debug('getCachedSource', links);\n let source = null;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize((panelTableMap, source) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n });\n\n getCachedSourceColumn = memoize((table, source) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n });\n\n getSource(props = this.props) {\n const { dashboardLinks } = props;\n const panelLinks = this.getCachedPanelLinks(dashboardLinks, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(props = this.props) {\n const { panelTableMap } = props;\n const source = this.getSource(props);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable) {\n const source = this.getSource();\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable) {\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable) {\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({ column, isValueShown, value }) {\n const { name = null, type = null } = column ?? {};\n let sendUpdate = true;\n let timestamp = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate = !skipUpdate && isValueShown && (!isFlip || !wasFlipped);\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }) {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected() {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters() {\n this.dropdownFilterRef.current.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param {Object} state Filter state to set\n * @param {boolean} sendUpdate Emit filters changed event if true\n */\n setPanelState(state, sendUpdate = false) {\n if (this.getSource() == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef.current?.setFilterState(state);\n }\n\n sendUpdate(name, type, value, timestamp) {\n const { glEventHub } = this.props;\n const sourcePanelId = this.getSource()?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable() {\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: null,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCancelled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceSorts', sourceTable.sort);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceFilters', sourceTable.filter);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable) {\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = null;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable) {\n const valuesColumn = this.getValuesColumn(valuesTable);\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings) {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }) {\n const { rows } = detail;\n const { valuesTable } = this.state;\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, null);\n }\n\n render() {\n const {\n columns,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n\n const source = this.getSource();\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nDropdownFilterPanel.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n glEventHub: GLPropTypes.EventHub.isRequired,\n panelState: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n isValueShown: PropTypes.bool,\n }),\n isLinkerActive: PropTypes.bool.isRequired,\n columns: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n columnSelectionValidator: PropTypes.func,\n disableLinking: PropTypes.bool.isRequired,\n settings: PropTypes.shape({\n columnFormats: PropTypes.arrayOf(PropTypes.shape({})),\n }).isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n panelTableMap: PropTypes.instanceOf(Map).isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n dashboardLinks: UIPropTypes.Links.isRequired,\n};\n\nDropdownFilterPanel.defaultProps = {\n columnSelectionValidator: null,\n panelState: null,\n};\n\nDropdownFilterPanel.displayName = 'DropdownFilterPanel';\n\nconst mapStateToProps = (state, ownProps) => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n DropdownFilterPanel\n);\n"],"file":"DropdownFilterPanel.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/panels/DropdownFilterPanel.tsx"],"names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","dh","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","log","module","DROPDOWN_FILTER_DEBOUNCE","DropdownFilterPanel","constructor","props","rawValues","formatter","type","name","isDateType","map","value","DATETIME_FORMATTER","format","getFormattedString","dashboardLinks","panel","panelId","getIdFromPanel","debug","filter","link","end","links","source","length","start","error","panelTableMap","get","table","columns","find","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","settings","columnFormats","getColumnFormats","isValueShown","timestamp","column","undefined","state","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","current","element","querySelector","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","Date","now","setState","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","clearFilter","setPanelState","setFilterState","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","rows","row","columnSelectionValidator","render","disableLinking","glContainer","isLinkerActive","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","showTimeZone","showTSeparator","defaultDateTimeFormatString","Object","freeze","mapStateToProps","ownProps","localDashboardId","activeTool","isolatedLinkerPanelId","LINKER","forwardRef"],"mappings":"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","sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoize-one';\nimport { LayoutUtils } from '@deephaven/dashboard';\nimport dh, { Column, Row, TableTemplate } from '@deephaven/jsapi-shim';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getActiveTool, getSettings, RootState } from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter } from '@deephaven/golden-layout';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ninterface DropdownFilterPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState?: PanelState;\n isLinkerActive: boolean;\n columns: Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n disableLinking: boolean;\n settings: {\n formatter: FormattingRule[];\n };\n // eslint-disable-next-line react/no-unused-prop-types\n panelTableMap: Map<string | string[], TableTemplate>;\n // eslint-disable-next-line react/no-unused-prop-types\n dashboardLinks: Link[];\n}\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: TableTemplate;\n valuesColumn?: Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nclass DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n static DATETIME_FORMATTER = new DateTimeColumnFormatter({\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n const { value = '', isValueShown = false, name, type, timestamp } =\n panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount() {\n this.updateValuesTable();\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable();\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ) {\n const { valuesTable } = this.state;\n const { settings } = this.props;\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n const prevSource = this.getSource(prevProps);\n const prevSourceTable = this.getSourceTable(prevProps);\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n DropdownFilterPanel.DATETIME_FORMATTER.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize((dashboardLinks: Link[], panel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n });\n\n getCachedSource = memoize(links => {\n log.debug('getCachedSource', links);\n let source = null;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize((panelTableMap, source) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n });\n\n getCachedSourceColumn = memoize((table: TableTemplate, source) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n });\n\n getSource(props = this.props) {\n const { dashboardLinks } = props;\n const panelLinks = this.getCachedPanelLinks(dashboardLinks, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(props = this.props) {\n const { panelTableMap } = props;\n const source = this.getSource(props);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(valuesTable: TableTemplate): Column | null {\n const source = this.getSource();\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: TableTemplate): void {\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: TableTemplate): void {\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown,\n value,\n }: {\n column: Partial<Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }) {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect() {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect() {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange() {\n this.applySourceFilters();\n }\n\n handleSourceSortChange() {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }) {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(\n state: {\n name: string;\n type: string;\n value: string;\n isValueShown: boolean;\n },\n sendUpdate = false\n ): void {\n if (this.getSource() == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { glEventHub } = this.props;\n const sourcePanelId = this.getSource()?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const source = this.getSource();\n const sourceTable = this.getSourceTable();\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts() {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceSorts', sourceTable.sort);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable();\n log.debug('applySourceFilters', sourceTable.filter);\n if (valuesTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: TableTemplate): void {\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: TableTemplate): void {\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }) {\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(columnFormats) });\n }\n }\n\n handleValuesTableUpdate({ detail }: { detail: { rows: Row[] } }) {\n const { rows } = detail;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave() {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render() {\n const {\n columns,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n\n const source = this.getSource();\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string; glContainer: Container }\n) => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n DropdownFilterPanel\n);\n"],"file":"DropdownFilterPanel.js"}
|
|
@@ -2,14 +2,12 @@ import { DashboardPanelProps } from '@deephaven/dashboard';
|
|
|
2
2
|
import { FileStorage, FileStorageItem } from '@deephaven/file-explorer';
|
|
3
3
|
import React, { ReactNode } from 'react';
|
|
4
4
|
import { ConnectedProps } from 'react-redux';
|
|
5
|
+
import { IdeSession } from '@deephaven/jsapi-shim';
|
|
5
6
|
import './FileExplorerPanel.scss';
|
|
6
|
-
declare type DhSession = {
|
|
7
|
-
close: () => void;
|
|
8
|
-
};
|
|
9
7
|
declare type StateProps = {
|
|
10
8
|
fileStorage: FileStorage;
|
|
11
9
|
language: string;
|
|
12
|
-
session?:
|
|
10
|
+
session?: IdeSession;
|
|
13
11
|
};
|
|
14
12
|
declare type OwnProps = DashboardPanelProps;
|
|
15
13
|
declare const connector: import("react-redux").InferableComponentEnhancerWithProps<import("react-redux").DispatchProp<import("redux").AnyAction> & StateProps, DashboardPanelProps>;
|
|
@@ -17,7 +15,7 @@ export declare type FileExplorerPanelProps = OwnProps & StateProps & ConnectedPr
|
|
|
17
15
|
export declare type FileExplorerPanelState = {
|
|
18
16
|
isShown: boolean;
|
|
19
17
|
language?: string;
|
|
20
|
-
session?:
|
|
18
|
+
session?: IdeSession;
|
|
21
19
|
showCreateFolder: boolean;
|
|
22
20
|
};
|
|
23
21
|
/**
|
|
@@ -41,7 +39,7 @@ export declare class FileExplorerPanel extends React.Component<FileExplorerPanel
|
|
|
41
39
|
handleDelete(files: FileStorageItem[]): void;
|
|
42
40
|
handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void;
|
|
43
41
|
handleRename(oldName: string, newName: string): void;
|
|
44
|
-
handleSessionOpened(session:
|
|
42
|
+
handleSessionOpened(session: IdeSession, { language }: {
|
|
45
43
|
language: string;
|
|
46
44
|
}): void;
|
|
47
45
|
handleSessionClosed(): void;
|
|
@@ -52,7 +50,7 @@ export declare class FileExplorerPanel extends React.Component<FileExplorerPanel
|
|
|
52
50
|
declare const _default: import("react-redux").ConnectedComponent<typeof FileExplorerPanel, import("react-redux").Omit<React.ClassAttributes<FileExplorerPanel> & import("@deephaven/dashboard").PanelProps & {
|
|
53
51
|
localDashboardId: string;
|
|
54
52
|
metadata?: Record<string, unknown> | undefined;
|
|
55
|
-
} & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "
|
|
53
|
+
} & StateProps & import("react-redux").DispatchProp<import("redux").AnyAction>, "language" | "dispatch" | "session" | "fileStorage"> & import("@deephaven/dashboard").PanelProps & {
|
|
56
54
|
localDashboardId: string;
|
|
57
55
|
metadata?: Record<string, unknown> | undefined;
|
|
58
56
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,0BAA0B,CAAC;AAKlC,aAAK,UAAU,GAAG;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,aAAK,QAAQ,GAAG,mBAAmB,CAAC;AAkBpC,QAAA,MAAM,SAAS,4JAA6D,CAAC;AAE7E,oBAAY,sBAAsB,GAAG,QAAQ,GAC3C,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,oBAAY,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAOF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CACpD,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,SAAS,SAAuB;IAEvC,MAAM,CAAC,KAAK,SAAmB;IAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAItC;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,OAAO;gBAU7C,KAAK,EAAE,sBAAsB;IA2BzC,iBAAiB,IAAI,IAAI;IAMzB,gBAAgB,IAAI,IAAI;IAgBxB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1C,2BAA2B,IAAI,IAAI;IAOnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAU5C,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAwB1E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMpD,mBAAmB,CACjB,OAAO,EAAE,UAAU,EACnB,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAOP,mBAAmB,IAAI,IAAI;IAO3B,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,OAAO;IAMnB,MAAM,IAAI,SAAS;CAqCpB;;;;;;;;AAED,wBAA4C"}
|