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