@deephaven/dashboard-core-plugins 0.5.2-matplotlib.2 → 0.6.1-fixed-deps.2
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/ChartPlugin.js +25 -22
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +130 -134
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.d.ts.map +1 -1
- package/dist/FilterPlugin.js +114 -116
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js +29 -26
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js +7 -5
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js +44 -45
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +5 -2
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js +12 -12
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +1 -0
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js +3 -5
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +6 -0
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +356 -394
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +6 -0
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +256 -270
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +18 -56
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +36 -75
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +93 -133
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +17 -32
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +1 -5
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js +1 -5
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/ControlEvent.js +1 -5
- package/dist/events/ControlEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.d.ts +2 -0
- package/dist/events/InputFilterEvent.d.ts.map +1 -1
- package/dist/events/InputFilterEvent.js +3 -5
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +1 -5
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js +1 -5
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js +1 -5
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +1 -5
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js +1 -5
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.d.ts +0 -1
- package/dist/events/index.js +9 -10
- package/dist/events/index.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -11
- package/dist/index.js.map +1 -1
- package/dist/linker/Linker.d.ts +1 -1
- package/dist/linker/Linker.js +594 -606
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js +92 -126
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +162 -220
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +105 -114
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +19 -25
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +18 -24
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +3 -0
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +839 -873
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +160 -186
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +327 -374
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +6 -0
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +537 -566
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +6 -1
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js +208 -210
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.css +111 -0
- package/dist/panels/FilterSetManager.css.map +1 -0
- package/dist/panels/FilterSetManager.d.ts +66 -0
- package/dist/panels/FilterSetManager.d.ts.map +1 -0
- package/dist/panels/FilterSetManager.js +732 -0
- package/dist/panels/FilterSetManager.js.map +1 -0
- package/dist/panels/FilterSetManagerPanel.css +33 -0
- package/dist/panels/FilterSetManagerPanel.css.map +1 -0
- package/dist/panels/FilterSetManagerPanel.d.ts +69 -0
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -0
- package/dist/panels/FilterSetManagerPanel.js +383 -0
- package/dist/panels/FilterSetManagerPanel.js.map +1 -0
- package/dist/panels/InputFilterPanel.d.ts +7 -0
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +198 -206
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +11 -3
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +779 -771
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.js +80 -116
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +165 -199
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +3 -1
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +870 -862
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +56 -90
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js +282 -313
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js +107 -158
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js +144 -172
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/Shortcuts.js +1 -1
- package/dist/panels/Shortcuts.js.map +1 -1
- package/dist/panels/WidgetPanel.js +133 -163
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +7 -5
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.d.ts +1 -1
- package/dist/panels/index.js +16 -16
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +4 -8
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.js +6 -6
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.js +2 -2
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actions.d.ts +1 -0
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js +33 -54
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js +6 -21
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/index.js +2 -2
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.d.ts +1 -0
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js +22 -18
- package/dist/redux/selectors.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -54
- package/dist/MatPlotLibPlugin.d.ts +0 -5
- package/dist/MatPlotLibPlugin.d.ts.map +0 -1
- package/dist/MatPlotLibPlugin.js +0 -45
- package/dist/MatPlotLibPlugin.js.map +0 -1
- package/dist/events/MatPlotLibEvent.d.ts +0 -5
- package/dist/events/MatPlotLibEvent.d.ts.map +0 -1
- package/dist/events/MatPlotLibEvent.js +0 -12
- package/dist/events/MatPlotLibEvent.js.map +0 -1
- package/dist/panels/MatPlotLibPanel.d.ts +0 -22
- package/dist/panels/MatPlotLibPanel.d.ts.map +0 -1
- package/dist/panels/MatPlotLibPanel.js +0 -123
- package/dist/panels/MatPlotLibPanel.js.map +0 -1
|
@@ -1,41 +1,7 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
-
|
|
3
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
-
|
|
5
|
-
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."); }
|
|
6
|
-
|
|
7
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
|
|
9
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
-
|
|
11
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
12
|
-
|
|
13
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
-
|
|
15
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
16
2
|
|
|
17
3
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
18
4
|
|
|
19
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
20
|
-
|
|
21
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
22
|
-
|
|
23
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
24
|
-
|
|
25
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
26
|
-
|
|
27
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
28
|
-
|
|
29
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
30
|
-
|
|
31
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
32
|
-
|
|
33
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
34
|
-
|
|
35
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
36
|
-
|
|
37
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
38
|
-
|
|
39
5
|
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; }
|
|
40
6
|
|
|
41
7
|
import React, { Component } from 'react';
|
|
@@ -51,67 +17,61 @@ import { IrisGridUtils } from '@deephaven/iris-grid';
|
|
|
51
17
|
import dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
|
|
52
18
|
import { ThemeExport } from '@deephaven/components';
|
|
53
19
|
import Log from '@deephaven/log';
|
|
54
|
-
import { getActiveTool, setActiveTool as setActiveToolAction } from '@deephaven/redux';
|
|
20
|
+
import { getActiveTool, getSettings, setActiveTool as setActiveToolAction } from '@deephaven/redux';
|
|
55
21
|
import { Pending, PromiseUtils, TextUtils } from '@deephaven/utils';
|
|
56
|
-
import WidgetPanel from
|
|
57
|
-
import ToolType from
|
|
58
|
-
import { UIPropTypes } from
|
|
59
|
-
import { InputFilterEvent, ChartEvent } from
|
|
60
|
-
import { getColumnSelectionValidatorForDashboard, getInputFiltersForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction } from
|
|
61
|
-
import ChartFilterOverlay from
|
|
62
|
-
import ChartColumnSelectorOverlay from
|
|
22
|
+
import WidgetPanel from "./WidgetPanel.js";
|
|
23
|
+
import ToolType from "../linker/ToolType.js";
|
|
24
|
+
import { UIPropTypes } from "../prop-types/index.js";
|
|
25
|
+
import { InputFilterEvent, ChartEvent } from "../events/index.js";
|
|
26
|
+
import { getColumnSelectionValidatorForDashboard, getInputFiltersForDashboard, getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, getTableMapForDashboard, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction } from "../redux/index.js";
|
|
27
|
+
import ChartFilterOverlay from "./ChartFilterOverlay.js";
|
|
28
|
+
import ChartColumnSelectorOverlay from "./ChartColumnSelectorOverlay.js";
|
|
63
29
|
import "./ChartPanel.css";
|
|
64
30
|
var log = Log.module('ChartPanel');
|
|
65
31
|
var UPDATE_MODEL_DEBOUNCE = 150;
|
|
66
|
-
export
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
var _super = _createSuper(ChartPanel);
|
|
32
|
+
export class ChartPanel extends Component {
|
|
33
|
+
constructor(props) {
|
|
34
|
+
super(props);
|
|
70
35
|
|
|
71
|
-
|
|
72
|
-
var _this;
|
|
73
|
-
|
|
74
|
-
_classCallCheck(this, ChartPanel);
|
|
75
|
-
|
|
76
|
-
_this = _super.call(this, props);
|
|
77
|
-
|
|
78
|
-
_defineProperty(_assertThisInitialized(_this), "getWaitingInputMap", memoize(function (isFilterRequired, columnMap, filterMap) {
|
|
36
|
+
_defineProperty(this, "getWaitingInputMap", memoize((isFilterRequired, columnMap, filterMap) => {
|
|
79
37
|
if (!isFilterRequired) {
|
|
80
38
|
return new Map();
|
|
81
39
|
}
|
|
82
40
|
|
|
83
41
|
var waitingInputMap = new Map(columnMap);
|
|
84
|
-
filterMap.forEach(
|
|
85
|
-
waitingInputMap
|
|
42
|
+
filterMap.forEach((filter, name) => {
|
|
43
|
+
waitingInputMap.delete(name);
|
|
86
44
|
});
|
|
87
45
|
return waitingInputMap;
|
|
88
46
|
}));
|
|
89
47
|
|
|
90
|
-
_defineProperty(
|
|
48
|
+
_defineProperty(this, "getWaitingFilterMap", memoize((isFilterRequired, columnMap, filterMap, linkedColumnMap, inputFilterMap) => {
|
|
91
49
|
if (!isFilterRequired) {
|
|
92
50
|
return new Map();
|
|
93
51
|
}
|
|
94
52
|
|
|
95
53
|
var waitingFilterMap = new Map(columnMap);
|
|
96
|
-
filterMap.forEach(
|
|
97
|
-
waitingFilterMap
|
|
54
|
+
filterMap.forEach((filter, name) => {
|
|
55
|
+
waitingFilterMap.delete(name);
|
|
98
56
|
});
|
|
99
|
-
inputFilterMap.forEach(
|
|
100
|
-
waitingFilterMap
|
|
57
|
+
inputFilterMap.forEach((value, name) => {
|
|
58
|
+
waitingFilterMap.delete(name);
|
|
101
59
|
});
|
|
102
|
-
linkedColumnMap.forEach(
|
|
103
|
-
waitingFilterMap
|
|
60
|
+
linkedColumnMap.forEach((column, name) => {
|
|
61
|
+
waitingFilterMap.delete(name);
|
|
104
62
|
});
|
|
105
63
|
return waitingFilterMap;
|
|
106
64
|
}));
|
|
107
65
|
|
|
108
|
-
_defineProperty(
|
|
66
|
+
_defineProperty(this, "getInputFilterColumnMap", memoize((columnMap, inputFilters) => {
|
|
109
67
|
var inputFilterMap = new Map();
|
|
110
68
|
|
|
111
69
|
for (var i = 0; i < inputFilters.length; i += 1) {
|
|
112
70
|
var inputFilter = inputFilters[i];
|
|
113
|
-
var
|
|
114
|
-
|
|
71
|
+
var {
|
|
72
|
+
name,
|
|
73
|
+
type
|
|
74
|
+
} = inputFilter;
|
|
115
75
|
var column = columnMap.get(name);
|
|
116
76
|
|
|
117
77
|
if (column != null && column.type === type) {
|
|
@@ -122,9 +82,9 @@ export var ChartPanel = /*#__PURE__*/function (_Component) {
|
|
|
122
82
|
return inputFilterMap;
|
|
123
83
|
}));
|
|
124
84
|
|
|
125
|
-
_defineProperty(
|
|
85
|
+
_defineProperty(this, "getLinkedColumnMap", memoize((columnMap, links) => {
|
|
126
86
|
var linkedColumnMap = new Map();
|
|
127
|
-
var panelId = LayoutUtils.getIdFromPanel(
|
|
87
|
+
var panelId = LayoutUtils.getIdFromPanel(this);
|
|
128
88
|
|
|
129
89
|
for (var i = 0; i < links.length; i += 1) {
|
|
130
90
|
var link = links[i];
|
|
@@ -144,54 +104,49 @@ export var ChartPanel = /*#__PURE__*/function (_Component) {
|
|
|
144
104
|
return linkedColumnMap;
|
|
145
105
|
}));
|
|
146
106
|
|
|
147
|
-
_defineProperty(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
var
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
_ref$filterValueMap = _ref.filterValueMap,
|
|
188
|
-
filterValueMap = _ref$filterValueMap === void 0 ? [] : _ref$filterValueMap,
|
|
189
|
-
_ref$settings = _ref.settings,
|
|
190
|
-
settings = _ref$settings === void 0 ? {} : _ref$settings;
|
|
191
|
-
|
|
107
|
+
_defineProperty(this, "getSelectorColumns", memoize((columnMap, linkedColumnMap, columnSelectionValidator) => Array.from(columnMap.values()).map(column => ({
|
|
108
|
+
name: column.name,
|
|
109
|
+
type: column.type,
|
|
110
|
+
isValid: columnSelectionValidator ? columnSelectionValidator(this, column) : false,
|
|
111
|
+
isActive: linkedColumnMap.has(column.name)
|
|
112
|
+
}))));
|
|
113
|
+
|
|
114
|
+
this.handleColumnSelected = this.handleColumnSelected.bind(this);
|
|
115
|
+
this.handleColumnMouseEnter = this.handleColumnMouseEnter.bind(this);
|
|
116
|
+
this.handleColumnMouseLeave = this.handleColumnMouseLeave.bind(this);
|
|
117
|
+
this.handleDisconnect = this.handleDisconnect.bind(this);
|
|
118
|
+
this.handleReconnect = this.handleReconnect.bind(this);
|
|
119
|
+
this.handleFilterAdd = this.handleFilterAdd.bind(this);
|
|
120
|
+
this.handleHide = this.handleHide.bind(this);
|
|
121
|
+
this.handleError = this.handleError.bind(this);
|
|
122
|
+
this.handleLoadError = this.handleLoadError.bind(this);
|
|
123
|
+
this.handleLoadSuccess = this.handleLoadSuccess.bind(this);
|
|
124
|
+
this.handleResize = this.handleResize.bind(this);
|
|
125
|
+
this.handleSettingsChanged = this.handleSettingsChanged.bind(this);
|
|
126
|
+
this.handleOpenLinker = this.handleOpenLinker.bind(this);
|
|
127
|
+
this.handleShow = this.handleShow.bind(this);
|
|
128
|
+
this.handleSourceColumnChange = this.handleSourceColumnChange.bind(this);
|
|
129
|
+
this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);
|
|
130
|
+
this.handleSourceSortChange = this.handleSourceSortChange.bind(this);
|
|
131
|
+
this.handleTabBlur = this.handleTabBlur.bind(this);
|
|
132
|
+
this.handleTabFocus = this.handleTabFocus.bind(this);
|
|
133
|
+
this.handleUpdate = this.handleUpdate.bind(this);
|
|
134
|
+
this.updateModelFromSource = debounce(this.updateModelFromSource.bind(this), UPDATE_MODEL_DEBOUNCE);
|
|
135
|
+
this.handleClearAllFilters = this.handleClearAllFilters.bind(this);
|
|
136
|
+
this.panelContainer = /*#__PURE__*/React.createRef();
|
|
137
|
+
this.chart = /*#__PURE__*/React.createRef();
|
|
138
|
+
this.pending = new Pending();
|
|
139
|
+
var {
|
|
140
|
+
metadata,
|
|
141
|
+
panelState
|
|
142
|
+
} = props;
|
|
143
|
+
var {
|
|
144
|
+
filterValueMap = [],
|
|
145
|
+
settings = {}
|
|
146
|
+
} = panelState !== null && panelState !== void 0 ? panelState : {};
|
|
192
147
|
var queryName = metadata.query;
|
|
193
|
-
|
|
194
|
-
settings
|
|
148
|
+
this.state = {
|
|
149
|
+
settings,
|
|
195
150
|
error: null,
|
|
196
151
|
isActive: false,
|
|
197
152
|
isDisconnected: false,
|
|
@@ -206,845 +161,850 @@ export var ChartPanel = /*#__PURE__*/function (_Component) {
|
|
|
206
161
|
filterValueMap: new Map(filterValueMap),
|
|
207
162
|
model: null,
|
|
208
163
|
columnMap: new Map(),
|
|
209
|
-
queryName
|
|
164
|
+
queryName,
|
|
210
165
|
// eslint-disable-next-line react/no-unused-state
|
|
211
|
-
panelState
|
|
166
|
+
panelState
|
|
212
167
|
};
|
|
213
|
-
return _this;
|
|
214
168
|
}
|
|
215
169
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
});
|
|
223
|
-
this.initModel();
|
|
224
|
-
}
|
|
170
|
+
componentDidMount() {
|
|
171
|
+
if (!this.isHidden()) {
|
|
172
|
+
this.setState({
|
|
173
|
+
isActive: true
|
|
174
|
+
});
|
|
175
|
+
this.initModel();
|
|
225
176
|
}
|
|
226
|
-
}
|
|
227
|
-
key: "componentDidUpdate",
|
|
228
|
-
value: function componentDidUpdate(prevProps, prevState) {
|
|
229
|
-
var _this$props = this.props,
|
|
230
|
-
inputFilters = _this$props.inputFilters,
|
|
231
|
-
source = _this$props.source;
|
|
232
|
-
var _this$state = this.state,
|
|
233
|
-
columnMap = _this$state.columnMap,
|
|
234
|
-
model = _this$state.model,
|
|
235
|
-
filterMap = _this$state.filterMap,
|
|
236
|
-
filterValueMap = _this$state.filterValueMap,
|
|
237
|
-
isLinked = _this$state.isLinked,
|
|
238
|
-
settings = _this$state.settings;
|
|
239
|
-
|
|
240
|
-
if (!model) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
177
|
+
}
|
|
243
178
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
179
|
+
componentDidUpdate(prevProps, prevState) {
|
|
180
|
+
var {
|
|
181
|
+
inputFilters,
|
|
182
|
+
source
|
|
183
|
+
} = this.props;
|
|
184
|
+
var {
|
|
185
|
+
columnMap,
|
|
186
|
+
model,
|
|
187
|
+
filterMap,
|
|
188
|
+
filterValueMap,
|
|
189
|
+
isLinked,
|
|
190
|
+
settings
|
|
191
|
+
} = this.state;
|
|
192
|
+
|
|
193
|
+
if (!model) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
247
196
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
197
|
+
if (columnMap !== prevState.columnMap) {
|
|
198
|
+
this.pruneFilterMaps();
|
|
199
|
+
}
|
|
251
200
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
this.updatePanelState();
|
|
256
|
-
}
|
|
201
|
+
if (inputFilters !== prevProps.inputFilters) {
|
|
202
|
+
this.updateChangedInputFilters(inputFilters, prevProps.inputFilters);
|
|
203
|
+
}
|
|
257
204
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
205
|
+
if (filterMap !== prevState.filterMap) {
|
|
206
|
+
this.updateFilters();
|
|
207
|
+
} else if (filterValueMap !== prevState.filterValueMap) {
|
|
208
|
+
this.updatePanelState();
|
|
209
|
+
}
|
|
262
210
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
this.updateModelFromSource();
|
|
268
|
-
} else {
|
|
269
|
-
this.stopListeningToSource(source);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
} else if (isLinked && source !== prevProps.source) {
|
|
273
|
-
if (prevProps.source) {
|
|
274
|
-
this.stopListeningToSource(prevProps.source);
|
|
275
|
-
}
|
|
211
|
+
if (settings !== prevState.settings) {
|
|
212
|
+
model.updateSettings(settings);
|
|
213
|
+
this.updatePanelState();
|
|
214
|
+
}
|
|
276
215
|
|
|
277
|
-
|
|
216
|
+
if (isLinked !== prevState.isLinked) {
|
|
217
|
+
if (source) {
|
|
218
|
+
if (isLinked) {
|
|
278
219
|
this.startListeningToSource(source);
|
|
279
220
|
this.updateModelFromSource();
|
|
221
|
+
} else {
|
|
222
|
+
this.stopListeningToSource(source);
|
|
280
223
|
}
|
|
281
224
|
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
this.pending.cancel();
|
|
287
|
-
var source = this.props.source;
|
|
225
|
+
} else if (isLinked && source !== prevProps.source) {
|
|
226
|
+
if (prevProps.source) {
|
|
227
|
+
this.stopListeningToSource(prevProps.source);
|
|
228
|
+
}
|
|
288
229
|
|
|
289
230
|
if (source) {
|
|
290
|
-
this.
|
|
231
|
+
this.startListeningToSource(source);
|
|
232
|
+
this.updateModelFromSource();
|
|
291
233
|
}
|
|
292
234
|
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
this.
|
|
303
|
-
resolved.close();
|
|
304
|
-
}).then(this.handleLoadSuccess, this.handleLoadError);
|
|
305
|
-
}
|
|
306
|
-
}, {
|
|
307
|
-
key: "startListeningToSource",
|
|
308
|
-
value: function startListeningToSource(table) {
|
|
309
|
-
log.debug('startListeningToSource', table);
|
|
310
|
-
table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);
|
|
311
|
-
table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
|
|
312
|
-
table.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
componentWillUnmount() {
|
|
238
|
+
this.pending.cancel();
|
|
239
|
+
var {
|
|
240
|
+
source
|
|
241
|
+
} = this.props;
|
|
242
|
+
|
|
243
|
+
if (source) {
|
|
244
|
+
this.stopListeningToSource(source);
|
|
313
245
|
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
initModel() {
|
|
249
|
+
this.setState({
|
|
250
|
+
isLoading: true,
|
|
251
|
+
isLoaded: false,
|
|
252
|
+
error: null
|
|
253
|
+
});
|
|
254
|
+
var {
|
|
255
|
+
makeModel
|
|
256
|
+
} = this.props;
|
|
257
|
+
this.pending.add(makeModel(), resolved => {
|
|
258
|
+
resolved.close();
|
|
259
|
+
}).then(this.handleLoadSuccess, this.handleLoadError);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
startListeningToSource(table) {
|
|
263
|
+
log.debug('startListeningToSource', table);
|
|
264
|
+
table.addEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);
|
|
265
|
+
table.addEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
|
|
266
|
+
table.addEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
stopListeningToSource(table) {
|
|
270
|
+
log.debug('stopListeningToSource', table);
|
|
271
|
+
table.removeEventListener(dh.Table.EVENT_CUSTOMCOLUMNSCHANGED, this.handleSourceColumnChange);
|
|
272
|
+
table.removeEventListener(dh.Table.EVENT_FILTERCHANGED, this.handleSourceFilterChange);
|
|
273
|
+
table.removeEventListener(dh.Table.EVENT_SORTCHANGED, this.handleSourceSortChange);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
loadModelIfNecessary() {
|
|
277
|
+
var {
|
|
278
|
+
isActive,
|
|
279
|
+
isLoaded,
|
|
280
|
+
isLoading
|
|
281
|
+
} = this.state;
|
|
282
|
+
|
|
283
|
+
if (isActive && !isLoaded && !isLoading) {
|
|
284
|
+
this.initModel();
|
|
321
285
|
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
isHidden() {
|
|
289
|
+
var {
|
|
290
|
+
glContainer
|
|
291
|
+
} = this.props;
|
|
292
|
+
var {
|
|
293
|
+
isHidden
|
|
294
|
+
} = glContainer;
|
|
295
|
+
return isHidden;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
handleColumnSelected(columnName) {
|
|
299
|
+
var {
|
|
300
|
+
glEventHub
|
|
301
|
+
} = this.props;
|
|
302
|
+
var {
|
|
303
|
+
columnMap
|
|
304
|
+
} = this.state;
|
|
305
|
+
glEventHub.emit(ChartEvent.COLUMN_SELECTED, this, columnMap.get(columnName));
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
handleColumnMouseEnter(_ref) {
|
|
309
|
+
var {
|
|
310
|
+
type,
|
|
311
|
+
name
|
|
312
|
+
} = _ref;
|
|
313
|
+
var {
|
|
314
|
+
columnSelectionValidator
|
|
315
|
+
} = this.props;
|
|
316
|
+
log.debug('handleColumnMouseEnter', columnSelectionValidator, type, name);
|
|
317
|
+
|
|
318
|
+
if (!columnSelectionValidator) {
|
|
319
|
+
return;
|
|
333
320
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
321
|
+
|
|
322
|
+
columnSelectionValidator(this, {
|
|
323
|
+
type,
|
|
324
|
+
name
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
handleColumnMouseLeave() {
|
|
329
|
+
var {
|
|
330
|
+
columnSelectionValidator
|
|
331
|
+
} = this.props;
|
|
332
|
+
log.debug('handleColumnMouseLeave', columnSelectionValidator);
|
|
333
|
+
|
|
334
|
+
if (!columnSelectionValidator) {
|
|
335
|
+
return;
|
|
340
336
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
337
|
+
|
|
338
|
+
columnSelectionValidator(this, null);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
handleDisconnect() {
|
|
342
|
+
this.setState({
|
|
343
|
+
error: new Error('Figure disconnected'),
|
|
344
|
+
isDisconnected: true
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
handleFilterAdd(columns) {
|
|
349
|
+
for (var i = 0; i < columns.length; i += 1) {
|
|
350
|
+
this.openInputFilter(columns[i]);
|
|
347
351
|
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
handleOpenLinker() {
|
|
355
|
+
var {
|
|
356
|
+
localDashboardId,
|
|
357
|
+
setActiveTool,
|
|
358
|
+
setDashboardIsolatedLinkerPanelId
|
|
359
|
+
} = this.props;
|
|
360
|
+
setDashboardIsolatedLinkerPanelId(localDashboardId, null);
|
|
361
|
+
setActiveTool(ToolType.LINKER);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
handleReconnect() {
|
|
365
|
+
this.setState({
|
|
366
|
+
isDisconnected: false,
|
|
367
|
+
error: null
|
|
368
|
+
});
|
|
369
|
+
this.sendColumnChange();
|
|
370
|
+
this.updateColumnFilters();
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
handleLoadSuccess(model) {
|
|
374
|
+
log.debug('handleLoadSuccess');
|
|
375
|
+
var {
|
|
376
|
+
model: prevModel
|
|
377
|
+
} = this.state;
|
|
378
|
+
this.setState({
|
|
379
|
+
model,
|
|
380
|
+
isLoaded: true
|
|
381
|
+
}, () => {
|
|
382
|
+
var {
|
|
383
|
+
inputFilters,
|
|
384
|
+
source
|
|
385
|
+
} = this.props;
|
|
386
|
+
var {
|
|
387
|
+
filterMap,
|
|
388
|
+
isLinked
|
|
389
|
+
} = this.state;
|
|
390
|
+
|
|
391
|
+
if (model !== prevModel) {
|
|
392
|
+
this.sendColumnChange();
|
|
393
|
+
this.updateColumnFilters();
|
|
394
|
+
this.updateInputFilters(inputFilters, filterMap.size > 0 || model.isFilterRequired());
|
|
395
|
+
|
|
396
|
+
if (source && isLinked) {
|
|
397
|
+
this.startListeningToSource(source);
|
|
398
|
+
this.updateModelFromSource();
|
|
399
|
+
}
|
|
358
400
|
}
|
|
401
|
+
});
|
|
402
|
+
}
|
|
359
403
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
});
|
|
404
|
+
handleLoadError(error) {
|
|
405
|
+
if (PromiseUtils.isCanceled(error)) {
|
|
406
|
+
return;
|
|
364
407
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
408
|
+
|
|
409
|
+
log.error('handleLoadError', error);
|
|
410
|
+
this.setState({
|
|
411
|
+
error,
|
|
412
|
+
isLoading: false
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
handleSourceColumnChange() {
|
|
417
|
+
this.updateModelFromSource();
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
handleSourceFilterChange() {
|
|
421
|
+
this.updateModelFromSource();
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
handleSourceSortChange() {
|
|
425
|
+
this.updateModelFromSource();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
updateModelFromSource() {
|
|
429
|
+
var {
|
|
430
|
+
metadata,
|
|
431
|
+
source
|
|
432
|
+
} = this.props;
|
|
433
|
+
var {
|
|
434
|
+
isLinked,
|
|
435
|
+
model
|
|
436
|
+
} = this.state;
|
|
437
|
+
var {
|
|
438
|
+
settings
|
|
439
|
+
} = metadata;
|
|
440
|
+
|
|
441
|
+
if (!isLinked || !model || !source) {
|
|
442
|
+
log.debug2('updateModelFromSource ignoring', isLinked, model, source);
|
|
443
|
+
return;
|
|
444
|
+
} // By now the model has already been loaded, which is the only other cancelable thing in pending
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
this.pending.cancel();
|
|
448
|
+
this.pending.add(dh.plot.Figure.create(ChartUtils.makeFigureSettings(settings, source))).then(figure => {
|
|
449
|
+
model.setFigure(figure);
|
|
450
|
+
}).catch(this.handleLoadError);
|
|
451
|
+
this.updatePanelState();
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
updatePanelState() {
|
|
455
|
+
var {
|
|
456
|
+
sourcePanel
|
|
457
|
+
} = this.props;
|
|
458
|
+
var {
|
|
459
|
+
panelState,
|
|
460
|
+
filterValueMap,
|
|
461
|
+
settings
|
|
462
|
+
} = this.state;
|
|
463
|
+
var {
|
|
464
|
+
tableSettings
|
|
465
|
+
} = panelState !== null && panelState !== void 0 ? panelState : {};
|
|
466
|
+
|
|
467
|
+
if (sourcePanel) {
|
|
468
|
+
// Right now just update the panel state from the source
|
|
469
|
+
// If the source isn't available, just keep the state that's already saved
|
|
470
|
+
var {
|
|
471
|
+
inputFilters
|
|
472
|
+
} = sourcePanel.props;
|
|
473
|
+
var {
|
|
474
|
+
panelState: sourcePanelState
|
|
475
|
+
} = sourcePanel.state;
|
|
476
|
+
|
|
477
|
+
if (sourcePanelState) {
|
|
478
|
+
tableSettings = IrisGridUtils.extractTableSettings(sourcePanelState, inputFilters);
|
|
373
479
|
}
|
|
480
|
+
} // eslint-disable-next-line react/no-unused-state
|
|
374
481
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
error: new Error('Figure disconnected'),
|
|
382
|
-
isDisconnected: true
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
}, {
|
|
386
|
-
key: "handleFilterAdd",
|
|
387
|
-
value: function handleFilterAdd(columns) {
|
|
388
|
-
for (var i = 0; i < columns.length; i += 1) {
|
|
389
|
-
this.openInputFilter(columns[i]);
|
|
482
|
+
|
|
483
|
+
this.setState({
|
|
484
|
+
panelState: {
|
|
485
|
+
settings,
|
|
486
|
+
tableSettings,
|
|
487
|
+
filterValueMap: Array.from(filterValueMap)
|
|
390
488
|
}
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
key: "handleOpenLinker",
|
|
394
|
-
value: function handleOpenLinker() {
|
|
395
|
-
var _this$props2 = this.props,
|
|
396
|
-
localDashboardId = _this$props2.localDashboardId,
|
|
397
|
-
setActiveTool = _this$props2.setActiveTool,
|
|
398
|
-
setDashboardIsolatedLinkerPanelId = _this$props2.setDashboardIsolatedLinkerPanelId;
|
|
399
|
-
setDashboardIsolatedLinkerPanelId(localDashboardId, null);
|
|
400
|
-
setActiveTool(ToolType.LINKER);
|
|
401
|
-
}
|
|
402
|
-
}, {
|
|
403
|
-
key: "handleReconnect",
|
|
404
|
-
value: function handleReconnect() {
|
|
405
|
-
this.setState({
|
|
406
|
-
isDisconnected: false,
|
|
407
|
-
error: null
|
|
408
|
-
});
|
|
409
|
-
this.sendColumnChange();
|
|
410
|
-
this.updateColumnFilters();
|
|
411
|
-
}
|
|
412
|
-
}, {
|
|
413
|
-
key: "handleLoadSuccess",
|
|
414
|
-
value: function handleLoadSuccess(model) {
|
|
415
|
-
var _this2 = this;
|
|
489
|
+
});
|
|
490
|
+
}
|
|
416
491
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
inputFilters = _this2$props.inputFilters,
|
|
425
|
-
source = _this2$props.source;
|
|
426
|
-
var _this2$state = _this2.state,
|
|
427
|
-
filterMap = _this2$state.filterMap,
|
|
428
|
-
isLinked = _this2$state.isLinked;
|
|
492
|
+
handleError() {
|
|
493
|
+
// Don't want to set an error state, because the user can fix a chart error within the chart itself.
|
|
494
|
+
// We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.
|
|
495
|
+
this.setState({
|
|
496
|
+
isLoading: false
|
|
497
|
+
});
|
|
498
|
+
}
|
|
429
499
|
|
|
430
|
-
|
|
431
|
-
|
|
500
|
+
handleResize() {
|
|
501
|
+
this.updateChart();
|
|
502
|
+
}
|
|
432
503
|
|
|
433
|
-
|
|
504
|
+
handleSettingsChanged(update) {
|
|
505
|
+
this.setState((_ref2) => {
|
|
506
|
+
var {
|
|
507
|
+
settings: prevSettings
|
|
508
|
+
} = _ref2;
|
|
434
509
|
|
|
435
|
-
|
|
510
|
+
var settings = _objectSpread(_objectSpread({}, prevSettings), update);
|
|
436
511
|
|
|
437
|
-
|
|
438
|
-
|
|
512
|
+
log.debug('Updated settings', settings);
|
|
513
|
+
return {
|
|
514
|
+
settings
|
|
515
|
+
};
|
|
516
|
+
});
|
|
517
|
+
}
|
|
439
518
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
519
|
+
handleHide() {
|
|
520
|
+
this.setActive(false);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
handleShow() {
|
|
524
|
+
this.setActive(true);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
handleTabBlur() {
|
|
528
|
+
this.setActive(false);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
handleTabFocus() {
|
|
532
|
+
var isHidden = this.isHidden();
|
|
533
|
+
this.setActive(!isHidden);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
handleUpdate() {
|
|
537
|
+
this.setState({
|
|
538
|
+
isLoading: false
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
handleClearAllFilters() {
|
|
543
|
+
// nuke link filter and input filter map
|
|
544
|
+
// input filters only clear themselves if they are not yet empty
|
|
545
|
+
this.setState({
|
|
546
|
+
filterValueMap: new Map(),
|
|
547
|
+
filterMap: new Map()
|
|
548
|
+
});
|
|
549
|
+
this.updatePanelState();
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Create an input filter panel for the provided column
|
|
553
|
+
* @param {dh.Column} column The column to create the input filter for
|
|
554
|
+
*/
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
openInputFilter(column) {
|
|
558
|
+
var {
|
|
559
|
+
glEventHub
|
|
560
|
+
} = this.props;
|
|
561
|
+
var {
|
|
562
|
+
name,
|
|
563
|
+
type
|
|
564
|
+
} = column;
|
|
565
|
+
glEventHub.emit(InputFilterEvent.OPEN_INPUT, {
|
|
566
|
+
title: "".concat(name, " Filter"),
|
|
567
|
+
panelState: {
|
|
568
|
+
name,
|
|
569
|
+
type,
|
|
570
|
+
isValueShown: true
|
|
571
|
+
},
|
|
572
|
+
createNewStack: true,
|
|
573
|
+
focusElement: 'input'
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
setActive(isActive) {
|
|
578
|
+
this.setState({
|
|
579
|
+
isActive
|
|
580
|
+
}, () => {
|
|
581
|
+
if (isActive) {
|
|
582
|
+
this.loadModelIfNecessary();
|
|
583
|
+
this.updateChart();
|
|
450
584
|
}
|
|
585
|
+
});
|
|
586
|
+
}
|
|
451
587
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
key: "handleSourceColumnChange",
|
|
460
|
-
value: function handleSourceColumnChange() {
|
|
461
|
-
this.updateModelFromSource();
|
|
462
|
-
}
|
|
463
|
-
}, {
|
|
464
|
-
key: "handleSourceFilterChange",
|
|
465
|
-
value: function handleSourceFilterChange() {
|
|
466
|
-
this.updateModelFromSource();
|
|
467
|
-
}
|
|
468
|
-
}, {
|
|
469
|
-
key: "handleSourceSortChange",
|
|
470
|
-
value: function handleSourceSortChange() {
|
|
471
|
-
this.updateModelFromSource();
|
|
472
|
-
}
|
|
473
|
-
}, {
|
|
474
|
-
key: "updateModelFromSource",
|
|
475
|
-
value: function updateModelFromSource() {
|
|
476
|
-
var _this$props3 = this.props,
|
|
477
|
-
metadata = _this$props3.metadata,
|
|
478
|
-
source = _this$props3.source;
|
|
479
|
-
var _this$state3 = this.state,
|
|
480
|
-
isLinked = _this$state3.isLinked,
|
|
481
|
-
model = _this$state3.model;
|
|
482
|
-
var settings = metadata.settings;
|
|
483
|
-
|
|
484
|
-
if (!isLinked || !model || !source) {
|
|
485
|
-
log.debug2('updateModelFromSource ignoring', isLinked, model, source);
|
|
486
|
-
return;
|
|
487
|
-
} // By now the model has already been loaded, which is the only other cancelable thing in pending
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
this.pending.cancel();
|
|
491
|
-
this.pending.add(dh.plot.Figure.create(ChartUtils.makeFigureSettings(settings, source))).then(function (figure) {
|
|
492
|
-
model.setFigure(figure);
|
|
493
|
-
})["catch"](this.handleLoadError);
|
|
494
|
-
this.updatePanelState();
|
|
588
|
+
sendColumnChange() {
|
|
589
|
+
var {
|
|
590
|
+
model
|
|
591
|
+
} = this.state;
|
|
592
|
+
|
|
593
|
+
if (!model) {
|
|
594
|
+
return;
|
|
495
595
|
}
|
|
496
|
-
}, {
|
|
497
|
-
key: "updatePanelState",
|
|
498
|
-
value: function updatePanelState() {
|
|
499
|
-
var sourcePanel = this.props.sourcePanel;
|
|
500
|
-
var _this$state4 = this.state,
|
|
501
|
-
panelState = _this$state4.panelState,
|
|
502
|
-
filterValueMap = _this$state4.filterValueMap,
|
|
503
|
-
settings = _this$state4.settings;
|
|
504
|
-
|
|
505
|
-
var _ref3 = panelState !== null && panelState !== void 0 ? panelState : {},
|
|
506
|
-
tableSettings = _ref3.tableSettings;
|
|
507
|
-
|
|
508
|
-
if (sourcePanel) {
|
|
509
|
-
// Right now just update the panel state from the source
|
|
510
|
-
// If the source isn't available, just keep the state that's already saved
|
|
511
|
-
var inputFilters = sourcePanel.props.inputFilters;
|
|
512
|
-
var sourcePanelState = sourcePanel.state.panelState;
|
|
513
|
-
|
|
514
|
-
if (sourcePanelState) {
|
|
515
|
-
tableSettings = IrisGridUtils.extractTableSettings(sourcePanelState, inputFilters);
|
|
516
|
-
}
|
|
517
|
-
} // eslint-disable-next-line react/no-unused-state
|
|
518
596
|
|
|
597
|
+
var {
|
|
598
|
+
glEventHub
|
|
599
|
+
} = this.props;
|
|
600
|
+
glEventHub.emit(InputFilterEvent.COLUMNS_CHANGED, this, Array.from(model.getFilterColumnMap().values()));
|
|
601
|
+
}
|
|
519
602
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
settings: settings,
|
|
523
|
-
tableSettings: tableSettings,
|
|
524
|
-
filterValueMap: Array.from(filterValueMap)
|
|
525
|
-
}
|
|
526
|
-
});
|
|
527
|
-
}
|
|
528
|
-
}, {
|
|
529
|
-
key: "handleError",
|
|
530
|
-
value: function handleError() {
|
|
531
|
-
// Don't want to set an error state, because the user can fix a chart error within the chart itself.
|
|
532
|
-
// We're not loading anymore either so stop showing the spinner so the user can actually click those buttons.
|
|
533
|
-
this.setState({
|
|
534
|
-
isLoading: false
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
}, {
|
|
538
|
-
key: "handleResize",
|
|
539
|
-
value: function handleResize() {
|
|
540
|
-
this.updateChart();
|
|
541
|
-
}
|
|
542
|
-
}, {
|
|
543
|
-
key: "handleSettingsChanged",
|
|
544
|
-
value: function handleSettingsChanged(update) {
|
|
545
|
-
this.setState(function (_ref4) {
|
|
546
|
-
var prevSettings = _ref4.settings;
|
|
547
|
-
|
|
548
|
-
var settings = _objectSpread(_objectSpread({}, prevSettings), update);
|
|
549
|
-
|
|
550
|
-
log.debug('Updated settings', settings);
|
|
551
|
-
return {
|
|
552
|
-
settings: settings
|
|
553
|
-
};
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
}, {
|
|
557
|
-
key: "handleHide",
|
|
558
|
-
value: function handleHide() {
|
|
559
|
-
this.setActive(false);
|
|
560
|
-
}
|
|
561
|
-
}, {
|
|
562
|
-
key: "handleShow",
|
|
563
|
-
value: function handleShow() {
|
|
564
|
-
this.setActive(true);
|
|
565
|
-
}
|
|
566
|
-
}, {
|
|
567
|
-
key: "handleTabBlur",
|
|
568
|
-
value: function handleTabBlur() {
|
|
569
|
-
this.setActive(false);
|
|
570
|
-
}
|
|
571
|
-
}, {
|
|
572
|
-
key: "handleTabFocus",
|
|
573
|
-
value: function handleTabFocus() {
|
|
574
|
-
var isHidden = this.isHidden();
|
|
575
|
-
this.setActive(!isHidden);
|
|
576
|
-
}
|
|
577
|
-
}, {
|
|
578
|
-
key: "handleUpdate",
|
|
579
|
-
value: function handleUpdate() {
|
|
580
|
-
this.setState({
|
|
581
|
-
isLoading: false
|
|
582
|
-
});
|
|
583
|
-
}
|
|
584
|
-
}, {
|
|
585
|
-
key: "handleClearAllFilters",
|
|
586
|
-
value: function handleClearAllFilters() {
|
|
587
|
-
// nuke link filter and input filter map
|
|
588
|
-
// input filters only clear themselves if they are not yet empty
|
|
589
|
-
this.setState({
|
|
590
|
-
filterValueMap: new Map(),
|
|
591
|
-
filterMap: new Map()
|
|
592
|
-
});
|
|
593
|
-
this.updatePanelState();
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Create an input filter panel for the provided column
|
|
597
|
-
* @param {dh.Column} column The column to create the input filter for
|
|
598
|
-
*/
|
|
599
|
-
|
|
600
|
-
}, {
|
|
601
|
-
key: "openInputFilter",
|
|
602
|
-
value: function openInputFilter(column) {
|
|
603
|
-
var glEventHub = this.props.glEventHub;
|
|
604
|
-
var name = column.name,
|
|
605
|
-
type = column.type;
|
|
606
|
-
glEventHub.emit(InputFilterEvent.OPEN_INPUT, {
|
|
607
|
-
title: "".concat(name, " Filter"),
|
|
608
|
-
panelState: {
|
|
609
|
-
name: name,
|
|
610
|
-
type: type,
|
|
611
|
-
isValueShown: true
|
|
612
|
-
},
|
|
613
|
-
createNewStack: true,
|
|
614
|
-
focusElement: 'input'
|
|
615
|
-
});
|
|
616
|
-
}
|
|
617
|
-
}, {
|
|
618
|
-
key: "setActive",
|
|
619
|
-
value: function setActive(isActive) {
|
|
620
|
-
var _this3 = this;
|
|
603
|
+
getCoordinateForColumn(columnName) {
|
|
604
|
+
var _element$getBoundingC;
|
|
621
605
|
|
|
622
|
-
|
|
623
|
-
isActive: isActive
|
|
624
|
-
}, function () {
|
|
625
|
-
if (isActive) {
|
|
626
|
-
_this3.loadModelIfNecessary();
|
|
606
|
+
var className = ChartColumnSelectorOverlay.makeButtonClassName(columnName);
|
|
627
607
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
});
|
|
608
|
+
if (!this.panelContainer.current) {
|
|
609
|
+
return null;
|
|
631
610
|
}
|
|
632
|
-
}, {
|
|
633
|
-
key: "sendColumnChange",
|
|
634
|
-
value: function sendColumnChange() {
|
|
635
|
-
var model = this.state.model;
|
|
636
611
|
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
}
|
|
612
|
+
var element = this.panelContainer.current.querySelector(".".concat(className));
|
|
613
|
+
var rect = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : null;
|
|
640
614
|
|
|
641
|
-
|
|
642
|
-
|
|
615
|
+
if (rect == null || rect.width <= 0 || rect.height <= 0) {
|
|
616
|
+
return null;
|
|
643
617
|
}
|
|
644
|
-
}, {
|
|
645
|
-
key: "getCoordinateForColumn",
|
|
646
|
-
value: function getCoordinateForColumn(columnName) {
|
|
647
|
-
var _element$getBoundingC;
|
|
648
618
|
|
|
649
|
-
|
|
619
|
+
var x = rect.left + rect.width / 2;
|
|
620
|
+
var y = rect.bottom;
|
|
621
|
+
return [x, y];
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Set chart filters based on the filter map
|
|
625
|
+
* @param {Map<string, Object>} filterMapParam Filter map
|
|
626
|
+
*/
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
setFilterMap(filterMapParam) {
|
|
630
|
+
log.debug('setFilterMap', filterMapParam);
|
|
631
|
+
this.setState(state => {
|
|
632
|
+
var _updatedFilterMap;
|
|
633
|
+
|
|
634
|
+
var {
|
|
635
|
+
columnMap,
|
|
636
|
+
filterMap
|
|
637
|
+
} = state;
|
|
638
|
+
var updatedFilterMap = null;
|
|
639
|
+
var filterValueMap = new Map(state.filterValueMap);
|
|
640
|
+
filterMapParam.forEach((_ref3, columnName) => {
|
|
641
|
+
var {
|
|
642
|
+
columnType,
|
|
643
|
+
value
|
|
644
|
+
} = _ref3;
|
|
645
|
+
var column = columnMap.get(columnName);
|
|
646
|
+
|
|
647
|
+
if (column == null || column.type !== columnType) {
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
650
650
|
|
|
651
|
-
|
|
652
|
-
return null;
|
|
653
|
-
}
|
|
651
|
+
filterValueMap.set(columnName, value);
|
|
654
652
|
|
|
655
|
-
|
|
656
|
-
|
|
653
|
+
if (filterMap.get(columnName) !== value) {
|
|
654
|
+
if (updatedFilterMap === null) {
|
|
655
|
+
updatedFilterMap = new Map(filterMap);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
updatedFilterMap.set(columnName, value);
|
|
659
|
+
}
|
|
660
|
+
}); // Don't update filterMap unless the filters actually changed.
|
|
661
|
+
// Otherwise the chart gets stuck on a spinner
|
|
662
|
+
// because it never gets an update event for unchanged filters.
|
|
663
|
+
|
|
664
|
+
return {
|
|
665
|
+
filterValueMap,
|
|
666
|
+
filterMap: (_updatedFilterMap = updatedFilterMap) !== null && _updatedFilterMap !== void 0 ? _updatedFilterMap : filterMap
|
|
667
|
+
};
|
|
668
|
+
});
|
|
669
|
+
}
|
|
657
670
|
|
|
658
|
-
|
|
671
|
+
unsetFilterValue(columnName) {
|
|
672
|
+
this.setState(state => {
|
|
673
|
+
// We want to unset a value unless there's an input filter for it
|
|
674
|
+
// If there's an input filter, then we want to just set it to that value
|
|
675
|
+
// This way if the user has an input filter and a link, when they delete the link the input filter value takes effect
|
|
676
|
+
var {
|
|
677
|
+
inputFilters
|
|
678
|
+
} = this.props;
|
|
679
|
+
var {
|
|
680
|
+
columnMap
|
|
681
|
+
} = state;
|
|
682
|
+
var {
|
|
683
|
+
filterMap,
|
|
684
|
+
filterValueMap
|
|
685
|
+
} = state;
|
|
686
|
+
|
|
687
|
+
if (!filterValueMap.has(columnName)) {
|
|
659
688
|
return null;
|
|
660
689
|
}
|
|
661
690
|
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* Set chart filters based on the filter map
|
|
668
|
-
* @param {Map<string, Object>} filterMapParam Filter map
|
|
669
|
-
*/
|
|
670
|
-
|
|
671
|
-
}, {
|
|
672
|
-
key: "setFilterMap",
|
|
673
|
-
value: function setFilterMap(filterMapParam) {
|
|
674
|
-
log.debug('setFilterMap', filterMapParam);
|
|
675
|
-
this.setState(function (state) {
|
|
676
|
-
var _updatedFilterMap;
|
|
677
|
-
|
|
678
|
-
var columnMap = state.columnMap,
|
|
679
|
-
filterMap = state.filterMap;
|
|
680
|
-
var updatedFilterMap = null;
|
|
681
|
-
var filterValueMap = new Map(state.filterValueMap);
|
|
682
|
-
filterMapParam.forEach(function (_ref5, columnName) {
|
|
683
|
-
var columnType = _ref5.columnType,
|
|
684
|
-
value = _ref5.value;
|
|
685
|
-
var column = columnMap.get(columnName);
|
|
686
|
-
|
|
687
|
-
if (column == null || column.type !== columnType) {
|
|
688
|
-
return;
|
|
689
|
-
}
|
|
691
|
+
filterValueMap = new Map(state.filterValueMap);
|
|
692
|
+
filterValueMap.delete(columnName);
|
|
693
|
+
var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);
|
|
690
694
|
|
|
691
|
-
|
|
695
|
+
if (inputFilterMap.has(columnName)) {
|
|
696
|
+
var filterValue = filterMap.get(columnName);
|
|
697
|
+
var inputFilterValue = inputFilterMap.get(columnName).value;
|
|
692
698
|
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
updatedFilterMap = new Map(filterMap);
|
|
696
|
-
}
|
|
699
|
+
if (inputFilterValue != null && filterValue !== inputFilterValue) {
|
|
700
|
+
filterMap = new Map(state.filterMap);
|
|
697
701
|
|
|
698
|
-
|
|
702
|
+
if (inputFilterValue.length > 0) {
|
|
703
|
+
filterMap.set(columnName, inputFilterValue);
|
|
704
|
+
} else {
|
|
705
|
+
filterMap.delete(columnName);
|
|
699
706
|
}
|
|
700
|
-
}); // Don't update filterMap unless the filters actually changed.
|
|
701
|
-
// Otherwise the chart gets stuck on a spinner
|
|
702
|
-
// because it never gets an update event for unchanged filters.
|
|
703
|
-
|
|
704
|
-
return {
|
|
705
|
-
filterValueMap: filterValueMap,
|
|
706
|
-
filterMap: (_updatedFilterMap = updatedFilterMap) !== null && _updatedFilterMap !== void 0 ? _updatedFilterMap : filterMap
|
|
707
|
-
};
|
|
708
|
-
});
|
|
709
|
-
}
|
|
710
|
-
}, {
|
|
711
|
-
key: "unsetFilterValue",
|
|
712
|
-
value: function unsetFilterValue(columnName) {
|
|
713
|
-
var _this4 = this;
|
|
714
|
-
|
|
715
|
-
this.setState(function (state) {
|
|
716
|
-
// We want to unset a value unless there's an input filter for it
|
|
717
|
-
// If there's an input filter, then we want to just set it to that value
|
|
718
|
-
// This way if the user has an input filter and a link, when they delete the link the input filter value takes effect
|
|
719
|
-
var inputFilters = _this4.props.inputFilters;
|
|
720
|
-
var columnMap = state.columnMap;
|
|
721
|
-
var filterMap = state.filterMap,
|
|
722
|
-
filterValueMap = state.filterValueMap;
|
|
723
|
-
|
|
724
|
-
if (!filterValueMap.has(columnName)) {
|
|
725
|
-
return null;
|
|
726
707
|
}
|
|
708
|
+
} else {
|
|
709
|
+
filterMap = new Map(state.filterMap);
|
|
710
|
+
filterMap.delete(columnName);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
return {
|
|
714
|
+
filterMap,
|
|
715
|
+
filterValueMap
|
|
716
|
+
};
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
updateChangedInputFilters(inputFilters, prevInputFilters) {
|
|
721
|
+
var deletedInputFilters = prevInputFilters.filter(prevInputFilter => !inputFilters.find(inputFilter => inputFilter.name === prevInputFilter.name && inputFilter.type === prevInputFilter.type));
|
|
727
722
|
|
|
728
|
-
|
|
729
|
-
|
|
723
|
+
if (deletedInputFilters.length > 0) {
|
|
724
|
+
this.deleteInputFilters(deletedInputFilters);
|
|
725
|
+
}
|
|
730
726
|
|
|
731
|
-
|
|
727
|
+
var changedInputFilters = inputFilters.filter(inputFilter => !prevInputFilters.includes(inputFilter));
|
|
732
728
|
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
729
|
+
if (changedInputFilters.length > 0) {
|
|
730
|
+
this.updateInputFilters(changedInputFilters);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
736
733
|
|
|
737
|
-
|
|
738
|
-
|
|
734
|
+
updateInputFilters(inputFilters) {
|
|
735
|
+
var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
736
|
+
this.setState(state => {
|
|
737
|
+
var {
|
|
738
|
+
columnMap
|
|
739
|
+
} = state;
|
|
740
|
+
var filterValueMap = new Map(state.filterValueMap);
|
|
741
|
+
var filterMap = new Map(state.filterMap);
|
|
742
|
+
var update = forceUpdate ? {
|
|
743
|
+
filterMap,
|
|
744
|
+
filterValueMap
|
|
745
|
+
} : {};
|
|
739
746
|
|
|
740
|
-
|
|
741
|
-
|
|
747
|
+
for (var i = 0; i < inputFilters.length; i += 1) {
|
|
748
|
+
var {
|
|
749
|
+
name,
|
|
750
|
+
type,
|
|
751
|
+
value
|
|
752
|
+
} = inputFilters[i];
|
|
753
|
+
var column = columnMap.get(name);
|
|
754
|
+
|
|
755
|
+
if (column != null && column.type === type) {
|
|
756
|
+
if (value != null && filterMap.get(name) !== value) {
|
|
757
|
+
if (value === '') {
|
|
758
|
+
filterMap.delete(name);
|
|
742
759
|
} else {
|
|
743
|
-
filterMap
|
|
760
|
+
filterMap.set(name, value);
|
|
744
761
|
}
|
|
745
|
-
}
|
|
746
|
-
} else {
|
|
747
|
-
filterMap = new Map(state.filterMap);
|
|
748
|
-
filterMap["delete"](columnName);
|
|
749
|
-
}
|
|
750
762
|
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
filterValueMap: filterValueMap
|
|
754
|
-
};
|
|
755
|
-
});
|
|
756
|
-
}
|
|
757
|
-
}, {
|
|
758
|
-
key: "updateChangedInputFilters",
|
|
759
|
-
value: function updateChangedInputFilters(inputFilters, prevInputFilters) {
|
|
760
|
-
var deletedInputFilters = prevInputFilters.filter(function (prevInputFilter) {
|
|
761
|
-
return !inputFilters.find(function (inputFilter) {
|
|
762
|
-
return inputFilter.name === prevInputFilter.name && inputFilter.type === prevInputFilter.type;
|
|
763
|
-
});
|
|
764
|
-
});
|
|
763
|
+
update.filterMap = filterMap;
|
|
764
|
+
}
|
|
765
765
|
|
|
766
|
-
|
|
767
|
-
|
|
766
|
+
if (filterValueMap.has(name)) {
|
|
767
|
+
// Need to unset whatever the linked value was - if they want that value again, they need to double click the link again
|
|
768
|
+
filterValueMap.delete(name);
|
|
769
|
+
update.filterValueMap = filterValueMap;
|
|
770
|
+
}
|
|
771
|
+
}
|
|
768
772
|
}
|
|
769
773
|
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
774
|
+
log.debug('updateInputFilters', update);
|
|
775
|
+
return update;
|
|
776
|
+
});
|
|
777
|
+
}
|
|
773
778
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
var
|
|
782
|
-
|
|
783
|
-
var columnMap = state.columnMap;
|
|
784
|
-
var filterValueMap = new Map(state.filterValueMap);
|
|
785
|
-
var filterMap = new Map(state.filterMap);
|
|
786
|
-
var update = forceUpdate ? {
|
|
787
|
-
filterMap: filterMap,
|
|
788
|
-
filterValueMap: filterValueMap
|
|
789
|
-
} : {};
|
|
790
|
-
|
|
791
|
-
for (var i = 0; i < inputFilters.length; i += 1) {
|
|
792
|
-
var _inputFilters$i = inputFilters[i],
|
|
793
|
-
name = _inputFilters$i.name,
|
|
794
|
-
type = _inputFilters$i.type,
|
|
795
|
-
value = _inputFilters$i.value;
|
|
796
|
-
var column = columnMap.get(name);
|
|
797
|
-
|
|
798
|
-
if (column != null && column.type === type) {
|
|
799
|
-
if (value != null && filterMap.get(name) !== value) {
|
|
800
|
-
if (value === '') {
|
|
801
|
-
filterMap["delete"](name);
|
|
802
|
-
} else {
|
|
803
|
-
filterMap.set(name, value);
|
|
804
|
-
}
|
|
779
|
+
deleteInputFilters(inputFilters) {
|
|
780
|
+
var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
781
|
+
this.setState(state => {
|
|
782
|
+
var {
|
|
783
|
+
columnMap,
|
|
784
|
+
filterValueMap
|
|
785
|
+
} = state;
|
|
786
|
+
var filterMap = new Map(state.filterMap);
|
|
787
|
+
var needsUpdate = forceUpdate;
|
|
805
788
|
|
|
806
|
-
|
|
807
|
-
|
|
789
|
+
for (var i = 0; i < inputFilters.length; i += 1) {
|
|
790
|
+
var {
|
|
791
|
+
name,
|
|
792
|
+
type
|
|
793
|
+
} = inputFilters[i];
|
|
794
|
+
var column = columnMap.get(name);
|
|
795
|
+
|
|
796
|
+
if (column != null && column.type === type) {
|
|
797
|
+
if (filterMap.has(name)) {
|
|
798
|
+
var filterValue = filterMap.get(name);
|
|
808
799
|
|
|
809
800
|
if (filterValueMap.has(name)) {
|
|
810
|
-
|
|
811
|
-
filterValueMap["delete"](name);
|
|
812
|
-
update.filterValueMap = filterValueMap;
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
}
|
|
801
|
+
var linkValue = filterValueMap.get(name);
|
|
816
802
|
|
|
817
|
-
|
|
818
|
-
return update;
|
|
819
|
-
});
|
|
820
|
-
}
|
|
821
|
-
}, {
|
|
822
|
-
key: "deleteInputFilters",
|
|
823
|
-
value: function deleteInputFilters(inputFilters) {
|
|
824
|
-
var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
825
|
-
this.setState(function (state) {
|
|
826
|
-
var columnMap = state.columnMap,
|
|
827
|
-
filterValueMap = state.filterValueMap;
|
|
828
|
-
var filterMap = new Map(state.filterMap);
|
|
829
|
-
var needsUpdate = forceUpdate;
|
|
830
|
-
|
|
831
|
-
for (var i = 0; i < inputFilters.length; i += 1) {
|
|
832
|
-
var _inputFilters$i2 = inputFilters[i],
|
|
833
|
-
name = _inputFilters$i2.name,
|
|
834
|
-
type = _inputFilters$i2.type;
|
|
835
|
-
var column = columnMap.get(name);
|
|
836
|
-
|
|
837
|
-
if (column != null && column.type === type) {
|
|
838
|
-
if (filterMap.has(name)) {
|
|
839
|
-
var filterValue = filterMap.get(name);
|
|
840
|
-
|
|
841
|
-
if (filterValueMap.has(name)) {
|
|
842
|
-
var linkValue = filterValueMap.get(name);
|
|
843
|
-
|
|
844
|
-
if (linkValue !== filterValue) {
|
|
845
|
-
needsUpdate = true;
|
|
846
|
-
filterMap.set(name, linkValue);
|
|
847
|
-
}
|
|
848
|
-
} else {
|
|
803
|
+
if (linkValue !== filterValue) {
|
|
849
804
|
needsUpdate = true;
|
|
850
|
-
filterMap
|
|
805
|
+
filterMap.set(name, linkValue);
|
|
851
806
|
}
|
|
807
|
+
} else {
|
|
808
|
+
needsUpdate = true;
|
|
809
|
+
filterMap.delete(name);
|
|
852
810
|
}
|
|
853
811
|
}
|
|
854
812
|
}
|
|
813
|
+
}
|
|
855
814
|
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
}, {
|
|
863
|
-
key: "updateColumnFilters",
|
|
864
|
-
value: function updateColumnFilters() {
|
|
865
|
-
this.setState(function (_ref6) {
|
|
866
|
-
var model = _ref6.model;
|
|
867
|
-
|
|
868
|
-
if (!model) {
|
|
869
|
-
return null;
|
|
870
|
-
}
|
|
815
|
+
log.debug('deleteInputFilters', needsUpdate);
|
|
816
|
+
return needsUpdate ? {
|
|
817
|
+
filterMap
|
|
818
|
+
} : null;
|
|
819
|
+
});
|
|
820
|
+
}
|
|
871
821
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
}, {
|
|
878
|
-
key: "updateFilters",
|
|
879
|
-
value: function updateFilters() {
|
|
880
|
-
var _this$state5 = this.state,
|
|
881
|
-
columnMap = _this$state5.columnMap,
|
|
882
|
-
filterMap = _this$state5.filterMap,
|
|
883
|
-
model = _this$state5.model;
|
|
884
|
-
var waitingInputMap = this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap);
|
|
885
|
-
model.setFilter(filterMap);
|
|
886
|
-
|
|
887
|
-
if (filterMap.size > 0 && waitingInputMap.size === 0) {
|
|
888
|
-
var defaultTitle = model.getDefaultTitle();
|
|
889
|
-
var filterTitle = TextUtils.join(Array.from(filterMap.entries()).map(function (_ref7) {
|
|
890
|
-
var _ref8 = _slicedToArray(_ref7, 2),
|
|
891
|
-
name = _ref8[0],
|
|
892
|
-
value = _ref8[1];
|
|
893
|
-
|
|
894
|
-
return "".concat(name, ": ").concat(value);
|
|
895
|
-
}));
|
|
896
|
-
|
|
897
|
-
if (defaultTitle) {
|
|
898
|
-
model.setTitle("".concat(defaultTitle, "<br><span style=\"font-size: smaller\">").concat(filterTitle, "</span>"));
|
|
899
|
-
} else {
|
|
900
|
-
model.setTitle(filterTitle);
|
|
901
|
-
}
|
|
822
|
+
updateColumnFilters() {
|
|
823
|
+
this.setState((_ref4) => {
|
|
824
|
+
var {
|
|
825
|
+
model
|
|
826
|
+
} = _ref4;
|
|
902
827
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
828
|
+
if (!model) {
|
|
829
|
+
return null;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
return {
|
|
833
|
+
columnMap: model.getFilterColumnMap()
|
|
834
|
+
};
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
updateFilters() {
|
|
839
|
+
var {
|
|
840
|
+
columnMap,
|
|
841
|
+
filterMap,
|
|
842
|
+
model
|
|
843
|
+
} = this.state;
|
|
844
|
+
var waitingInputMap = this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap);
|
|
845
|
+
model.setFilter(filterMap);
|
|
846
|
+
|
|
847
|
+
if (filterMap.size > 0 && waitingInputMap.size === 0) {
|
|
848
|
+
var defaultTitle = model.getDefaultTitle();
|
|
849
|
+
var filterTitle = TextUtils.join(Array.from(filterMap.entries()).map((_ref5) => {
|
|
850
|
+
var [name, value] = _ref5;
|
|
851
|
+
return "".concat(name, ": ").concat(value);
|
|
852
|
+
}));
|
|
853
|
+
|
|
854
|
+
if (defaultTitle) {
|
|
855
|
+
model.setTitle("".concat(defaultTitle, "<br><span style=\"font-size: smaller\">").concat(filterTitle, "</span>"));
|
|
907
856
|
} else {
|
|
908
|
-
|
|
909
|
-
model.setTitle(model.getDefaultTitle());
|
|
910
|
-
this.setState({
|
|
911
|
-
isLoading: false
|
|
912
|
-
});
|
|
857
|
+
model.setTitle(filterTitle);
|
|
913
858
|
}
|
|
914
859
|
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
this.setState(function (state) {
|
|
925
|
-
var columnMap = state.columnMap;
|
|
926
|
-
var filterMap = new Map(state.filterMap);
|
|
927
|
-
var filterValueMap = new Map(state.filterValueMap);
|
|
928
|
-
var newState = {};
|
|
929
|
-
state.filterValueMap.forEach(function (value, name) {
|
|
930
|
-
if (!columnMap.has(name)) {
|
|
931
|
-
filterValueMap["delete"](name);
|
|
932
|
-
newState.filterValueMap = filterValueMap;
|
|
933
|
-
}
|
|
934
|
-
});
|
|
935
|
-
state.filterMap.forEach(function (value, name) {
|
|
936
|
-
if (!columnMap.has(name)) {
|
|
937
|
-
filterMap["delete"](name);
|
|
938
|
-
newState.filterMap = filterMap;
|
|
939
|
-
}
|
|
940
|
-
});
|
|
941
|
-
return newState;
|
|
860
|
+
log.debug2('updateFilters filters set', filterMap);
|
|
861
|
+
this.setState({
|
|
862
|
+
isLoading: true
|
|
863
|
+
});
|
|
864
|
+
} else {
|
|
865
|
+
log.debug2('updateFilters waiting on inputs', waitingInputMap);
|
|
866
|
+
model.setTitle(model.getDefaultTitle());
|
|
867
|
+
this.setState({
|
|
868
|
+
isLoading: false
|
|
942
869
|
});
|
|
943
870
|
}
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
var
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
var errorMessage = error ? "Unable to open chart. ".concat(error) : null;
|
|
980
|
-
var isWaitingForFilter = waitingInputMap.size > 0;
|
|
981
|
-
var isSelectingColumn = columnMap.size > 0 && isLinkerActive;
|
|
982
|
-
return /*#__PURE__*/React.createElement(WidgetPanel, {
|
|
983
|
-
className: classNames('iris-chart-panel', {
|
|
984
|
-
'input-required': isWaitingForFilter
|
|
985
|
-
}),
|
|
986
|
-
componentPanel: this,
|
|
987
|
-
glContainer: glContainer,
|
|
988
|
-
glEventHub: glEventHub,
|
|
989
|
-
onHide: this.handleHide,
|
|
990
|
-
onClearAllFilters: this.handleClearAllFilters,
|
|
991
|
-
onResize: this.handleResize,
|
|
992
|
-
onShow: this.handleShow,
|
|
993
|
-
onTabBlur: this.handleTabBlur,
|
|
994
|
-
onTabFocus: this.handleTabFocus,
|
|
995
|
-
errorMessage: errorMessage,
|
|
996
|
-
isDisconnected: isDisconnected,
|
|
997
|
-
isLoading: isLoading,
|
|
998
|
-
isLoaded: isLoaded,
|
|
999
|
-
queryName: queryName,
|
|
1000
|
-
querySerial: querySerial,
|
|
1001
|
-
widgetName: figureName || tableName,
|
|
1002
|
-
widgetType: "Chart"
|
|
1003
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
1004
|
-
ref: this.panelContainer,
|
|
1005
|
-
className: "chart-panel-container h-100 w-100"
|
|
1006
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
1007
|
-
className: "chart-container h-100 w-100"
|
|
1008
|
-
}, isLoaded && /*#__PURE__*/React.createElement(Chart, {
|
|
1009
|
-
isActive: isActive,
|
|
1010
|
-
model: model,
|
|
1011
|
-
ref: this.chart,
|
|
1012
|
-
onDisconnect: this.handleDisconnect,
|
|
1013
|
-
onReconnect: this.handleReconnect,
|
|
1014
|
-
onUpdate: this.handleUpdate,
|
|
1015
|
-
onError: this.handleError,
|
|
1016
|
-
onSettingsChanged: this.handleSettingsChanged
|
|
1017
|
-
})), /*#__PURE__*/React.createElement(CSSTransition, {
|
|
1018
|
-
"in": isWaitingForFilter && !isSelectingColumn && !isLoading,
|
|
1019
|
-
timeout: ThemeExport.transitionMs,
|
|
1020
|
-
classNames: "fade",
|
|
1021
|
-
mountOnEnter: true,
|
|
1022
|
-
unmountOnExit: true
|
|
1023
|
-
}, /*#__PURE__*/React.createElement(ChartFilterOverlay, {
|
|
1024
|
-
inputFilterMap: inputFilterMap,
|
|
1025
|
-
linkedColumnMap: linkedColumnMap,
|
|
1026
|
-
onAdd: this.handleFilterAdd,
|
|
1027
|
-
onOpenLinker: this.handleOpenLinker,
|
|
1028
|
-
columnMap: columnMap,
|
|
1029
|
-
waitingFilterMap: waitingFilterMap,
|
|
1030
|
-
waitingInputMap: waitingInputMap
|
|
1031
|
-
})), /*#__PURE__*/React.createElement(CSSTransition, {
|
|
1032
|
-
"in": isSelectingColumn,
|
|
1033
|
-
timeout: ThemeExport.transitionMs,
|
|
1034
|
-
classNames: "fade",
|
|
1035
|
-
mountOnEnter: true,
|
|
1036
|
-
unmountOnExit: true
|
|
1037
|
-
}, /*#__PURE__*/React.createElement(ChartColumnSelectorOverlay, {
|
|
1038
|
-
columns: this.getSelectorColumns(columnMap, linkedColumnMap, columnSelectionValidator),
|
|
1039
|
-
onColumnSelected: this.handleColumnSelected,
|
|
1040
|
-
onMouseEnter: this.handleColumnMouseEnter,
|
|
1041
|
-
onMouseLeave: this.handleColumnMouseLeave
|
|
1042
|
-
}))));
|
|
871
|
+
|
|
872
|
+
this.updatePanelState();
|
|
873
|
+
}
|
|
874
|
+
/**
|
|
875
|
+
* Removes any set filter values that are no longer part of the model
|
|
876
|
+
*/
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
pruneFilterMaps() {
|
|
880
|
+
this.setState(state => {
|
|
881
|
+
var {
|
|
882
|
+
columnMap
|
|
883
|
+
} = state;
|
|
884
|
+
var filterMap = new Map(state.filterMap);
|
|
885
|
+
var filterValueMap = new Map(state.filterValueMap);
|
|
886
|
+
var newState = {};
|
|
887
|
+
state.filterValueMap.forEach((value, name) => {
|
|
888
|
+
if (!columnMap.has(name)) {
|
|
889
|
+
filterValueMap.delete(name);
|
|
890
|
+
newState.filterValueMap = filterValueMap;
|
|
891
|
+
}
|
|
892
|
+
});
|
|
893
|
+
state.filterMap.forEach((value, name) => {
|
|
894
|
+
if (!columnMap.has(name)) {
|
|
895
|
+
filterMap.delete(name);
|
|
896
|
+
newState.filterMap = filterMap;
|
|
897
|
+
}
|
|
898
|
+
});
|
|
899
|
+
return newState;
|
|
900
|
+
});
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
updateChart() {
|
|
904
|
+
if (this.chart.current) {
|
|
905
|
+
this.chart.current.updateDimensions();
|
|
1043
906
|
}
|
|
1044
|
-
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
render() {
|
|
910
|
+
var {
|
|
911
|
+
columnSelectionValidator,
|
|
912
|
+
glContainer,
|
|
913
|
+
glEventHub,
|
|
914
|
+
inputFilters,
|
|
915
|
+
isLinkerActive,
|
|
916
|
+
links,
|
|
917
|
+
metadata,
|
|
918
|
+
settings
|
|
919
|
+
} = this.props;
|
|
920
|
+
var {
|
|
921
|
+
columnMap,
|
|
922
|
+
filterMap,
|
|
923
|
+
error,
|
|
924
|
+
model,
|
|
925
|
+
queryName,
|
|
926
|
+
isActive,
|
|
927
|
+
isDisconnected,
|
|
928
|
+
isLoaded,
|
|
929
|
+
isLoading
|
|
930
|
+
} = this.state;
|
|
931
|
+
var {
|
|
932
|
+
figure: figureName,
|
|
933
|
+
querySerial,
|
|
934
|
+
table: tableName
|
|
935
|
+
} = metadata;
|
|
936
|
+
var inputFilterMap = this.getInputFilterColumnMap(columnMap, inputFilters);
|
|
937
|
+
var linkedColumnMap = this.getLinkedColumnMap(columnMap, links);
|
|
938
|
+
var waitingInputMap = model != null ? this.getWaitingInputMap(model.isFilterRequired(), columnMap, filterMap) : new Map();
|
|
939
|
+
var waitingFilterMap = model != null ? this.getWaitingFilterMap(model.isFilterRequired(), columnMap, filterMap, linkedColumnMap, inputFilterMap) : new Map();
|
|
940
|
+
var errorMessage = error ? "Unable to open chart. ".concat(error) : null;
|
|
941
|
+
var isWaitingForFilter = waitingInputMap.size > 0;
|
|
942
|
+
var isSelectingColumn = columnMap.size > 0 && isLinkerActive;
|
|
943
|
+
return /*#__PURE__*/React.createElement(WidgetPanel, {
|
|
944
|
+
className: classNames('iris-chart-panel', {
|
|
945
|
+
'input-required': isWaitingForFilter
|
|
946
|
+
}),
|
|
947
|
+
componentPanel: this,
|
|
948
|
+
glContainer: glContainer,
|
|
949
|
+
glEventHub: glEventHub,
|
|
950
|
+
onHide: this.handleHide,
|
|
951
|
+
onClearAllFilters: this.handleClearAllFilters,
|
|
952
|
+
onResize: this.handleResize,
|
|
953
|
+
onShow: this.handleShow,
|
|
954
|
+
onTabBlur: this.handleTabBlur,
|
|
955
|
+
onTabFocus: this.handleTabFocus,
|
|
956
|
+
errorMessage: errorMessage,
|
|
957
|
+
isDisconnected: isDisconnected,
|
|
958
|
+
isLoading: isLoading,
|
|
959
|
+
isLoaded: isLoaded,
|
|
960
|
+
queryName: queryName,
|
|
961
|
+
querySerial: querySerial,
|
|
962
|
+
widgetName: figureName || tableName,
|
|
963
|
+
widgetType: "Chart"
|
|
964
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
965
|
+
ref: this.panelContainer,
|
|
966
|
+
className: "chart-panel-container h-100 w-100"
|
|
967
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
968
|
+
className: "chart-container h-100 w-100"
|
|
969
|
+
}, isLoaded && /*#__PURE__*/React.createElement(Chart, {
|
|
970
|
+
isActive: isActive,
|
|
971
|
+
model: model,
|
|
972
|
+
settings: settings,
|
|
973
|
+
ref: this.chart,
|
|
974
|
+
onDisconnect: this.handleDisconnect,
|
|
975
|
+
onReconnect: this.handleReconnect,
|
|
976
|
+
onUpdate: this.handleUpdate,
|
|
977
|
+
onError: this.handleError,
|
|
978
|
+
onSettingsChanged: this.handleSettingsChanged
|
|
979
|
+
})), /*#__PURE__*/React.createElement(CSSTransition, {
|
|
980
|
+
in: isWaitingForFilter && !isSelectingColumn && !isLoading,
|
|
981
|
+
timeout: ThemeExport.transitionMs,
|
|
982
|
+
classNames: "fade",
|
|
983
|
+
mountOnEnter: true,
|
|
984
|
+
unmountOnExit: true
|
|
985
|
+
}, /*#__PURE__*/React.createElement(ChartFilterOverlay, {
|
|
986
|
+
inputFilterMap: inputFilterMap,
|
|
987
|
+
linkedColumnMap: linkedColumnMap,
|
|
988
|
+
onAdd: this.handleFilterAdd,
|
|
989
|
+
onOpenLinker: this.handleOpenLinker,
|
|
990
|
+
columnMap: columnMap,
|
|
991
|
+
waitingFilterMap: waitingFilterMap,
|
|
992
|
+
waitingInputMap: waitingInputMap
|
|
993
|
+
})), /*#__PURE__*/React.createElement(CSSTransition, {
|
|
994
|
+
in: isSelectingColumn,
|
|
995
|
+
timeout: ThemeExport.transitionMs,
|
|
996
|
+
classNames: "fade",
|
|
997
|
+
mountOnEnter: true,
|
|
998
|
+
unmountOnExit: true
|
|
999
|
+
}, /*#__PURE__*/React.createElement(ChartColumnSelectorOverlay, {
|
|
1000
|
+
columns: this.getSelectorColumns(columnMap, linkedColumnMap, columnSelectionValidator),
|
|
1001
|
+
onColumnSelected: this.handleColumnSelected,
|
|
1002
|
+
onMouseEnter: this.handleColumnMouseEnter,
|
|
1003
|
+
onMouseLeave: this.handleColumnMouseLeave
|
|
1004
|
+
}))));
|
|
1005
|
+
}
|
|
1045
1006
|
|
|
1046
|
-
|
|
1047
|
-
}(Component);
|
|
1007
|
+
}
|
|
1048
1008
|
|
|
1049
1009
|
_defineProperty(ChartPanel, "COMPONENT", 'ChartPanel');
|
|
1050
1010
|
|
|
@@ -1073,22 +1033,27 @@ ChartPanel.propTypes = {
|
|
|
1073
1033
|
columnSelectionValidator: PropTypes.func,
|
|
1074
1034
|
setActiveTool: PropTypes.func.isRequired,
|
|
1075
1035
|
setDashboardIsolatedLinkerPanelId: PropTypes.func.isRequired,
|
|
1076
|
-
panelState: PropTypes.shape({})
|
|
1036
|
+
panelState: PropTypes.shape({}),
|
|
1037
|
+
settings: PropTypes.shape({})
|
|
1077
1038
|
};
|
|
1078
1039
|
ChartPanel.defaultProps = {
|
|
1079
1040
|
columnSelectionValidator: null,
|
|
1080
1041
|
isLinkerActive: false,
|
|
1081
1042
|
source: null,
|
|
1082
1043
|
sourcePanel: null,
|
|
1083
|
-
panelState: null
|
|
1044
|
+
panelState: null,
|
|
1045
|
+
settings: {}
|
|
1084
1046
|
};
|
|
1085
1047
|
ChartPanel.displayName = 'ChartPanel';
|
|
1086
1048
|
|
|
1087
|
-
var mapStateToProps =
|
|
1088
|
-
var
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1049
|
+
var mapStateToProps = (state, ownProps) => {
|
|
1050
|
+
var {
|
|
1051
|
+
localDashboardId,
|
|
1052
|
+
metadata = {}
|
|
1053
|
+
} = ownProps;
|
|
1054
|
+
var {
|
|
1055
|
+
sourcePanelId
|
|
1056
|
+
} = metadata;
|
|
1092
1057
|
var panelTableMap = getTableMapForDashboard(state, localDashboardId);
|
|
1093
1058
|
var openedPanelMap = getOpenedPanelMapForDashboard(state, localDashboardId);
|
|
1094
1059
|
var activeTool = getActiveTool(state);
|
|
@@ -1096,11 +1061,12 @@ var mapStateToProps = function mapStateToProps(state, ownProps) {
|
|
|
1096
1061
|
var isLinkerActive = activeTool === ToolType.LINKER && isolatedLinkerPanelId === null;
|
|
1097
1062
|
return {
|
|
1098
1063
|
columnSelectionValidator: getColumnSelectionValidatorForDashboard(state, localDashboardId),
|
|
1099
|
-
isLinkerActive
|
|
1064
|
+
isLinkerActive,
|
|
1100
1065
|
inputFilters: getInputFiltersForDashboard(state, localDashboardId),
|
|
1101
1066
|
links: getLinksForDashboard(state, localDashboardId),
|
|
1102
1067
|
source: panelTableMap.get(sourcePanelId),
|
|
1103
|
-
sourcePanel: openedPanelMap.get(sourcePanelId)
|
|
1068
|
+
sourcePanel: openedPanelMap.get(sourcePanelId),
|
|
1069
|
+
settings: getSettings(state)
|
|
1104
1070
|
};
|
|
1105
1071
|
};
|
|
1106
1072
|
|