@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/panels/Panel.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import ReactDOM from 'react-dom';
|
|
5
4
|
import classNames from 'classnames';
|
|
@@ -12,7 +11,6 @@ import { ConsoleEvent, InputFilterEvent, TabEvent } from "../events/index.js";
|
|
|
12
11
|
import PanelContextMenu from "./PanelContextMenu.js";
|
|
13
12
|
import RenameDialog from "./RenameDialog.js";
|
|
14
13
|
var log = Log.module('Panel');
|
|
15
|
-
|
|
16
14
|
/**
|
|
17
15
|
* Generic panel component that emits mount/unmount/focus events.
|
|
18
16
|
* Also wires up some triggers for common events:
|
|
@@ -21,21 +19,16 @@ var log = Log.module('Panel');
|
|
|
21
19
|
class Panel extends PureComponent {
|
|
22
20
|
constructor(props) {
|
|
23
21
|
super(props);
|
|
24
|
-
|
|
25
22
|
_defineProperty(this, "getAdditionActions", memoize((actions, isClonable, isRenamable) => {
|
|
26
23
|
var additionalActions = [];
|
|
27
|
-
|
|
28
24
|
if (isClonable) {
|
|
29
25
|
additionalActions.push(this.getCloneAction());
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
if (isRenamable) {
|
|
33
28
|
additionalActions.push(this.getRenameAction());
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
return [...additionalActions, ...actions];
|
|
37
31
|
}));
|
|
38
|
-
|
|
39
32
|
this.handleClearAllFilters = this.handleClearAllFilters.bind(this);
|
|
40
33
|
this.handleCopyPanel = this.handleCopyPanel.bind(this);
|
|
41
34
|
this.handleFocus = this.handleFocus.bind(this);
|
|
@@ -61,7 +54,6 @@ class Panel extends PureComponent {
|
|
|
61
54
|
showRenameDialog: false
|
|
62
55
|
};
|
|
63
56
|
}
|
|
64
|
-
|
|
65
57
|
componentDidMount() {
|
|
66
58
|
var {
|
|
67
59
|
componentPanel,
|
|
@@ -81,7 +73,6 @@ class Panel extends PureComponent {
|
|
|
81
73
|
glEventHub.on(InputFilterEvent.CLEAR_ALL_FILTERS, this.handleClearAllFilters);
|
|
82
74
|
glEventHub.emit(PanelEvent.MOUNT, componentPanel);
|
|
83
75
|
}
|
|
84
|
-
|
|
85
76
|
componentWillUnmount() {
|
|
86
77
|
var {
|
|
87
78
|
componentPanel,
|
|
@@ -101,37 +92,32 @@ class Panel extends PureComponent {
|
|
|
101
92
|
glEventHub.off(InputFilterEvent.CLEAR_ALL_FILTERS, this.handleClearAllFilters);
|
|
102
93
|
glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);
|
|
103
94
|
}
|
|
104
|
-
|
|
105
95
|
handleTab(tab) {
|
|
106
96
|
if (tab != null) {
|
|
107
97
|
this.setState({
|
|
108
98
|
title: LayoutUtils.getTitleFromTab(tab)
|
|
109
99
|
});
|
|
110
|
-
}
|
|
100
|
+
}
|
|
101
|
+
// render after move can happen before tab event, glTab could be null
|
|
111
102
|
// when tab event is emitted, force a render update
|
|
112
|
-
|
|
113
|
-
|
|
114
103
|
this.forceUpdate();
|
|
115
104
|
var {
|
|
116
105
|
onTab
|
|
117
106
|
} = this.props;
|
|
118
107
|
onTab(tab);
|
|
119
108
|
}
|
|
120
|
-
|
|
121
109
|
handleTabClicked() {
|
|
122
110
|
var {
|
|
123
111
|
onTabClicked
|
|
124
112
|
} = this.props;
|
|
125
113
|
onTabClicked(...arguments);
|
|
126
114
|
}
|
|
127
|
-
|
|
128
115
|
handleClearAllFilters() {
|
|
129
116
|
var {
|
|
130
117
|
onClearAllFilters
|
|
131
118
|
} = this.props;
|
|
132
119
|
onClearAllFilters(...arguments);
|
|
133
120
|
}
|
|
134
|
-
|
|
135
121
|
handleFocus(event) {
|
|
136
122
|
var {
|
|
137
123
|
componentPanel,
|
|
@@ -143,82 +129,70 @@ class Panel extends PureComponent {
|
|
|
143
129
|
} = this.props;
|
|
144
130
|
onFocus(event);
|
|
145
131
|
}
|
|
146
|
-
|
|
147
132
|
handleBlur(event) {
|
|
148
133
|
var {
|
|
149
134
|
onBlur
|
|
150
135
|
} = this.props;
|
|
151
136
|
onBlur(event);
|
|
152
137
|
}
|
|
153
|
-
|
|
154
138
|
handleHide() {
|
|
155
139
|
var {
|
|
156
140
|
onHide
|
|
157
141
|
} = this.props;
|
|
158
142
|
onHide(...arguments);
|
|
159
143
|
}
|
|
160
|
-
|
|
161
144
|
handleResize() {
|
|
162
145
|
var {
|
|
163
146
|
onResize
|
|
164
147
|
} = this.props;
|
|
165
148
|
onResize(...arguments);
|
|
166
149
|
}
|
|
167
|
-
|
|
168
150
|
handleSessionClosed(session) {
|
|
169
151
|
var {
|
|
170
152
|
onSessionClose
|
|
171
153
|
} = this.props;
|
|
172
154
|
onSessionClose(session);
|
|
173
155
|
}
|
|
174
|
-
|
|
175
156
|
handleSessionOpened(session, params) {
|
|
176
157
|
var {
|
|
177
158
|
onSessionOpen
|
|
178
159
|
} = this.props;
|
|
179
160
|
onSessionOpen(session, params);
|
|
180
161
|
}
|
|
181
|
-
|
|
182
162
|
handleBeforeShow() {
|
|
183
163
|
var {
|
|
184
164
|
onBeforeShow
|
|
185
165
|
} = this.props;
|
|
186
166
|
onBeforeShow(...arguments);
|
|
187
167
|
}
|
|
188
|
-
|
|
189
168
|
handleShow() {
|
|
190
169
|
var {
|
|
191
170
|
onShow
|
|
192
171
|
} = this.props;
|
|
193
172
|
onShow(...arguments);
|
|
194
173
|
}
|
|
195
|
-
|
|
196
174
|
handleTabBlur() {
|
|
197
175
|
var {
|
|
198
176
|
onTabBlur
|
|
199
177
|
} = this.props;
|
|
200
178
|
onTabBlur(...arguments);
|
|
201
179
|
}
|
|
202
|
-
|
|
203
180
|
handleTabFocus() {
|
|
204
181
|
var {
|
|
205
182
|
onTabFocus
|
|
206
183
|
} = this.props;
|
|
207
184
|
onTabFocus(...arguments);
|
|
208
185
|
}
|
|
209
|
-
|
|
210
186
|
handleRenameCancel() {
|
|
211
187
|
this.setState({
|
|
212
188
|
showRenameDialog: false
|
|
213
189
|
});
|
|
214
190
|
}
|
|
215
|
-
|
|
216
191
|
handleShowRenameDialog() {
|
|
217
192
|
this.setState({
|
|
218
193
|
showRenameDialog: true
|
|
219
194
|
});
|
|
220
195
|
}
|
|
221
|
-
|
|
222
196
|
handleRenameSubmit(newTitle) {
|
|
223
197
|
var {
|
|
224
198
|
glContainer
|
|
@@ -232,7 +206,6 @@ class Panel extends PureComponent {
|
|
|
232
206
|
assertNotNull(config);
|
|
233
207
|
LayoutUtils.renameComponent(root, config, newTitle);
|
|
234
208
|
}
|
|
235
|
-
|
|
236
209
|
handleCopyPanel() {
|
|
237
210
|
var {
|
|
238
211
|
glContainer,
|
|
@@ -240,19 +213,15 @@ class Panel extends PureComponent {
|
|
|
240
213
|
} = this.props;
|
|
241
214
|
var root = LayoutUtils.getRootFromContainer(glContainer);
|
|
242
215
|
var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
|
|
243
|
-
|
|
244
216
|
if (config == null) {
|
|
245
217
|
log.error('Could not get component config from container', glContainer);
|
|
246
218
|
return;
|
|
247
219
|
}
|
|
248
|
-
|
|
249
220
|
var cloneConfig = LayoutUtils.cloneComponent(root, config);
|
|
250
|
-
|
|
251
221
|
if (cloneConfig !== null) {
|
|
252
222
|
glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);
|
|
253
223
|
}
|
|
254
224
|
}
|
|
255
|
-
|
|
256
225
|
getCloneAction() {
|
|
257
226
|
return {
|
|
258
227
|
title: 'Copy Panel',
|
|
@@ -261,7 +230,6 @@ class Panel extends PureComponent {
|
|
|
261
230
|
action: this.handleCopyPanel
|
|
262
231
|
};
|
|
263
232
|
}
|
|
264
|
-
|
|
265
233
|
getRenameAction() {
|
|
266
234
|
return {
|
|
267
235
|
title: 'Rename',
|
|
@@ -270,7 +238,6 @@ class Panel extends PureComponent {
|
|
|
270
238
|
action: this.handleShowRenameDialog
|
|
271
239
|
};
|
|
272
240
|
}
|
|
273
|
-
|
|
274
241
|
render() {
|
|
275
242
|
var {
|
|
276
243
|
children,
|
|
@@ -317,9 +284,7 @@ class Panel extends PureComponent {
|
|
|
317
284
|
}, renderTabTooltip())), glTab.element[0] // tab.element is jquery element, we want a dom element
|
|
318
285
|
));
|
|
319
286
|
}
|
|
320
|
-
|
|
321
287
|
}
|
|
322
|
-
|
|
323
288
|
_defineProperty(Panel, "defaultProps", {
|
|
324
289
|
className: '',
|
|
325
290
|
onTab: () => undefined,
|
|
@@ -343,6 +308,5 @@ _defineProperty(Panel, "defaultProps", {
|
|
|
343
308
|
isClonable: false,
|
|
344
309
|
isRenamable: false
|
|
345
310
|
});
|
|
346
|
-
|
|
347
311
|
export default Panel;
|
|
348
312
|
//# sourceMappingURL=Panel.js.map
|
package/dist/panels/Panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (...args: unknown[]) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(...args: unknown[]): void {\n const { onTabClicked } = this.props;\n onTabClicked(...args);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (...args: unknown[]) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(...args: unknown[]): void {\n const { onTabClicked } = this.props;\n onTabClicked(...args);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":";AAAA,OAAOA,KAAK,IAIVC,aAAa,QAGR,OAAO;AACd,OAAOC,QAAQ,MAAM,WAAW;AAChC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,aAAa;AACjC,SAEEC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,uBAAuB;AAC9B,SAASC,WAAW,EAAEC,UAAU,QAAQ,sBAAsB;AAO9D,SAASC,aAAa,QAAQ,kBAAkB;AAChD,OAAOC,GAAG,MAAM,gBAAgB;AAAC,SAExBC,YAAY,EAAEC,gBAAgB,EAAEC,QAAQ;AAAA,OAC1CC,gBAAgB;AAAA,OAChBC,YAAY;AAEnB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,OAAO,CAAC;AAqC/B;AACA;AACA;AACA;AACA;AACA,MAAMC,KAAK,SAASlB,aAAa,CAAyB;EAyBxDmB,WAAW,CAACC,KAAiB,EAAE;IAC7B,KAAK,CAACA,KAAK,CAAC;IAAC,4CAyMMjB,OAAO,CAC1B,CAACkB,OAAwB,EAAEC,UAAmB,EAAEC,WAAoB,KAAK;MACvE,IAAMC,iBAAiB,GAAG,EAAE;MAC5B,IAAIF,UAAU,EAAE;QACdE,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,CAAC;MAC/C;MACA,IAAIH,WAAW,EAAE;QACfC,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACE,eAAe,EAAE,CAAC;MAChD;MACA,OAAO,CAAC,GAAGH,iBAAiB,EAAE,GAAGH,OAAO,CAAC;IAC3C,CAAC,CACF;IAlNC,IAAI,CAACO,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACD,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,UAAU,GAAG,IAAI,CAACA,UAAU,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACI,UAAU,GAAG,IAAI,CAACA,UAAU,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACN,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACO,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACQ,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACR,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACS,UAAU,GAAG,IAAI,CAACA,UAAU,CAACT,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACU,aAAa,GAAG,IAAI,CAACA,aAAa,CAACV,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACW,cAAc,GAAG,IAAI,CAACA,cAAc,CAACX,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACY,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACZ,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACa,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACb,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACc,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACd,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACe,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACf,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACgB,SAAS,GAAG,IAAI,CAACA,SAAS,CAAChB,IAAI,CAAC,IAAI,CAAC;IAE1C,IAAM;MAAEiB;IAAY,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAClC,IAAI,CAAC2B,KAAK,GAAG;MACXC,KAAK,EAAEzC,WAAW,CAAC0C,qBAAqB,CAACH,WAAW,CAAC;MACrDI,gBAAgB,EAAE;IACpB,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAEC,cAAc;MAAEN,WAAW;MAAEO;IAAW,CAAC,GAAG,IAAI,CAACjC,KAAK;IAE9D0B,WAAW,CAACQ,EAAE,CAAC,QAAQ,EAAE,IAAI,CAACpB,YAAY,CAAC;IAC3CY,WAAW,CAACQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAACjB,gBAAgB,CAAC;IAC7CS,WAAW,CAACQ,EAAE,CAAC,OAAO,EAAE,IAAI,CAAChB,UAAU,CAAC;IACxCQ,WAAW,CAACQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAACrB,UAAU,CAAC;IACvCa,WAAW,CAACQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAACT,SAAS,CAAC;IACrCC,WAAW,CAACQ,EAAE,CAAC,YAAY,EAAE,IAAI,CAACV,gBAAgB,CAAC;IACnDS,UAAU,CAACC,EAAE,CAAC3C,YAAY,CAAC4C,cAAc,EAAE,IAAI,CAACpB,mBAAmB,CAAC;IACpEkB,UAAU,CAACC,EAAE,CAAC3C,YAAY,CAAC6C,cAAc,EAAE,IAAI,CAACpB,mBAAmB,CAAC;IACpEiB,UAAU,CAACC,EAAE,CAACzC,QAAQ,CAAC4C,KAAK,EAAE,IAAI,CAACjB,cAAc,CAAC;IAClDa,UAAU,CAACC,EAAE,CAACzC,QAAQ,CAAC6C,IAAI,EAAE,IAAI,CAACnB,aAAa,CAAC;IAChDc,UAAU,CAACC,EAAE,CACX1C,gBAAgB,CAAC+C,iBAAiB,EAClC,IAAI,CAAC/B,qBAAqB,CAC3B;IAEDyB,UAAU,CAACO,IAAI,CAACpD,UAAU,CAACqD,KAAK,EAAET,cAAc,CAAC;EACnD;EAEAU,oBAAoB,GAAS;IAC3B,IAAM;MAAEV,cAAc;MAAEN,WAAW;MAAEO;IAAW,CAAC,GAAG,IAAI,CAACjC,KAAK;IAE9D0B,WAAW,CAACiB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC7B,YAAY,CAAC;IAC5CY,WAAW,CAACiB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC1B,gBAAgB,CAAC;IAC9CS,WAAW,CAACiB,GAAG,CAAC,OAAO,EAAE,IAAI,CAACzB,UAAU,CAAC;IACzCQ,WAAW,CAACiB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC9B,UAAU,CAAC;IACxCa,WAAW,CAACiB,GAAG,CAAC,KAAK,EAAE,IAAI,CAAClB,SAAS,CAAC;IACtCC,WAAW,CAACiB,GAAG,CAAC,YAAY,EAAE,IAAI,CAACnB,gBAAgB,CAAC;IACpDS,UAAU,CAACU,GAAG,CAACpD,YAAY,CAAC4C,cAAc,EAAE,IAAI,CAACpB,mBAAmB,CAAC;IACrEkB,UAAU,CAACU,GAAG,CAACpD,YAAY,CAAC6C,cAAc,EAAE,IAAI,CAACpB,mBAAmB,CAAC;IACrEiB,UAAU,CAACU,GAAG,CAAClD,QAAQ,CAAC4C,KAAK,EAAE,IAAI,CAACjB,cAAc,CAAC;IACnDa,UAAU,CAACU,GAAG,CAAClD,QAAQ,CAAC6C,IAAI,EAAE,IAAI,CAACnB,aAAa,CAAC;IACjDc,UAAU,CAACU,GAAG,CACZnD,gBAAgB,CAAC+C,iBAAiB,EAClC,IAAI,CAAC/B,qBAAqB,CAC3B;IAEDyB,UAAU,CAACO,IAAI,CAACpD,UAAU,CAACwD,OAAO,EAAEZ,cAAc,CAAC;EACrD;EAEAP,SAAS,CAACoB,GAAQ,EAAQ;IACxB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACf,IAAI,CAACC,QAAQ,CAAC;QACZlB,KAAK,EAAEzC,WAAW,CAAC4D,eAAe,CAACF,GAAG;MACxC,CAAC,CAAC;IACJ;IACA;IACA;IACA,IAAI,CAACG,WAAW,EAAE;IAElB,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACjD,KAAK;IAC5BiD,KAAK,CAACJ,GAAG,CAAC;EACZ;EAEArB,gBAAgB,GAA2B;IACzC,IAAM;MAAE0B;IAAa,CAAC,GAAG,IAAI,CAAClD,KAAK;IACnCkD,YAAY,CAAC,YAAO,CAAC;EACvB;EAEA1C,qBAAqB,GAA2B;IAC9C,IAAM;MAAE2C;IAAkB,CAAC,GAAG,IAAI,CAACnD,KAAK;IACxCmD,iBAAiB,CAAC,YAAO,CAAC;EAC5B;EAEAxC,WAAW,CAACyC,KAAiC,EAAQ;IACnD,IAAM;MAAEpB,cAAc;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACjC,KAAK;IACjDiC,UAAU,CAACO,IAAI,CAACpD,UAAU,CAACiE,KAAK,EAAErB,cAAc,CAAC;IAEjD,IAAM;MAAEsB;IAAQ,CAAC,GAAG,IAAI,CAACtD,KAAK;IAC9BsD,OAAO,CAACF,KAAK,CAAC;EAChB;EAEAxC,UAAU,CAACwC,KAAiC,EAAQ;IAClD,IAAM;MAAEG;IAAO,CAAC,GAAG,IAAI,CAACvD,KAAK;IAC7BuD,MAAM,CAACH,KAAK,CAAC;EACf;EAEAvC,UAAU,GAA2B;IACnC,IAAM;MAAE2C;IAAO,CAAC,GAAG,IAAI,CAACxD,KAAK;IAC7BwD,MAAM,CAAC,YAAO,CAAC;EACjB;EAEA1C,YAAY,GAA2B;IACrC,IAAM;MAAE2C;IAAS,CAAC,GAAG,IAAI,CAACzD,KAAK;IAC/ByD,QAAQ,CAAC,YAAO,CAAC;EACnB;EAEA1C,mBAAmB,CAAC2C,OAAmB,EAAQ;IAC7C,IAAM;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAC3D,KAAK;IACrC2D,cAAc,CAACD,OAAO,CAAC;EACzB;EAEA1C,mBAAmB,CACjB0C,OAAmB,EACnBE,MAA+C,EACzC;IACN,IAAM;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAC7D,KAAK;IACpC6D,aAAa,CAACH,OAAO,EAAEE,MAAM,CAAC;EAChC;EAEA3C,gBAAgB,GAA2B;IACzC,IAAM;MAAE6C;IAAa,CAAC,GAAG,IAAI,CAAC9D,KAAK;IACnC8D,YAAY,CAAC,YAAO,CAAC;EACvB;EAEA5C,UAAU,GAA2B;IACnC,IAAM;MAAE6C;IAAO,CAAC,GAAG,IAAI,CAAC/D,KAAK;IAC7B+D,MAAM,CAAC,YAAO,CAAC;EACjB;EAEA5C,aAAa,GAA2B;IACtC,IAAM;MAAE6C;IAAU,CAAC,GAAG,IAAI,CAAChE,KAAK;IAChCgE,SAAS,CAAC,YAAO,CAAC;EACpB;EAEA5C,cAAc,GAA2B;IACvC,IAAM;MAAE6C;IAAW,CAAC,GAAG,IAAI,CAACjE,KAAK;IACjCiE,UAAU,CAAC,YAAO,CAAC;EACrB;EAEA5C,kBAAkB,GAAS;IACzB,IAAI,CAACyB,QAAQ,CAAC;MAAEhB,gBAAgB,EAAE;IAAM,CAAC,CAAC;EAC5C;EAEAP,sBAAsB,GAAS;IAC7B,IAAI,CAACuB,QAAQ,CAAC;MAAEhB,gBAAgB,EAAE;IAAK,CAAC,CAAC;EAC3C;EAEAR,kBAAkB,CAAC4C,QAAgB,EAAQ;IACzC,IAAM;MAAExC;IAAY,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAClC,IAAI,CAAC8C,QAAQ,CAAC;MAAEhB,gBAAgB,EAAE,KAAK;MAAEF,KAAK,EAAEsC;IAAS,CAAC,CAAC;IAC3D,IAAMC,IAAI,GAAGhF,WAAW,CAACiF,oBAAoB,CAAC1C,WAAW,CAAC;IAC1D,IAAM2C,MAAM,GAAGlF,WAAW,CAACmF,+BAA+B,CAAC5C,WAAW,CAAC;IACvErC,aAAa,CAACgF,MAAM,CAAC;IACrBlF,WAAW,CAACoF,eAAe,CAACJ,IAAI,EAAEE,MAAM,EAAEH,QAAQ,CAAC;EACrD;EAEAxD,eAAe,GAAS;IACtB,IAAM;MAAEgB,WAAW;MAAEO;IAAW,CAAC,GAAG,IAAI,CAACjC,KAAK;IAC9C,IAAMmE,IAAI,GAAGhF,WAAW,CAACiF,oBAAoB,CAAC1C,WAAW,CAAC;IAC1D,IAAM2C,MAAM,GAAGlF,WAAW,CAACmF,+BAA+B,CAAC5C,WAAW,CAAC;IACvE,IAAI2C,MAAM,IAAI,IAAI,EAAE;MAClBzE,GAAG,CAAC4E,KAAK,CAAC,+CAA+C,EAAE9C,WAAW,CAAC;MACvE;IACF;IACA,IAAM+C,WAAW,GAAGtF,WAAW,CAACuF,cAAc,CAC5CP,IAAI,EACJE,MAAM,CACP;IACD,IAAII,WAAW,KAAK,IAAI,EAAE;MACxBxC,UAAU,CAACO,IAAI,CAACpD,UAAU,CAACuF,MAAM,EAAE,IAAI,EAAEF,WAAW,CAAC;IACvD;EACF;EAEAnE,cAAc,GAAkB;IAC9B,OAAO;MACLsB,KAAK,EAAE,YAAY;MACnBgD,KAAK,EAAE,EAAE;MACTC,KAAK,EAAE7F,cAAc,CAAC8F,MAAM,CAACC,IAAI;MACjCC,MAAM,EAAE,IAAI,CAACtE;IACf,CAAC;EACH;EAEAH,eAAe,GAAkB;IAC/B,OAAO;MACLqB,KAAK,EAAE,QAAQ;MACfgD,KAAK,EAAE,EAAE;MACTC,KAAK,EAAE7F,cAAc,CAAC8F,MAAM,CAACG,MAAM;MACnCD,MAAM,EAAE,IAAI,CAACzD;IACf,CAAC;EACH;EAeA2D,MAAM,GAAiB;IACrB,IAAM;MACJC,QAAQ;MACRC,SAAS;MACTC,gBAAgB;MAChB3D,WAAW;MACXtB,iBAAiB;MACjBkF,YAAY;MACZC,QAAQ;MACRC,SAAS;MACTtF,UAAU;MACVC;IACF,CAAC,GAAG,IAAI,CAACH,KAAK;IACd,IAAM;MAAE6C,GAAG,EAAE4C;IAAM,CAAC,GAAG/D,WAAW;IAClC,IAAM;MAAEI,gBAAgB;MAAEF;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAE9C,oBACE;MACE,SAAS,EAAE7C,UAAU,CAAC,wBAAwB,EAAEsG,SAAS,CAAE;MAC3D,cAAc,EAAE,IAAI,CAACzE,WAAY;MACjC,aAAa,EAAE,IAAI,CAACC;IAAW,GAE9BuE,QAAQ,eACT,oBAAC,cAAc;MACb,YAAY,EAAEG,YAAa;MAC3B,QAAQ,EAAEC,QAAS;MACnB,SAAS,EAAEC;IAAU,EACrB,EACDC,KAAK,IAAI,IAAI,iBACZ5G,QAAQ,CAAC6G,YAAY,eACnB,uDACE,oBAAC,gBAAgB;MACf,WAAW,EAAEhE,WAAY;MACzB,iBAAiB,EAAE,IAAI,CAACiE,kBAAkB,CACxCvF,iBAAiB,EACjBF,UAAU,EACVC,WAAW;IACX,EACF,EACDA,WAAW,iBACV,oBAAC,YAAY;MACX,OAAO,EAAE2B,gBAAiB;MAC1B,KAAK,EAAEF,KAAM;MACb,QAAQ,EAAC,OAAO;MAChB,QAAQ,EAAE,IAAI,CAACP,kBAAmB;MAClC,QAAQ,EAAE,IAAI,CAACC;IAAmB,EAErC,EACA+D,gBAAgB,IAAI,IAAI,iBACvB,oBAAC,OAAO;MACN,WAAW;MACX,OAAO,EAAE;QACPO,SAAS,EAAE;MACb,CAAE;MACF,eAAe,EAAC;IAAkB,GAEjCP,gBAAgB,EAAE,CAEtB,CACA,EACHI,KAAK,CAACI,OAAO,CAAC,CAAC,CAAC,CAAC;IAAA,CAClB,CACC;EAEV;AACF;AAAC,gBAjTK/F,KAAK,kBACa;EACpBsF,SAAS,EAAE,EAAE;EACbnC,KAAK,EAAE,MAAY6C,SAAS;EAC5B5C,YAAY,EAAE,MAAY4C,SAAS;EACnC3C,iBAAiB,EAAE,MAAY2C,SAAS;EACxCxC,OAAO,EAAE,MAAYwC,SAAS;EAC9BvC,MAAM,EAAE,MAAYuC,SAAS;EAC7BtC,MAAM,EAAE,MAAYsC,SAAS;EAC7BrC,QAAQ,EAAE,MAAYqC,SAAS;EAC/BnC,cAAc,EAAE,MAAYmC,SAAS;EACrCjC,aAAa,EAAE,MAAYiC,SAAS;EACpChC,YAAY,EAAE,MAAYgC,SAAS;EACnC/B,MAAM,EAAE,MAAY+B,SAAS;EAC7B9B,SAAS,EAAE,MAAY8B,SAAS;EAChC7B,UAAU,EAAE,MAAY6B,SAAS;EACjCT,gBAAgB,EAAE,IAAI;EACtBjF,iBAAiB,EAAE,EAAE;EACrBkF,YAAY,EAAE,IAAI;EAClBE,SAAS,EAAE,KAAK;EAChBD,QAAQ,EAAE,IAAI;EACdrF,UAAU,EAAE,KAAK;EACjBC,WAAW,EAAE;AACf,CAAC;AA4RH,eAAeL,KAAK"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import { ContextActions } from '@deephaven/components';
|
|
5
|
-
|
|
6
4
|
class PanelContextMenu extends PureComponent {
|
|
7
5
|
constructor(props) {
|
|
8
6
|
super(props);
|
|
@@ -10,69 +8,58 @@ class PanelContextMenu extends PureComponent {
|
|
|
10
8
|
this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);
|
|
11
9
|
this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);
|
|
12
10
|
}
|
|
13
|
-
|
|
14
11
|
getAllTabs() {
|
|
15
12
|
var _glContainer$tab$head, _glContainer$tab, _glContainer$tab$head2;
|
|
16
|
-
|
|
17
13
|
// return a clone of the tabs array, or returns empty array if null
|
|
18
14
|
var {
|
|
19
15
|
glContainer
|
|
20
16
|
} = this.props;
|
|
21
17
|
return [...((_glContainer$tab$head = glContainer === null || glContainer === void 0 ? void 0 : (_glContainer$tab = glContainer.tab) === null || _glContainer$tab === void 0 ? void 0 : (_glContainer$tab$head2 = _glContainer$tab.header) === null || _glContainer$tab$head2 === void 0 ? void 0 : _glContainer$tab$head2.tabs) !== null && _glContainer$tab$head !== void 0 ? _glContainer$tab$head : [])];
|
|
22
18
|
}
|
|
23
|
-
|
|
24
19
|
handleCloseTab() {
|
|
25
20
|
var {
|
|
26
21
|
glContainer
|
|
27
22
|
} = this.props;
|
|
28
23
|
glContainer.close();
|
|
29
24
|
}
|
|
30
|
-
|
|
31
25
|
handleCloseTabsAll() {
|
|
32
|
-
var tabs = this.getAllTabs();
|
|
33
|
-
// false when attempting to close tabs that you can't
|
|
26
|
+
var tabs = this.getAllTabs();
|
|
34
27
|
|
|
28
|
+
// No need to check if isClosable, golden-layout returns
|
|
29
|
+
// false when attempting to close tabs that you can't
|
|
35
30
|
tabs.forEach(tab => {
|
|
36
31
|
var _container;
|
|
37
|
-
|
|
38
32
|
return (_container = (tab === null || tab === void 0 ? void 0 : tab.contentItem).container) === null || _container === void 0 ? void 0 : _container.close();
|
|
39
33
|
});
|
|
40
34
|
}
|
|
41
|
-
|
|
42
35
|
handleCloseTabsRight() {
|
|
43
36
|
var {
|
|
44
37
|
glContainer
|
|
45
38
|
} = this.props;
|
|
46
39
|
var tabs = this.getAllTabs();
|
|
47
|
-
|
|
48
40
|
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
49
41
|
var _tabs$i$contentItem, _tabs$i$contentItem$c, _glContainer$tab2, _glContainer$tab2$con, _glContainer$tab2$con2, _container2, _tabs$i;
|
|
50
|
-
|
|
51
42
|
if (((_tabs$i$contentItem = tabs[i].contentItem) === null || _tabs$i$contentItem === void 0 ? void 0 : (_tabs$i$contentItem$c = _tabs$i$contentItem.config) === null || _tabs$i$contentItem$c === void 0 ? void 0 : _tabs$i$contentItem$c.id) === ((_glContainer$tab2 = glContainer.tab) === null || _glContainer$tab2 === void 0 ? void 0 : (_glContainer$tab2$con = _glContainer$tab2.contentItem) === null || _glContainer$tab2$con === void 0 ? void 0 : (_glContainer$tab2$con2 = _glContainer$tab2$con.config) === null || _glContainer$tab2$con2 === void 0 ? void 0 : _glContainer$tab2$con2.id)) {
|
|
52
43
|
break; // end when we get back to current id
|
|
53
|
-
}
|
|
54
|
-
|
|
44
|
+
}
|
|
55
45
|
|
|
46
|
+
// eslint-disable-next-line no-unused-expressions
|
|
56
47
|
(_container2 = ((_tabs$i = tabs[i]) === null || _tabs$i === void 0 ? void 0 : _tabs$i.contentItem).container) === null || _container2 === void 0 ? void 0 : _container2.close();
|
|
57
48
|
}
|
|
58
49
|
}
|
|
59
|
-
|
|
60
50
|
canCloseTabsRight() {
|
|
61
51
|
var {
|
|
62
52
|
glContainer
|
|
63
53
|
} = this.props;
|
|
64
54
|
var tabs = this.getAllTabs();
|
|
65
55
|
var disabled = true;
|
|
66
|
-
|
|
67
56
|
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
68
57
|
var _tabs$i$contentItem2, _tabs$i$contentItem2$, _glContainer$tab3, _glContainer$tab3$con, _glContainer$tab3$con2, _tabs$i2, _tabs$i2$contentItem, _tabs$i2$contentItem$;
|
|
69
|
-
|
|
70
58
|
if (((_tabs$i$contentItem2 = tabs[i].contentItem) === null || _tabs$i$contentItem2 === void 0 ? void 0 : (_tabs$i$contentItem2$ = _tabs$i$contentItem2.config) === null || _tabs$i$contentItem2$ === void 0 ? void 0 : _tabs$i$contentItem2$.id) === ((_glContainer$tab3 = glContainer.tab) === null || _glContainer$tab3 === void 0 ? void 0 : (_glContainer$tab3$con = _glContainer$tab3.contentItem) === null || _glContainer$tab3$con === void 0 ? void 0 : (_glContainer$tab3$con2 = _glContainer$tab3$con.config) === null || _glContainer$tab3$con2 === void 0 ? void 0 : _glContainer$tab3$con2.id)) {
|
|
71
59
|
break; // end when we get back to current id
|
|
72
60
|
}
|
|
73
61
|
|
|
74
62
|
var closable = Boolean((_tabs$i2 = tabs[i]) === null || _tabs$i2 === void 0 ? void 0 : (_tabs$i2$contentItem = _tabs$i2.contentItem) === null || _tabs$i2$contentItem === void 0 ? void 0 : (_tabs$i2$contentItem$ = _tabs$i2$contentItem.config) === null || _tabs$i2$contentItem$ === void 0 ? void 0 : _tabs$i2$contentItem$.isClosable);
|
|
75
|
-
|
|
76
63
|
if (closable) {
|
|
77
64
|
disabled = false;
|
|
78
65
|
break; // end if we find a closeable tab
|
|
@@ -81,28 +68,21 @@ class PanelContextMenu extends PureComponent {
|
|
|
81
68
|
|
|
82
69
|
return disabled;
|
|
83
70
|
}
|
|
84
|
-
|
|
85
71
|
canCloseAny() {
|
|
86
72
|
var tabs = this.getAllTabs();
|
|
87
73
|
var disabled = true;
|
|
88
|
-
|
|
89
74
|
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
90
75
|
var _tabs$i3, _tabs$i3$contentItem, _tabs$i3$contentItem$;
|
|
91
|
-
|
|
92
76
|
var closable = Boolean((_tabs$i3 = tabs[i]) === null || _tabs$i3 === void 0 ? void 0 : (_tabs$i3$contentItem = _tabs$i3.contentItem) === null || _tabs$i3$contentItem === void 0 ? void 0 : (_tabs$i3$contentItem$ = _tabs$i3$contentItem.config) === null || _tabs$i3$contentItem$ === void 0 ? void 0 : _tabs$i3$contentItem$.isClosable);
|
|
93
|
-
|
|
94
77
|
if (closable) {
|
|
95
78
|
disabled = false;
|
|
96
79
|
break;
|
|
97
80
|
}
|
|
98
81
|
}
|
|
99
|
-
|
|
100
82
|
return disabled;
|
|
101
83
|
}
|
|
102
|
-
|
|
103
84
|
render() {
|
|
104
85
|
var _glContainer$tab4, _glContainer$tab4$con, _glContainer$tab4$con2;
|
|
105
|
-
|
|
106
86
|
var {
|
|
107
87
|
additionalActions,
|
|
108
88
|
glContainer
|
|
@@ -115,8 +95,9 @@ class PanelContextMenu extends PureComponent {
|
|
|
115
95
|
group: ContextActions.groups.low,
|
|
116
96
|
action: this.handleCloseTab,
|
|
117
97
|
disabled: closable === undefined || !closable
|
|
118
|
-
});
|
|
98
|
+
});
|
|
119
99
|
|
|
100
|
+
// pushed as function so the disable check happens on run
|
|
120
101
|
contextActions.push(() => ({
|
|
121
102
|
title: 'Close Tabs to Right',
|
|
122
103
|
order: 20,
|
|
@@ -135,12 +116,9 @@ class PanelContextMenu extends PureComponent {
|
|
|
135
116
|
actions: contextActions
|
|
136
117
|
});
|
|
137
118
|
}
|
|
138
|
-
|
|
139
119
|
}
|
|
140
|
-
|
|
141
120
|
_defineProperty(PanelContextMenu, "defaultProps", {
|
|
142
121
|
additionalActions: []
|
|
143
122
|
});
|
|
144
|
-
|
|
145
123
|
export default PanelContextMenu;
|
|
146
124
|
//# sourceMappingURL=PanelContextMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","glContainer","tab","header","tabs","close","forEach","contentItem","container","i","length","config","id","canCloseTabsRight","disabled","closable","Boolean","isClosable","canCloseAny","render","additionalActions","contextActions","push","title","order","group","groups","low","action","undefined"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport type { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(tab =>\n ((tab?.contentItem as unknown) as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n ((tabs[i]?.contentItem as unknown) as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","glContainer","tab","header","tabs","close","forEach","contentItem","container","i","length","config","id","canCloseTabsRight","disabled","closable","Boolean","isClosable","canCloseAny","render","additionalActions","contextActions","push","title","order","group","groups","low","action","undefined"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport type { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(tab =>\n ((tab?.contentItem as unknown) as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n ((tabs[i]?.contentItem as unknown) as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"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"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import React, { PureComponent } from 'react';
|
|
4
3
|
import classNames from 'classnames';
|
|
5
4
|
import { Button, Popper } from '@deephaven/components';
|
|
6
5
|
export default class RenameDialog extends PureComponent {
|
|
7
6
|
constructor(props) {
|
|
8
7
|
super(props);
|
|
9
|
-
|
|
10
8
|
_defineProperty(this, "renameInputRef", void 0);
|
|
11
|
-
|
|
12
9
|
this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);
|
|
13
10
|
this.handleRenameInputChange = this.handleRenameInputChange.bind(this);
|
|
14
11
|
this.handleRenameCancel = this.handleRenameCancel.bind(this);
|
|
@@ -22,23 +19,21 @@ export default class RenameDialog extends PureComponent {
|
|
|
22
19
|
valueWasValidated: false
|
|
23
20
|
};
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
componentDidUpdate(prevProps) {
|
|
27
23
|
var {
|
|
28
24
|
isShown: prevIsShown
|
|
29
25
|
} = prevProps;
|
|
30
26
|
var {
|
|
31
27
|
isShown
|
|
32
|
-
} = this.props;
|
|
28
|
+
} = this.props;
|
|
29
|
+
// Reset the state on dialog shown and not on the `value` prop change
|
|
33
30
|
// so the input keeps the internal value while the dialog is open.
|
|
34
31
|
// Useful in case the `value` prop update is triggered externally
|
|
35
32
|
// i.e. by someone else renaming the same shared dashboard
|
|
36
|
-
|
|
37
33
|
if (isShown && !prevIsShown) {
|
|
38
34
|
this.resetState();
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
|
-
|
|
42
37
|
resetState() {
|
|
43
38
|
var {
|
|
44
39
|
value
|
|
@@ -48,26 +43,21 @@ export default class RenameDialog extends PureComponent {
|
|
|
48
43
|
valueWasValidated: false
|
|
49
44
|
});
|
|
50
45
|
}
|
|
51
|
-
|
|
52
46
|
handleRenameDialogOpened() {
|
|
53
47
|
var _this$renameInputRef, _this$renameInputRef$;
|
|
54
|
-
|
|
55
48
|
(_this$renameInputRef = this.renameInputRef) === null || _this$renameInputRef === void 0 ? void 0 : (_this$renameInputRef$ = _this$renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? void 0 : _this$renameInputRef$.focus();
|
|
56
49
|
}
|
|
57
|
-
|
|
58
50
|
handleRenameInputChange(event) {
|
|
59
51
|
this.setState({
|
|
60
52
|
value: event.target.value
|
|
61
53
|
});
|
|
62
54
|
}
|
|
63
|
-
|
|
64
55
|
handleRenameCancel() {
|
|
65
56
|
var {
|
|
66
57
|
onCancel
|
|
67
58
|
} = this.props;
|
|
68
59
|
onCancel();
|
|
69
60
|
}
|
|
70
|
-
|
|
71
61
|
handleRenameSubmit(event) {
|
|
72
62
|
event.stopPropagation();
|
|
73
63
|
event.preventDefault();
|
|
@@ -75,7 +65,6 @@ export default class RenameDialog extends PureComponent {
|
|
|
75
65
|
value
|
|
76
66
|
} = this.state;
|
|
77
67
|
var newTitle = value === null || value === void 0 ? void 0 : value.trim();
|
|
78
|
-
|
|
79
68
|
if (newTitle !== undefined && newTitle !== '') {
|
|
80
69
|
var {
|
|
81
70
|
onSubmit
|
|
@@ -88,7 +77,6 @@ export default class RenameDialog extends PureComponent {
|
|
|
88
77
|
});
|
|
89
78
|
}
|
|
90
79
|
}
|
|
91
|
-
|
|
92
80
|
renderRenameDialog() {
|
|
93
81
|
var {
|
|
94
82
|
isShared,
|
|
@@ -140,7 +128,6 @@ export default class RenameDialog extends PureComponent {
|
|
|
140
128
|
type: "submit"
|
|
141
129
|
}, "Rename")));
|
|
142
130
|
}
|
|
143
|
-
|
|
144
131
|
render() {
|
|
145
132
|
var {
|
|
146
133
|
isShown,
|
|
@@ -162,9 +149,7 @@ export default class RenameDialog extends PureComponent {
|
|
|
162
149
|
closeOnBlur: true
|
|
163
150
|
}, this.renderRenameDialog());
|
|
164
151
|
}
|
|
165
|
-
|
|
166
152
|
}
|
|
167
|
-
|
|
168
153
|
_defineProperty(RenameDialog, "defaultProps", {
|
|
169
154
|
isShared: false,
|
|
170
155
|
isOwner: true,
|