@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
package/dist/linker/Linker.js
CHANGED
|
@@ -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
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; }
|
|
4
2
|
|
|
5
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; }
|
|
6
4
|
|
|
7
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
8
|
-
|
|
9
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
-
|
|
11
|
-
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); }
|
|
12
|
-
|
|
13
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
14
|
-
|
|
15
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
16
|
-
|
|
17
|
-
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; }
|
|
18
|
-
|
|
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';
|
|
@@ -49,21 +15,19 @@ import { DateUtils, TableUtils } from '@deephaven/iris-grid';
|
|
|
49
15
|
import { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';
|
|
50
16
|
import Log from '@deephaven/log';
|
|
51
17
|
import { getActiveTool, getTimeZone, setActiveTool as setActiveToolAction } from '@deephaven/redux';
|
|
52
|
-
import { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from
|
|
53
|
-
import ToolType from
|
|
54
|
-
import { ChartEvent, IrisGridEvent, InputFilterEvent } from
|
|
55
|
-
import LinkerOverlayContent from
|
|
56
|
-
import LinkerUtils, { isLinkablePanel } from
|
|
18
|
+
import { getIsolatedLinkerPanelIdForDashboard, getLinksForDashboard, setDashboardLinks as setDashboardLinksAction, addDashboardLinks as addDashboardLinksAction, deleteDashboardLinks as deleteDashboardLinksAction, setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction, setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction } from "../redux/index.js";
|
|
19
|
+
import ToolType from "./ToolType.js";
|
|
20
|
+
import { ChartEvent, IrisGridEvent, InputFilterEvent } from "../events/index.js";
|
|
21
|
+
import LinkerOverlayContent from "./LinkerOverlayContent.js";
|
|
22
|
+
import LinkerUtils, { isLinkablePanel } from "./LinkerUtils.js";
|
|
57
23
|
var log = Log.module('Linker');
|
|
58
24
|
|
|
59
|
-
var mapState =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
};
|
|
66
|
-
};
|
|
25
|
+
var mapState = (state, ownProps) => ({
|
|
26
|
+
activeTool: getActiveTool(state),
|
|
27
|
+
isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(state, ownProps.localDashboardId),
|
|
28
|
+
links: getLinksForDashboard(state, ownProps.localDashboardId),
|
|
29
|
+
timeZone: getTimeZone(state)
|
|
30
|
+
});
|
|
67
31
|
|
|
68
32
|
var connector = connect(mapState, {
|
|
69
33
|
setActiveTool: setActiveToolAction,
|
|
@@ -73,27 +37,19 @@ var connector = connect(mapState, {
|
|
|
73
37
|
setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,
|
|
74
38
|
setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction
|
|
75
39
|
});
|
|
76
|
-
export
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
var _super = _createSuper(Linker);
|
|
80
|
-
|
|
81
|
-
function Linker(props) {
|
|
82
|
-
var _this;
|
|
83
|
-
|
|
84
|
-
_classCallCheck(this, Linker);
|
|
40
|
+
export class Linker extends Component {
|
|
41
|
+
constructor(props) {
|
|
42
|
+
super(props);
|
|
85
43
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
_defineProperty(_assertThisInitialized(_this), "getCachedLinks", memoize(function (links, linkInProgress, isolateForPanelId) {
|
|
89
|
-
var combinedLinks = _toConsumableArray(links);
|
|
44
|
+
_defineProperty(this, "getCachedLinks", memoize((links, linkInProgress, isolateForPanelId) => {
|
|
45
|
+
var combinedLinks = [...links];
|
|
90
46
|
|
|
91
47
|
if (linkInProgress && linkInProgress.start) {
|
|
92
48
|
combinedLinks.push(linkInProgress);
|
|
93
49
|
}
|
|
94
50
|
|
|
95
|
-
if (isolateForPanelId
|
|
96
|
-
return combinedLinks.filter(
|
|
51
|
+
if (isolateForPanelId != null) {
|
|
52
|
+
return combinedLinks.filter(link => {
|
|
97
53
|
var _link$start, _link$end;
|
|
98
54
|
|
|
99
55
|
return (link === null || link === void 0 ? void 0 : (_link$start = link.start) === null || _link$start === void 0 ? void 0 : _link$start.panelId) === isolateForPanelId || (link === null || link === void 0 ? void 0 : (_link$end = link.end) === null || _link$end === void 0 ? void 0 : _link$end.panelId) === isolateForPanelId || (link === null || link === void 0 ? void 0 : link.end) == null;
|
|
@@ -104,602 +60,634 @@ export var Linker = /*#__PURE__*/function (_Component) {
|
|
|
104
60
|
return combinedLinks;
|
|
105
61
|
}));
|
|
106
62
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
63
|
+
this.handleCancel = this.handleCancel.bind(this);
|
|
64
|
+
this.handleDone = this.handleDone.bind(this);
|
|
65
|
+
this.handlePanelCloned = this.handlePanelCloned.bind(this);
|
|
66
|
+
this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);
|
|
67
|
+
this.handleColumnsChanged = this.handleColumnsChanged.bind(this);
|
|
68
|
+
this.handlePanelClosed = this.handlePanelClosed.bind(this);
|
|
69
|
+
this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);
|
|
70
|
+
this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);
|
|
71
|
+
this.handleLinkDeleted = this.handleLinkDeleted.bind(this);
|
|
72
|
+
this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);
|
|
73
|
+
this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);
|
|
74
|
+
this.handleUpdateValues = this.handleUpdateValues.bind(this);
|
|
75
|
+
this.handleStateChange = this.handleStateChange.bind(this);
|
|
76
|
+
this.handleExited = this.handleExited.bind(this);
|
|
77
|
+
this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);
|
|
78
|
+
this.state = {
|
|
123
79
|
linkInProgress: undefined
|
|
124
80
|
};
|
|
125
|
-
return _this;
|
|
126
81
|
}
|
|
127
82
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
83
|
+
componentDidMount() {
|
|
84
|
+
var {
|
|
85
|
+
layout
|
|
86
|
+
} = this.props;
|
|
87
|
+
this.startListening(layout);
|
|
88
|
+
this.updateSelectionValidators();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
componentDidUpdate(prevProps) {
|
|
92
|
+
var {
|
|
93
|
+
activeTool,
|
|
94
|
+
layout
|
|
95
|
+
} = this.props;
|
|
96
|
+
|
|
97
|
+
if (layout !== prevProps.layout) {
|
|
98
|
+
this.stopListening(prevProps.layout);
|
|
132
99
|
this.startListening(layout);
|
|
133
|
-
this.updateSelectionValidators();
|
|
134
100
|
}
|
|
135
|
-
}, {
|
|
136
|
-
key: "componentDidUpdate",
|
|
137
|
-
value: function componentDidUpdate(prevProps) {
|
|
138
|
-
var _this$props = this.props,
|
|
139
|
-
activeTool = _this$props.activeTool,
|
|
140
|
-
layout = _this$props.layout;
|
|
141
|
-
|
|
142
|
-
if (layout !== prevProps.layout) {
|
|
143
|
-
this.stopListening(prevProps.layout);
|
|
144
|
-
this.startListening(layout);
|
|
145
|
-
}
|
|
146
101
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}, {
|
|
152
|
-
key: "componentDidCatch",
|
|
153
|
-
value: function componentDidCatch(error, info) {
|
|
154
|
-
log.error('componentDidCatch', error, info);
|
|
155
|
-
}
|
|
156
|
-
}, {
|
|
157
|
-
key: "componentWillUnmount",
|
|
158
|
-
value: function componentWillUnmount() {
|
|
159
|
-
var layout = this.props.layout;
|
|
160
|
-
this.stopListening(layout);
|
|
161
|
-
}
|
|
162
|
-
}, {
|
|
163
|
-
key: "startListening",
|
|
164
|
-
value: function startListening(layout) {
|
|
165
|
-
layout.on('stateChanged', this.handleLayoutStateChanged);
|
|
166
|
-
var eventHub = layout.eventHub;
|
|
167
|
-
eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);
|
|
168
|
-
eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);
|
|
169
|
-
eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
170
|
-
eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
171
|
-
eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);
|
|
172
|
-
eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
|
|
173
|
-
eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
|
|
174
|
-
eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
175
|
-
}
|
|
176
|
-
}, {
|
|
177
|
-
key: "stopListening",
|
|
178
|
-
value: function stopListening(layout) {
|
|
179
|
-
layout.off('stateChanged', this.handleLayoutStateChanged);
|
|
180
|
-
var eventHub = layout.eventHub;
|
|
181
|
-
eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);
|
|
182
|
-
eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);
|
|
183
|
-
eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
184
|
-
eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
185
|
-
eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);
|
|
186
|
-
eventHub.off(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
|
|
187
|
-
eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
|
|
188
|
-
eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
102
|
+
if (activeTool !== prevProps.activeTool) {
|
|
103
|
+
this.updateSelectionValidators();
|
|
189
104
|
}
|
|
190
|
-
}
|
|
191
|
-
key: "handleCancel",
|
|
192
|
-
value: function handleCancel() {
|
|
193
|
-
var linkInProgress = this.state.linkInProgress;
|
|
194
|
-
|
|
195
|
-
if (linkInProgress == null) {
|
|
196
|
-
var setActiveTool = this.props.setActiveTool;
|
|
197
|
-
setActiveTool(ToolType.DEFAULT);
|
|
198
|
-
}
|
|
105
|
+
}
|
|
199
106
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
107
|
+
componentDidCatch(error, info) {
|
|
108
|
+
log.error('componentDidCatch', error, info);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
componentWillUnmount() {
|
|
112
|
+
var {
|
|
113
|
+
layout
|
|
114
|
+
} = this.props;
|
|
115
|
+
this.stopListening(layout);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
startListening(layout) {
|
|
119
|
+
layout.on('stateChanged', this.handleLayoutStateChanged);
|
|
120
|
+
var {
|
|
121
|
+
eventHub
|
|
122
|
+
} = layout;
|
|
123
|
+
eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);
|
|
124
|
+
eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);
|
|
125
|
+
eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
126
|
+
eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
127
|
+
eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);
|
|
128
|
+
eventHub.on(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
|
|
129
|
+
eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
|
|
130
|
+
eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
stopListening(layout) {
|
|
134
|
+
layout.off('stateChanged', this.handleLayoutStateChanged);
|
|
135
|
+
var {
|
|
136
|
+
eventHub
|
|
137
|
+
} = layout;
|
|
138
|
+
eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);
|
|
139
|
+
eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);
|
|
140
|
+
eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);
|
|
141
|
+
eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);
|
|
142
|
+
eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);
|
|
143
|
+
eventHub.off(InputFilterEvent.COLUMN_SELECTED, this.handleFilterColumnSelect);
|
|
144
|
+
eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);
|
|
145
|
+
eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
handleCancel() {
|
|
149
|
+
var {
|
|
150
|
+
linkInProgress
|
|
151
|
+
} = this.state;
|
|
152
|
+
|
|
153
|
+
if (linkInProgress == null) {
|
|
154
|
+
var {
|
|
155
|
+
setActiveTool
|
|
156
|
+
} = this.props;
|
|
208
157
|
setActiveTool(ToolType.DEFAULT);
|
|
209
|
-
this.setState({
|
|
210
|
-
linkInProgress: undefined
|
|
211
|
-
});
|
|
212
158
|
}
|
|
213
|
-
}, {
|
|
214
|
-
key: "handleChartColumnSelect",
|
|
215
|
-
value: function handleChartColumnSelect(panel, column) {
|
|
216
|
-
this.columnSelected(panel, column, true);
|
|
217
|
-
}
|
|
218
|
-
}, {
|
|
219
|
-
key: "handleFilterColumnSelect",
|
|
220
|
-
value: function handleFilterColumnSelect(panel, column) {
|
|
221
|
-
log.debug('handleFilterColumnSelect', this.isOverlayShown());
|
|
222
|
-
var _this$props2 = this.props,
|
|
223
|
-
links = _this$props2.links,
|
|
224
|
-
localDashboardId = _this$props2.localDashboardId,
|
|
225
|
-
setActiveTool = _this$props2.setActiveTool,
|
|
226
|
-
setDashboardIsolatedLinkerPanelId = _this$props2.setDashboardIsolatedLinkerPanelId;
|
|
227
|
-
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
228
|
-
var panelLinks = links.filter(function (link) {
|
|
229
|
-
var _link$start2, _link$end2;
|
|
230
|
-
|
|
231
|
-
return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;
|
|
232
|
-
});
|
|
233
159
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);
|
|
239
|
-
|
|
240
|
-
if (panelLinks.length === 0) {
|
|
241
|
-
// Source not linked - start new link in isolated linker mode
|
|
242
|
-
// Need to pass panelId for overrideIsolatedLinkerPanelId
|
|
243
|
-
// as redux prop update at this point not yet propagated
|
|
244
|
-
this.columnSelected(panel, column, true, panelId);
|
|
245
|
-
}
|
|
160
|
+
this.setState({
|
|
161
|
+
linkInProgress: undefined
|
|
162
|
+
});
|
|
163
|
+
}
|
|
246
164
|
|
|
247
|
-
|
|
248
|
-
|
|
165
|
+
handleDone() {
|
|
166
|
+
var {
|
|
167
|
+
setActiveTool
|
|
168
|
+
} = this.props;
|
|
169
|
+
setActiveTool(ToolType.DEFAULT);
|
|
170
|
+
this.setState({
|
|
171
|
+
linkInProgress: undefined
|
|
172
|
+
});
|
|
173
|
+
}
|
|
249
174
|
|
|
175
|
+
handleChartColumnSelect(panel, column) {
|
|
176
|
+
this.columnSelected(panel, column, true);
|
|
177
|
+
}
|
|
250
178
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Track a column selection and build the link from it.
|
|
280
|
-
* @param panel The panel component that is the source for the column selection
|
|
281
|
-
* @param column The column that was selected
|
|
282
|
-
* @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
|
|
283
|
-
* @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
|
|
284
|
-
*/
|
|
285
|
-
|
|
286
|
-
}, {
|
|
287
|
-
key: "columnSelected",
|
|
288
|
-
value: function columnSelected(panel, column) {
|
|
289
|
-
var _this2 = this;
|
|
290
|
-
|
|
291
|
-
var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
292
|
-
var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : undefined;
|
|
293
|
-
|
|
294
|
-
if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {
|
|
295
|
-
return;
|
|
179
|
+
handleFilterColumnSelect(panel, column) {
|
|
180
|
+
log.debug('handleFilterColumnSelect', this.isOverlayShown());
|
|
181
|
+
var {
|
|
182
|
+
links,
|
|
183
|
+
localDashboardId,
|
|
184
|
+
setActiveTool,
|
|
185
|
+
setDashboardIsolatedLinkerPanelId
|
|
186
|
+
} = this.props;
|
|
187
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
188
|
+
var panelLinks = links.filter(link => {
|
|
189
|
+
var _link$start2, _link$end2;
|
|
190
|
+
|
|
191
|
+
return ((_link$start2 = link.start) === null || _link$start2 === void 0 ? void 0 : _link$start2.panelId) === panelId || ((_link$end2 = link.end) === null || _link$end2 === void 0 ? void 0 : _link$end2.panelId) === panelId;
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
if (!this.isOverlayShown() && panelId != null) {
|
|
195
|
+
// Initial click on the filter source button with linker inactive
|
|
196
|
+
// Show linker in isolated mode for panel
|
|
197
|
+
setActiveTool(ToolType.LINKER);
|
|
198
|
+
setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);
|
|
199
|
+
|
|
200
|
+
if (panelLinks.length === 0) {
|
|
201
|
+
// Source not linked - start new link in isolated linker mode
|
|
202
|
+
// Need to pass panelId for overrideIsolatedLinkerPanelId
|
|
203
|
+
// as redux prop update at this point not yet propagated
|
|
204
|
+
this.columnSelected(panel, column, true, panelId);
|
|
296
205
|
}
|
|
297
206
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
207
|
+
return;
|
|
208
|
+
} // Filter source clicked with linker active
|
|
301
209
|
|
|
302
|
-
if (panelId == null) {
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
210
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
// links would have to be filtered by panelId and columnName and columnType
|
|
351
|
-
|
|
352
|
-
var linksToDelete = _links.filter(function (_ref2) {
|
|
353
|
-
var panelLinkEnd = _ref2.end;
|
|
354
|
-
return (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkPanelId;
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
this.deleteLinks(linksToDelete);
|
|
358
|
-
break;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
case 'tableLink':
|
|
362
|
-
// No-op
|
|
363
|
-
break;
|
|
364
|
-
} // Create a completed link from link in progress
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
var _newLink = {
|
|
368
|
-
start: isReversed ? end : start,
|
|
369
|
-
end: isReversed ? start : end,
|
|
370
|
-
id: id,
|
|
371
|
-
type: type
|
|
372
|
-
};
|
|
373
|
-
log.info('creating link', _newLink);
|
|
374
|
-
this.setState({
|
|
375
|
-
linkInProgress: undefined
|
|
376
|
-
}, function () {
|
|
377
|
-
// Adding link after updating state
|
|
378
|
-
// otherwise both new link and linkInProgress could be rendered at the same time
|
|
379
|
-
// resulting in "multiple children with same key" error
|
|
380
|
-
_this2.addLinks([_newLink]);
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
}, {
|
|
385
|
-
key: "unsetFilterValueForLink",
|
|
386
|
-
value: function unsetFilterValueForLink(link) {
|
|
387
|
-
var panelManager = this.props.panelManager;
|
|
388
|
-
|
|
389
|
-
if (link.end) {
|
|
390
|
-
var end = link.end;
|
|
391
|
-
var _panelId = end.panelId,
|
|
392
|
-
columnName = end.columnName,
|
|
393
|
-
columnType = end.columnType;
|
|
394
|
-
var endPanel = panelManager.getOpenedPanelById(_panelId);
|
|
395
|
-
|
|
396
|
-
if (!endPanel) {
|
|
397
|
-
log.debug('endPanel no longer exists, ignoring unsetFilterValue', _panelId);
|
|
398
|
-
} else if (isLinkablePanel(endPanel)) {
|
|
399
|
-
endPanel.unsetFilterValue(columnName, columnType);
|
|
400
|
-
} else {
|
|
401
|
-
log.debug('endPanel.unsetFilterValue not implemented', endPanel);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Set filters for a given panel ID
|
|
407
|
-
* @param panelId ID of panel to set filters on
|
|
408
|
-
* @param filterMap Map of column name to column type, text, and value
|
|
409
|
-
*/
|
|
410
|
-
|
|
411
|
-
}, {
|
|
412
|
-
key: "setPanelFilterMap",
|
|
413
|
-
value: function setPanelFilterMap(panelId, filterMap) {
|
|
414
|
-
log.debug('Set filter data for panel:', panelId, filterMap);
|
|
415
|
-
var panelManager = this.props.panelManager;
|
|
416
|
-
var panel = panelManager.getOpenedPanelById(panelId);
|
|
417
|
-
|
|
418
|
-
if (!panel) {
|
|
419
|
-
log.debug('panel no longer exists, ignoring setFilterMap', panelId);
|
|
420
|
-
} else if (isLinkablePanel(panel)) {
|
|
421
|
-
panel.setFilterMap(filterMap);
|
|
422
|
-
} else {
|
|
423
|
-
log.debug('panel.setFilterMap not implemented', panelId, panel);
|
|
424
|
-
}
|
|
211
|
+
this.columnSelected(panel, column, true);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
handleColumnsChanged(panel, columns) {
|
|
215
|
+
log.debug('handleColumnsChanged', panel, columns);
|
|
216
|
+
var {
|
|
217
|
+
links
|
|
218
|
+
} = this.props;
|
|
219
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
220
|
+
|
|
221
|
+
if (panelId == null) {
|
|
222
|
+
log.error('Invalid panelId', panel);
|
|
223
|
+
return;
|
|
224
|
+
} // Delete links that start or end on non-existent column in the updated panel
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
var linksToDelete = links.filter((_ref) => {
|
|
228
|
+
var {
|
|
229
|
+
start,
|
|
230
|
+
end
|
|
231
|
+
} = _ref;
|
|
232
|
+
return start.panelId === panelId && LinkerUtils.findColumn(columns, start) == null || end != null && end.panelId === panelId && LinkerUtils.findColumn(columns, end) == null;
|
|
233
|
+
});
|
|
234
|
+
this.deleteLinks(linksToDelete);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
handleGridColumnSelect(panel, column) {
|
|
238
|
+
this.columnSelected(panel, column);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Track a column selection and build the link from it.
|
|
242
|
+
* @param panel The panel component that is the source for the column selection
|
|
243
|
+
* @param column The column that was selected
|
|
244
|
+
* @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.
|
|
245
|
+
* @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
columnSelected(panel, column) {
|
|
250
|
+
var isAlwaysEndPoint = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
251
|
+
var overrideIsolatedLinkerPanelId = arguments.length > 3 ? arguments[3] : undefined;
|
|
252
|
+
|
|
253
|
+
if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {
|
|
254
|
+
return;
|
|
425
255
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
256
|
+
|
|
257
|
+
var {
|
|
258
|
+
isolatedLinkerPanelId
|
|
259
|
+
} = this.props;
|
|
260
|
+
var {
|
|
261
|
+
linkInProgress
|
|
262
|
+
} = this.state;
|
|
263
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
264
|
+
|
|
265
|
+
if (panelId == null) {
|
|
266
|
+
return;
|
|
433
267
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
268
|
+
|
|
269
|
+
var panelComponent = LayoutUtils.getComponentNameFromPanel(panel);
|
|
270
|
+
var {
|
|
271
|
+
name: columnName,
|
|
272
|
+
type: columnType
|
|
273
|
+
} = column;
|
|
274
|
+
|
|
275
|
+
if (linkInProgress == null || linkInProgress.start == null) {
|
|
276
|
+
var newLink = {
|
|
277
|
+
id: shortid.generate(),
|
|
278
|
+
start: {
|
|
279
|
+
panelId,
|
|
280
|
+
panelComponent,
|
|
281
|
+
columnName,
|
|
282
|
+
columnType
|
|
283
|
+
},
|
|
284
|
+
// Link starts with type Invalid as linking a source to itself is not allowed
|
|
285
|
+
type: 'invalid',
|
|
286
|
+
isReversed: isAlwaysEndPoint
|
|
287
|
+
};
|
|
288
|
+
log.debug('starting link', newLink);
|
|
289
|
+
this.setState({
|
|
290
|
+
linkInProgress: newLink
|
|
443
291
|
});
|
|
292
|
+
} else {
|
|
293
|
+
var {
|
|
294
|
+
start,
|
|
295
|
+
id,
|
|
296
|
+
isReversed
|
|
297
|
+
} = linkInProgress;
|
|
298
|
+
var end = {
|
|
299
|
+
panelId,
|
|
300
|
+
panelComponent,
|
|
301
|
+
columnName,
|
|
302
|
+
columnType
|
|
303
|
+
};
|
|
304
|
+
var type = LinkerUtils.getLinkType(isReversed ? end : start, isReversed ? start : end, overrideIsolatedLinkerPanelId !== null && overrideIsolatedLinkerPanelId !== void 0 ? overrideIsolatedLinkerPanelId : isolatedLinkerPanelId);
|
|
305
|
+
|
|
306
|
+
switch (type) {
|
|
307
|
+
case 'invalid':
|
|
308
|
+
log.debug('Ignore invalid link connection', linkInProgress, end);
|
|
309
|
+
return;
|
|
310
|
+
|
|
311
|
+
case 'filterSource':
|
|
312
|
+
{
|
|
313
|
+
// filterSource links have a limit of 1 link per target
|
|
314
|
+
// New link validation passed, delete existing links before adding the new one
|
|
315
|
+
var {
|
|
316
|
+
links: _links
|
|
317
|
+
} = this.props;
|
|
318
|
+
var existingLinkPanelId = isReversed ? start.panelId : end.panelId; // In cases with multiple targets per panel (i.e. chart filters)
|
|
319
|
+
// links would have to be filtered by panelId and columnName and columnType
|
|
320
|
+
|
|
321
|
+
var linksToDelete = _links.filter((_ref2) => {
|
|
322
|
+
var {
|
|
323
|
+
end: panelLinkEnd
|
|
324
|
+
} = _ref2;
|
|
325
|
+
return (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkPanelId;
|
|
326
|
+
});
|
|
444
327
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}));
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}, {
|
|
457
|
-
key: "handleAllLinksDeleted",
|
|
458
|
-
value: function handleAllLinksDeleted() {
|
|
459
|
-
var _this$props4 = this.props,
|
|
460
|
-
links = _this$props4.links,
|
|
461
|
-
isolatedLinkerPanelId = _this$props4.isolatedLinkerPanelId;
|
|
462
|
-
|
|
463
|
-
if (isolatedLinkerPanelId == null) {
|
|
464
|
-
this.deleteLinks(links, true);
|
|
465
|
-
} else {
|
|
466
|
-
var isolatedLinks = links.filter(function (link) {
|
|
467
|
-
var _link$start3, _link$end3;
|
|
328
|
+
this.deleteLinks(linksToDelete);
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
case 'tableLink':
|
|
333
|
+
// No-op
|
|
334
|
+
break;
|
|
335
|
+
} // Create a completed link from link in progress
|
|
468
336
|
|
|
469
|
-
return (link === null || link === void 0 ? void 0 : (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 ? void 0 : (_link$end3 = link.end) === null || _link$end3 === void 0 ? void 0 : _link$end3.panelId) === isolatedLinkerPanelId;
|
|
470
|
-
});
|
|
471
|
-
this.deleteLinks(isolatedLinks);
|
|
472
|
-
}
|
|
473
337
|
|
|
338
|
+
var _newLink = {
|
|
339
|
+
start: isReversed ? end : start,
|
|
340
|
+
end: isReversed ? start : end,
|
|
341
|
+
id,
|
|
342
|
+
type
|
|
343
|
+
};
|
|
344
|
+
log.info('creating link', _newLink);
|
|
474
345
|
this.setState({
|
|
475
346
|
linkInProgress: undefined
|
|
347
|
+
}, () => {
|
|
348
|
+
// Adding link after updating state
|
|
349
|
+
// otherwise both new link and linkInProgress could be rendered at the same time
|
|
350
|
+
// resulting in "multiple children with same key" error
|
|
351
|
+
this.addLinks([_newLink]);
|
|
476
352
|
});
|
|
477
353
|
}
|
|
478
|
-
}
|
|
479
|
-
key: "handleLinkDeleted",
|
|
480
|
-
value: function handleLinkDeleted(linkId) {
|
|
481
|
-
var links = this.props.links;
|
|
482
|
-
var link = links.find(function (l) {
|
|
483
|
-
return l.id === linkId;
|
|
484
|
-
});
|
|
354
|
+
}
|
|
485
355
|
|
|
486
|
-
|
|
487
|
-
|
|
356
|
+
unsetFilterValueForLink(link) {
|
|
357
|
+
var {
|
|
358
|
+
panelManager
|
|
359
|
+
} = this.props;
|
|
360
|
+
|
|
361
|
+
if (link.end) {
|
|
362
|
+
var {
|
|
363
|
+
end
|
|
364
|
+
} = link;
|
|
365
|
+
var {
|
|
366
|
+
panelId: _panelId,
|
|
367
|
+
columnName,
|
|
368
|
+
columnType
|
|
369
|
+
} = end;
|
|
370
|
+
var endPanel = panelManager.getOpenedPanelById(_panelId);
|
|
371
|
+
|
|
372
|
+
if (!endPanel) {
|
|
373
|
+
log.debug('endPanel no longer exists, ignoring unsetFilterValue', _panelId);
|
|
374
|
+
} else if (isLinkablePanel(endPanel)) {
|
|
375
|
+
endPanel.unsetFilterValue(columnName, columnType);
|
|
488
376
|
} else {
|
|
489
|
-
log.
|
|
377
|
+
log.debug('endPanel.unsetFilterValue not implemented', endPanel);
|
|
490
378
|
}
|
|
491
379
|
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();
|
|
516
|
-
var value = dataMap[start.columnName].value;
|
|
517
|
-
var text = "".concat(value);
|
|
518
|
-
|
|
519
|
-
if (TableUtils.isDateType(columnType)) {
|
|
520
|
-
var dateFilterFormatter = new DateTimeColumnFormatter({
|
|
521
|
-
timeZone: timeZone,
|
|
522
|
-
showTimeZone: false,
|
|
523
|
-
showTSeparator: true,
|
|
524
|
-
defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT
|
|
525
|
-
});
|
|
526
|
-
text = dateFilterFormatter.format(value);
|
|
527
|
-
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Set filters for a given panel ID
|
|
383
|
+
* @param panelId ID of panel to set filters on
|
|
384
|
+
* @param filterMap Map of column name to column type, text, and value
|
|
385
|
+
*/
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
setPanelFilterMap(panelId, filterMap) {
|
|
389
|
+
log.debug('Set filter data for panel:', panelId, filterMap);
|
|
390
|
+
var {
|
|
391
|
+
panelManager
|
|
392
|
+
} = this.props;
|
|
393
|
+
var panel = panelManager.getOpenedPanelById(panelId);
|
|
394
|
+
|
|
395
|
+
if (!panel) {
|
|
396
|
+
log.debug('panel no longer exists, ignoring setFilterMap', panelId);
|
|
397
|
+
} else if (isLinkablePanel(panel)) {
|
|
398
|
+
panel.setFilterMap(filterMap);
|
|
399
|
+
} else {
|
|
400
|
+
log.debug('panel.setFilterMap not implemented', panelId, panel);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
528
403
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
} // Apply combined filters to all target panels
|
|
404
|
+
addLinks(links) {
|
|
405
|
+
var {
|
|
406
|
+
addDashboardLinks,
|
|
407
|
+
localDashboardId
|
|
408
|
+
} = this.props;
|
|
409
|
+
addDashboardLinks(localDashboardId, links);
|
|
410
|
+
}
|
|
537
411
|
|
|
412
|
+
deleteLinks(links) {
|
|
413
|
+
var clearAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
414
|
+
var {
|
|
415
|
+
localDashboardId
|
|
416
|
+
} = this.props;
|
|
417
|
+
links.forEach(link => this.unsetFilterValueForLink(link));
|
|
418
|
+
|
|
419
|
+
if (clearAll) {
|
|
420
|
+
var {
|
|
421
|
+
setDashboardLinks
|
|
422
|
+
} = this.props;
|
|
423
|
+
setDashboardLinks(localDashboardId, []);
|
|
424
|
+
} else if (links.length > 0) {
|
|
425
|
+
var {
|
|
426
|
+
deleteDashboardLinks
|
|
427
|
+
} = this.props;
|
|
428
|
+
deleteDashboardLinks(localDashboardId, links.map((_ref3) => {
|
|
429
|
+
var {
|
|
430
|
+
id
|
|
431
|
+
} = _ref3;
|
|
432
|
+
return id;
|
|
433
|
+
}));
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
handleAllLinksDeleted() {
|
|
438
|
+
var {
|
|
439
|
+
links,
|
|
440
|
+
isolatedLinkerPanelId
|
|
441
|
+
} = this.props;
|
|
538
442
|
|
|
539
|
-
|
|
540
|
-
|
|
443
|
+
if (isolatedLinkerPanelId == null) {
|
|
444
|
+
this.deleteLinks(links, true);
|
|
445
|
+
} else {
|
|
446
|
+
var isolatedLinks = links.filter(link => {
|
|
447
|
+
var _link$start3, _link$end3;
|
|
448
|
+
|
|
449
|
+
return (link === null || link === void 0 ? void 0 : (_link$start3 = link.start) === null || _link$start3 === void 0 ? void 0 : _link$start3.panelId) === isolatedLinkerPanelId || (link === null || link === void 0 ? void 0 : (_link$end3 = link.end) === null || _link$end3 === void 0 ? void 0 : _link$end3.panelId) === isolatedLinkerPanelId;
|
|
541
450
|
});
|
|
451
|
+
this.deleteLinks(isolatedLinks);
|
|
542
452
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
// because the panels can get unmounted on errors and we want to keep the links if that happens
|
|
560
|
-
log.debug("Panel ".concat(panelId, " closed, deleting links."));
|
|
561
|
-
this.deleteLinksForPanelId(panelId);
|
|
562
|
-
}
|
|
563
|
-
}, {
|
|
564
|
-
key: "handleLayoutStateChanged",
|
|
565
|
-
value: function handleLayoutStateChanged() {
|
|
566
|
-
this.forceUpdate();
|
|
567
|
-
}
|
|
568
|
-
}, {
|
|
569
|
-
key: "handleStateChange",
|
|
570
|
-
value: function handleStateChange() {
|
|
571
|
-
this.forceUpdate();
|
|
572
|
-
}
|
|
573
|
-
}, {
|
|
574
|
-
key: "handleExited",
|
|
575
|
-
value: function handleExited() {
|
|
576
|
-
// Has to be done after linker exit animation to avoid flashing non-isolated links
|
|
577
|
-
var _this$props6 = this.props,
|
|
578
|
-
localDashboardId = _this$props6.localDashboardId,
|
|
579
|
-
setDashboardIsolatedLinkerPanelId = _this$props6.setDashboardIsolatedLinkerPanelId;
|
|
580
|
-
setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);
|
|
453
|
+
|
|
454
|
+
this.setState({
|
|
455
|
+
linkInProgress: undefined
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
handleLinkDeleted(linkId) {
|
|
460
|
+
var {
|
|
461
|
+
links
|
|
462
|
+
} = this.props;
|
|
463
|
+
var link = links.find(l => l.id === linkId);
|
|
464
|
+
|
|
465
|
+
if (link) {
|
|
466
|
+
this.deleteLinks([link]);
|
|
467
|
+
} else {
|
|
468
|
+
log.error('Unable to find link to delete', linkId);
|
|
581
469
|
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
handleUpdateValues(panel, dataMap) {
|
|
473
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
474
|
+
var {
|
|
475
|
+
links,
|
|
476
|
+
timeZone
|
|
477
|
+
} = this.props; // Map of panel ID to filterMap
|
|
478
|
+
|
|
479
|
+
var panelFilterMap = new Map(); // Instead of setting filters one by one for each link,
|
|
480
|
+
// combine them so they could be set in a single call per target panel
|
|
481
|
+
|
|
482
|
+
for (var i = 0; i < links.length; i += 1) {
|
|
483
|
+
var {
|
|
484
|
+
start,
|
|
485
|
+
end
|
|
486
|
+
} = links[i];
|
|
487
|
+
|
|
488
|
+
if (start.panelId === panelId && end != null) {
|
|
489
|
+
var {
|
|
490
|
+
panelId: endPanelId,
|
|
491
|
+
columnName,
|
|
492
|
+
columnType
|
|
493
|
+
} = end; // Map of column name to column type and filter value
|
|
494
|
+
|
|
495
|
+
var filterMap = panelFilterMap.has(endPanelId) ? panelFilterMap.get(endPanelId) : new Map();
|
|
496
|
+
var {
|
|
497
|
+
value
|
|
498
|
+
} = dataMap[start.columnName];
|
|
499
|
+
var text = "".concat(value);
|
|
500
|
+
|
|
501
|
+
if (TableUtils.isDateType(columnType)) {
|
|
502
|
+
var dateFilterFormatter = new DateTimeColumnFormatter({
|
|
503
|
+
timeZone,
|
|
504
|
+
showTimeZone: false,
|
|
505
|
+
showTSeparator: true,
|
|
506
|
+
defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT
|
|
507
|
+
});
|
|
508
|
+
text = dateFilterFormatter.format(value);
|
|
600
509
|
}
|
|
510
|
+
|
|
511
|
+
filterMap.set(columnName, {
|
|
512
|
+
columnType,
|
|
513
|
+
text,
|
|
514
|
+
value
|
|
515
|
+
});
|
|
516
|
+
panelFilterMap.set(endPanelId, filterMap);
|
|
601
517
|
}
|
|
518
|
+
} // Apply combined filters to all target panels
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
panelFilterMap.forEach((filterMap, endPanelId) => {
|
|
522
|
+
this.setPanelFilterMap(endPanelId, filterMap);
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
handlePanelCloned(panel, cloneConfig) {
|
|
527
|
+
var {
|
|
528
|
+
links
|
|
529
|
+
} = this.props;
|
|
530
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
531
|
+
var cloneId = cloneConfig.id;
|
|
532
|
+
|
|
533
|
+
if (panelId != null) {
|
|
534
|
+
var linksToAdd = LinkerUtils.cloneLinksForPanel(links, panelId, cloneId);
|
|
535
|
+
this.addLinks(linksToAdd);
|
|
602
536
|
}
|
|
603
|
-
}
|
|
604
|
-
key: "isOverlayShown",
|
|
605
|
-
value: function isOverlayShown() {
|
|
606
|
-
var activeTool = this.props.activeTool;
|
|
607
|
-
return activeTool === ToolType.LINKER;
|
|
608
|
-
}
|
|
609
|
-
}, {
|
|
610
|
-
key: "updateSelectionValidators",
|
|
611
|
-
value: function updateSelectionValidators() {
|
|
612
|
-
var _this$props7 = this.props,
|
|
613
|
-
activeTool = _this$props7.activeTool,
|
|
614
|
-
setDashboardColumnSelectionValidator = _this$props7.setDashboardColumnSelectionValidator,
|
|
615
|
-
localDashboardId = _this$props7.localDashboardId;
|
|
616
|
-
|
|
617
|
-
switch (activeTool) {
|
|
618
|
-
case ToolType.LINKER:
|
|
619
|
-
setDashboardColumnSelectionValidator(localDashboardId, this.isColumnSelectionValid);
|
|
620
|
-
break;
|
|
537
|
+
}
|
|
621
538
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
539
|
+
handlePanelClosed(panelId) {
|
|
540
|
+
// Delete links on PanelEvent.CLOSED instead of UNMOUNT
|
|
541
|
+
// because the panels can get unmounted on errors and we want to keep the links if that happens
|
|
542
|
+
log.debug("Panel ".concat(panelId, " closed, deleting links."));
|
|
543
|
+
this.deleteLinksForPanelId(panelId);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
handleLayoutStateChanged() {
|
|
547
|
+
this.forceUpdate();
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
handleStateChange() {
|
|
551
|
+
this.forceUpdate();
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
handleExited() {
|
|
555
|
+
// Has to be done after linker exit animation to avoid flashing non-isolated links
|
|
556
|
+
var {
|
|
557
|
+
localDashboardId,
|
|
558
|
+
setDashboardIsolatedLinkerPanelId
|
|
559
|
+
} = this.props;
|
|
560
|
+
setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.
|
|
564
|
+
* @param panelId The panel ID to delete links for
|
|
565
|
+
*/
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
deleteLinksForPanelId(panelId) {
|
|
569
|
+
var {
|
|
570
|
+
links
|
|
571
|
+
} = this.props;
|
|
572
|
+
|
|
573
|
+
for (var i = 0; i < links.length; i += 1) {
|
|
574
|
+
var link = links[i];
|
|
575
|
+
var {
|
|
576
|
+
start,
|
|
577
|
+
end,
|
|
578
|
+
id
|
|
579
|
+
} = link;
|
|
580
|
+
|
|
581
|
+
if (start.panelId === panelId || (end === null || end === void 0 ? void 0 : end.panelId) === panelId) {
|
|
582
|
+
this.handleLinkDeleted(id);
|
|
625
583
|
}
|
|
626
584
|
}
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
isOverlayShown() {
|
|
588
|
+
var {
|
|
589
|
+
activeTool
|
|
590
|
+
} = this.props;
|
|
591
|
+
return activeTool === ToolType.LINKER;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
updateSelectionValidators() {
|
|
595
|
+
var {
|
|
596
|
+
activeTool,
|
|
597
|
+
setDashboardColumnSelectionValidator,
|
|
598
|
+
localDashboardId
|
|
599
|
+
} = this.props;
|
|
600
|
+
|
|
601
|
+
switch (activeTool) {
|
|
602
|
+
case ToolType.LINKER:
|
|
603
|
+
setDashboardColumnSelectionValidator(localDashboardId, this.isColumnSelectionValid);
|
|
604
|
+
break;
|
|
605
|
+
|
|
606
|
+
default:
|
|
607
|
+
setDashboardColumnSelectionValidator(localDashboardId, undefined);
|
|
608
|
+
break;
|
|
636
609
|
}
|
|
637
|
-
}
|
|
638
|
-
key: "isColumnSelectionValid",
|
|
639
|
-
value: function isColumnSelectionValid(panel, tableColumn) {
|
|
640
|
-
var linkInProgress = this.state.linkInProgress;
|
|
641
|
-
var isolatedLinkerPanelId = this.props.isolatedLinkerPanelId; // Link not started yet - no need to update type
|
|
642
|
-
|
|
643
|
-
if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) == null) {
|
|
644
|
-
return true;
|
|
645
|
-
}
|
|
610
|
+
}
|
|
646
611
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
612
|
+
updateLinkInProgressType(linkInProgress) {
|
|
613
|
+
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'invalid';
|
|
614
|
+
this.setState({
|
|
615
|
+
linkInProgress: _objectSpread(_objectSpread({}, linkInProgress), {}, {
|
|
616
|
+
type
|
|
617
|
+
})
|
|
618
|
+
});
|
|
619
|
+
}
|
|
652
620
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
621
|
+
isColumnSelectionValid(panel, tableColumn) {
|
|
622
|
+
var {
|
|
623
|
+
linkInProgress
|
|
624
|
+
} = this.state;
|
|
625
|
+
var {
|
|
626
|
+
isolatedLinkerPanelId
|
|
627
|
+
} = this.props; // Link not started yet - no need to update type
|
|
656
628
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
629
|
+
if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) == null) {
|
|
630
|
+
return true;
|
|
631
|
+
}
|
|
660
632
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
columnType: tableColumn.type
|
|
666
|
-
};
|
|
667
|
-
var type = isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);
|
|
668
|
-
this.updateLinkInProgressType(linkInProgress, type);
|
|
669
|
-
return type !== 'invalid';
|
|
633
|
+
if (tableColumn == null) {
|
|
634
|
+
// Link started, end point is not a valid target
|
|
635
|
+
this.updateLinkInProgressType(linkInProgress);
|
|
636
|
+
return false;
|
|
670
637
|
}
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
var disabled = linkInProgress != null && linkInProgress.start != null;
|
|
681
|
-
var linkerOverlayMessage = isolatedLinkerPanelId === null ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.' : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';
|
|
682
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CSSTransition, {
|
|
683
|
-
"in": isLinkOverlayShown,
|
|
684
|
-
timeout: ThemeExport.transitionMs,
|
|
685
|
-
classNames: "fade",
|
|
686
|
-
mountOnEnter: true,
|
|
687
|
-
unmountOnExit: true,
|
|
688
|
-
onExited: this.handleExited
|
|
689
|
-
}, /*#__PURE__*/React.createElement(LinkerOverlayContent, {
|
|
690
|
-
disabled: disabled,
|
|
691
|
-
panelManager: panelManager,
|
|
692
|
-
links: this.getCachedLinks(links, linkInProgress, isolatedLinkerPanelId),
|
|
693
|
-
messageText: linkerOverlayMessage,
|
|
694
|
-
onLinkDeleted: this.handleLinkDeleted,
|
|
695
|
-
onAllLinksDeleted: this.handleAllLinksDeleted,
|
|
696
|
-
onDone: this.handleDone,
|
|
697
|
-
onCancel: this.handleCancel
|
|
698
|
-
})));
|
|
638
|
+
|
|
639
|
+
var {
|
|
640
|
+
isReversed,
|
|
641
|
+
start
|
|
642
|
+
} = linkInProgress;
|
|
643
|
+
var panelId = LayoutUtils.getIdFromPanel(panel);
|
|
644
|
+
|
|
645
|
+
if (panelId == null) {
|
|
646
|
+
return false;
|
|
699
647
|
}
|
|
700
|
-
}]);
|
|
701
648
|
|
|
702
|
-
|
|
703
|
-
|
|
649
|
+
var end = {
|
|
650
|
+
panelId,
|
|
651
|
+
panelComponent: LayoutUtils.getComponentNameFromPanel(panel),
|
|
652
|
+
columnName: tableColumn.name,
|
|
653
|
+
columnType: tableColumn.type
|
|
654
|
+
};
|
|
655
|
+
var type = isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);
|
|
656
|
+
this.updateLinkInProgressType(linkInProgress, type);
|
|
657
|
+
return type !== 'invalid';
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
render() {
|
|
661
|
+
var {
|
|
662
|
+
links,
|
|
663
|
+
isolatedLinkerPanelId,
|
|
664
|
+
panelManager
|
|
665
|
+
} = this.props;
|
|
666
|
+
var {
|
|
667
|
+
linkInProgress
|
|
668
|
+
} = this.state;
|
|
669
|
+
var isLinkOverlayShown = this.isOverlayShown();
|
|
670
|
+
var disabled = linkInProgress != null && linkInProgress.start != null;
|
|
671
|
+
var linkerOverlayMessage = isolatedLinkerPanelId === null ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.' : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';
|
|
672
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CSSTransition, {
|
|
673
|
+
in: isLinkOverlayShown,
|
|
674
|
+
timeout: ThemeExport.transitionMs,
|
|
675
|
+
classNames: "fade",
|
|
676
|
+
mountOnEnter: true,
|
|
677
|
+
unmountOnExit: true,
|
|
678
|
+
onExited: this.handleExited
|
|
679
|
+
}, /*#__PURE__*/React.createElement(LinkerOverlayContent, {
|
|
680
|
+
disabled: disabled,
|
|
681
|
+
panelManager: panelManager,
|
|
682
|
+
links: this.getCachedLinks(links, linkInProgress, isolatedLinkerPanelId),
|
|
683
|
+
messageText: linkerOverlayMessage,
|
|
684
|
+
onLinkDeleted: this.handleLinkDeleted,
|
|
685
|
+
onAllLinksDeleted: this.handleAllLinksDeleted,
|
|
686
|
+
onDone: this.handleDone,
|
|
687
|
+
onCancel: this.handleCancel
|
|
688
|
+
})));
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
}
|
|
704
692
|
export default connector(Linker);
|
|
705
693
|
//# sourceMappingURL=Linker.js.map
|