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