@deephaven/dashboard 0.109.1-beta.7 → 0.109.1-beta.9
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/BasePanel.d.ts +37 -0
- package/dist/BasePanel.d.ts.map +1 -0
- package/dist/BasePanel.js +304 -0
- package/dist/BasePanel.js.map +1 -0
- package/dist/Panel.css +5 -0
- package/dist/Panel.css.map +1 -0
- package/dist/PanelContextMenu.d.ts +30 -0
- package/dist/PanelContextMenu.d.ts.map +1 -0
- package/dist/PanelContextMenu.js +160 -0
- package/dist/PanelContextMenu.js.map +1 -0
- package/dist/RenameDialog.d.ts +34 -0
- package/dist/RenameDialog.d.ts.map +1 -0
- package/dist/RenameDialog.js +167 -0
- package/dist/RenameDialog.js.map +1 -0
- package/dist/TabEvent.d.ts +6 -0
- package/dist/TabEvent.d.ts.map +1 -0
- package/dist/TabEvent.js +6 -0
- package/dist/TabEvent.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +12 -10
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type FocusEventHandler, type ReactNode } from 'react';
|
|
2
|
+
import { type ResolvableContextAction } from '@deephaven/components';
|
|
3
|
+
import type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';
|
|
4
|
+
import { type PanelComponent } from './DashboardPlugin';
|
|
5
|
+
import './Panel.scss';
|
|
6
|
+
export type BasePanelProps = {
|
|
7
|
+
/**
|
|
8
|
+
* Reference to the component panel.
|
|
9
|
+
* Will wait until it is set before emitting mount/unmount events.
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
componentPanel?: PanelComponent;
|
|
13
|
+
children: ReactNode;
|
|
14
|
+
glContainer: Container;
|
|
15
|
+
glEventHub: EventEmitter;
|
|
16
|
+
className?: string;
|
|
17
|
+
onFocus?: FocusEventHandler<HTMLDivElement>;
|
|
18
|
+
onBlur?: FocusEventHandler<HTMLDivElement>;
|
|
19
|
+
onTab?: (tab: Tab) => void;
|
|
20
|
+
onTabClicked?: (e: MouseEvent) => void;
|
|
21
|
+
onHide?: (...args: unknown[]) => void;
|
|
22
|
+
onResize?: (...args: unknown[]) => void;
|
|
23
|
+
onBeforeShow?: (...args: unknown[]) => void;
|
|
24
|
+
onShow?: (...args: unknown[]) => void;
|
|
25
|
+
onTabBlur?: (...args: unknown[]) => void;
|
|
26
|
+
onTabFocus?: (...args: unknown[]) => void;
|
|
27
|
+
renderTabTooltip?: () => ReactNode;
|
|
28
|
+
additionalActions?: ResolvableContextAction[];
|
|
29
|
+
errorMessage?: string;
|
|
30
|
+
isLoading?: boolean;
|
|
31
|
+
isLoaded?: boolean;
|
|
32
|
+
isClonable?: boolean;
|
|
33
|
+
isRenamable?: boolean;
|
|
34
|
+
};
|
|
35
|
+
declare const XBasePanel: import("@deephaven/components").XComponentType<BasePanelProps>;
|
|
36
|
+
export default XBasePanel;
|
|
37
|
+
//# sourceMappingURL=BasePanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePanel.d.ts","sourceRoot":"","sources":["../src/BasePanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,iBAAiB,EAGtB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAKL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAEZ,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,OAAO,cAAc,CAAC;AAItB,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,SAAS,CAAC;IACnC,iBAAiB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAyRF,QAAA,MAAM,UAAU,gEAA8B,CAAC;AAE/C,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import React, { PureComponent } from 'react';
|
|
5
|
+
import ReactDOM from 'react-dom';
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import memoize from 'memoize-one';
|
|
8
|
+
import { ContextActions, createXComponent, LoadingOverlay, Tooltip } from '@deephaven/components';
|
|
9
|
+
import { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';
|
|
10
|
+
import Log from '@deephaven/log';
|
|
11
|
+
import LayoutUtils from "./layout/LayoutUtils.js";
|
|
12
|
+
import PanelEvent from "./PanelEvent.js";
|
|
13
|
+
import PanelContextMenu from "./PanelContextMenu.js";
|
|
14
|
+
import RenameDialog from "./RenameDialog.js";
|
|
15
|
+
import TabEvent from "./TabEvent.js";
|
|
16
|
+
import "./Panel.css";
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
var log = Log.module('Panel');
|
|
21
|
+
/**
|
|
22
|
+
* Generic panel component that emits mount/unmount/focus events.
|
|
23
|
+
* Also wires up some triggers for common events:
|
|
24
|
+
* Focus, Resize, Show
|
|
25
|
+
*/
|
|
26
|
+
class BasePanel extends PureComponent {
|
|
27
|
+
constructor(props) {
|
|
28
|
+
super(props);
|
|
29
|
+
_defineProperty(this, "ref", void 0);
|
|
30
|
+
_defineProperty(this, "getAdditionalActions", memoize((actions, isClonable, isRenamable) => {
|
|
31
|
+
var additionalActions = [];
|
|
32
|
+
if (isClonable) {
|
|
33
|
+
additionalActions.push(this.getCloneAction());
|
|
34
|
+
}
|
|
35
|
+
if (isRenamable) {
|
|
36
|
+
additionalActions.push(this.getRenameAction());
|
|
37
|
+
}
|
|
38
|
+
return [...additionalActions, ...actions];
|
|
39
|
+
}));
|
|
40
|
+
this.handleCopyPanel = this.handleCopyPanel.bind(this);
|
|
41
|
+
this.handleFocus = this.handleFocus.bind(this);
|
|
42
|
+
this.handleBlur = this.handleBlur.bind(this);
|
|
43
|
+
this.handleHide = this.handleHide.bind(this);
|
|
44
|
+
this.handleResize = this.handleResize.bind(this);
|
|
45
|
+
this.handleBeforeShow = this.handleBeforeShow.bind(this);
|
|
46
|
+
this.handleShow = this.handleShow.bind(this);
|
|
47
|
+
this.handleTabBlur = this.handleTabBlur.bind(this);
|
|
48
|
+
this.handleTabFocus = this.handleTabFocus.bind(this);
|
|
49
|
+
this.handleRenameCancel = this.handleRenameCancel.bind(this);
|
|
50
|
+
this.handleRenameSubmit = this.handleRenameSubmit.bind(this);
|
|
51
|
+
this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);
|
|
52
|
+
this.handleTabClicked = this.handleTabClicked.bind(this);
|
|
53
|
+
this.handleTab = this.handleTab.bind(this);
|
|
54
|
+
this.ref = /*#__PURE__*/React.createRef();
|
|
55
|
+
var {
|
|
56
|
+
glContainer
|
|
57
|
+
} = this.props;
|
|
58
|
+
this.state = {
|
|
59
|
+
title: LayoutUtils.getTitleFromContainer(glContainer),
|
|
60
|
+
showRenameDialog: false,
|
|
61
|
+
isWithinPanel: true
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
componentDidMount() {
|
|
65
|
+
var _this$ref$current, _this$ref$current$par;
|
|
66
|
+
var {
|
|
67
|
+
componentPanel,
|
|
68
|
+
glContainer,
|
|
69
|
+
glEventHub
|
|
70
|
+
} = this.props;
|
|
71
|
+
glContainer.on('resize', this.handleResize);
|
|
72
|
+
glContainer.on('show', this.handleBeforeShow);
|
|
73
|
+
glContainer.on('shown', this.handleShow);
|
|
74
|
+
glContainer.on('hide', this.handleHide);
|
|
75
|
+
glContainer.on('tab', this.handleTab);
|
|
76
|
+
glContainer.on('tabClicked', this.handleTabClicked);
|
|
77
|
+
glEventHub.on(TabEvent.focus, this.handleTabFocus);
|
|
78
|
+
glEventHub.on(TabEvent.blur, this.handleTabBlur);
|
|
79
|
+
glEventHub.emit(PanelEvent.MOUNT, componentPanel !== null && componentPanel !== void 0 ? componentPanel : this);
|
|
80
|
+
this.setState({
|
|
81
|
+
isWithinPanel: ((_this$ref$current = this.ref.current) === null || _this$ref$current === void 0 ? void 0 : (_this$ref$current$par = _this$ref$current.parentElement) === null || _this$ref$current$par === void 0 ? void 0 : _this$ref$current$par.closest('.dh-panel')) != null
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
componentWillUnmount() {
|
|
85
|
+
var {
|
|
86
|
+
componentPanel,
|
|
87
|
+
glContainer,
|
|
88
|
+
glEventHub
|
|
89
|
+
} = this.props;
|
|
90
|
+
glContainer.off('resize', this.handleResize);
|
|
91
|
+
glContainer.off('show', this.handleBeforeShow);
|
|
92
|
+
glContainer.off('shown', this.handleShow);
|
|
93
|
+
glContainer.off('hide', this.handleHide);
|
|
94
|
+
glContainer.off('tab', this.handleTab);
|
|
95
|
+
glContainer.off('tabClicked', this.handleTabClicked);
|
|
96
|
+
glEventHub.off(TabEvent.focus, this.handleTabFocus);
|
|
97
|
+
glEventHub.off(TabEvent.blur, this.handleTabBlur);
|
|
98
|
+
glEventHub.emit(PanelEvent.UNMOUNT, componentPanel !== null && componentPanel !== void 0 ? componentPanel : this);
|
|
99
|
+
}
|
|
100
|
+
handleTab(tab) {
|
|
101
|
+
if (tab != null) {
|
|
102
|
+
this.setState({
|
|
103
|
+
title: LayoutUtils.getTitleFromTab(tab)
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// render after move can happen before tab event, glTab could be null
|
|
107
|
+
// when tab event is emitted, force a render update
|
|
108
|
+
this.forceUpdate();
|
|
109
|
+
var {
|
|
110
|
+
onTab
|
|
111
|
+
} = this.props;
|
|
112
|
+
onTab === null || onTab === void 0 ? void 0 : onTab(tab);
|
|
113
|
+
}
|
|
114
|
+
handleTabClicked(e) {
|
|
115
|
+
var {
|
|
116
|
+
onTabClicked
|
|
117
|
+
} = this.props;
|
|
118
|
+
onTabClicked === null || onTabClicked === void 0 ? void 0 : onTabClicked(e);
|
|
119
|
+
}
|
|
120
|
+
handleFocus(event) {
|
|
121
|
+
var {
|
|
122
|
+
componentPanel,
|
|
123
|
+
glEventHub
|
|
124
|
+
} = this.props;
|
|
125
|
+
glEventHub.emit(PanelEvent.FOCUS, componentPanel !== null && componentPanel !== void 0 ? componentPanel : this);
|
|
126
|
+
var {
|
|
127
|
+
onFocus
|
|
128
|
+
} = this.props;
|
|
129
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
130
|
+
}
|
|
131
|
+
handleBlur(event) {
|
|
132
|
+
var {
|
|
133
|
+
onBlur
|
|
134
|
+
} = this.props;
|
|
135
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
136
|
+
}
|
|
137
|
+
handleHide() {
|
|
138
|
+
var {
|
|
139
|
+
onHide
|
|
140
|
+
} = this.props;
|
|
141
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
142
|
+
args[_key] = arguments[_key];
|
|
143
|
+
}
|
|
144
|
+
onHide === null || onHide === void 0 ? void 0 : onHide(...args);
|
|
145
|
+
}
|
|
146
|
+
handleResize() {
|
|
147
|
+
var {
|
|
148
|
+
onResize
|
|
149
|
+
} = this.props;
|
|
150
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
151
|
+
args[_key2] = arguments[_key2];
|
|
152
|
+
}
|
|
153
|
+
onResize === null || onResize === void 0 ? void 0 : onResize(...args);
|
|
154
|
+
}
|
|
155
|
+
handleBeforeShow() {
|
|
156
|
+
var {
|
|
157
|
+
onBeforeShow
|
|
158
|
+
} = this.props;
|
|
159
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
160
|
+
args[_key3] = arguments[_key3];
|
|
161
|
+
}
|
|
162
|
+
onBeforeShow === null || onBeforeShow === void 0 ? void 0 : onBeforeShow(...args);
|
|
163
|
+
}
|
|
164
|
+
handleShow() {
|
|
165
|
+
var {
|
|
166
|
+
onShow
|
|
167
|
+
} = this.props;
|
|
168
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
169
|
+
args[_key4] = arguments[_key4];
|
|
170
|
+
}
|
|
171
|
+
onShow === null || onShow === void 0 ? void 0 : onShow(...args);
|
|
172
|
+
}
|
|
173
|
+
handleTabBlur() {
|
|
174
|
+
var {
|
|
175
|
+
onTabBlur
|
|
176
|
+
} = this.props;
|
|
177
|
+
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
178
|
+
args[_key5] = arguments[_key5];
|
|
179
|
+
}
|
|
180
|
+
onTabBlur === null || onTabBlur === void 0 ? void 0 : onTabBlur(...args);
|
|
181
|
+
}
|
|
182
|
+
handleTabFocus() {
|
|
183
|
+
var {
|
|
184
|
+
onTabFocus
|
|
185
|
+
} = this.props;
|
|
186
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
187
|
+
args[_key6] = arguments[_key6];
|
|
188
|
+
}
|
|
189
|
+
onTabFocus === null || onTabFocus === void 0 ? void 0 : onTabFocus(...args);
|
|
190
|
+
}
|
|
191
|
+
handleRenameCancel() {
|
|
192
|
+
this.setState({
|
|
193
|
+
showRenameDialog: false
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
handleShowRenameDialog() {
|
|
197
|
+
this.setState({
|
|
198
|
+
showRenameDialog: true
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
handleRenameSubmit(newTitle) {
|
|
202
|
+
var {
|
|
203
|
+
glContainer
|
|
204
|
+
} = this.props;
|
|
205
|
+
this.setState({
|
|
206
|
+
showRenameDialog: false,
|
|
207
|
+
title: newTitle
|
|
208
|
+
});
|
|
209
|
+
var root = LayoutUtils.getRootFromContainer(glContainer);
|
|
210
|
+
var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
|
|
211
|
+
assertNotNull(config);
|
|
212
|
+
LayoutUtils.renameComponent(root, config, newTitle);
|
|
213
|
+
}
|
|
214
|
+
handleCopyPanel() {
|
|
215
|
+
var {
|
|
216
|
+
glContainer,
|
|
217
|
+
glEventHub
|
|
218
|
+
} = this.props;
|
|
219
|
+
var root = LayoutUtils.getRootFromContainer(glContainer);
|
|
220
|
+
var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
|
|
221
|
+
if (config == null) {
|
|
222
|
+
log.error('Could not get component config from container', glContainer);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
var cloneConfig = LayoutUtils.cloneComponent(root, config);
|
|
226
|
+
if (cloneConfig !== null) {
|
|
227
|
+
glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
getCloneAction() {
|
|
231
|
+
return {
|
|
232
|
+
title: 'Copy Panel',
|
|
233
|
+
order: 10,
|
|
234
|
+
group: ContextActions.groups.high,
|
|
235
|
+
action: this.handleCopyPanel
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
getRenameAction() {
|
|
239
|
+
return {
|
|
240
|
+
title: 'Rename',
|
|
241
|
+
order: 10,
|
|
242
|
+
group: ContextActions.groups.medium,
|
|
243
|
+
action: this.handleShowRenameDialog
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
render() {
|
|
247
|
+
var {
|
|
248
|
+
children,
|
|
249
|
+
className,
|
|
250
|
+
renderTabTooltip,
|
|
251
|
+
glContainer,
|
|
252
|
+
glEventHub,
|
|
253
|
+
additionalActions = EMPTY_ARRAY,
|
|
254
|
+
errorMessage,
|
|
255
|
+
isLoaded = true,
|
|
256
|
+
isLoading = false,
|
|
257
|
+
isClonable = false,
|
|
258
|
+
isRenamable = false
|
|
259
|
+
} = this.props;
|
|
260
|
+
var {
|
|
261
|
+
tab: glTab
|
|
262
|
+
} = glContainer;
|
|
263
|
+
var {
|
|
264
|
+
showRenameDialog,
|
|
265
|
+
title,
|
|
266
|
+
isWithinPanel
|
|
267
|
+
} = this.state;
|
|
268
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
269
|
+
className: classNames('h-100 w-100 dh-panel', className),
|
|
270
|
+
onFocusCapture: this.handleFocus,
|
|
271
|
+
onBlurCapture: this.handleBlur,
|
|
272
|
+
ref: this.ref,
|
|
273
|
+
children: [children, /*#__PURE__*/_jsx(LoadingOverlay, {
|
|
274
|
+
errorMessage: errorMessage,
|
|
275
|
+
isLoaded: isLoaded,
|
|
276
|
+
isLoading: isLoading
|
|
277
|
+
}), !isWithinPanel && glTab != null && /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/_jsxs(_Fragment, {
|
|
278
|
+
children: [/*#__PURE__*/_jsx(PanelContextMenu, {
|
|
279
|
+
glContainer: glContainer,
|
|
280
|
+
glEventHub: glEventHub,
|
|
281
|
+
additionalActions: this.getAdditionalActions(additionalActions, isClonable, isRenamable)
|
|
282
|
+
}), isRenamable && /*#__PURE__*/_jsx(RenameDialog, {
|
|
283
|
+
isShown: showRenameDialog,
|
|
284
|
+
value: title,
|
|
285
|
+
itemType: "Panel",
|
|
286
|
+
onCancel: this.handleRenameCancel,
|
|
287
|
+
onSubmit: this.handleRenameSubmit
|
|
288
|
+
}), renderTabTooltip != null && /*#__PURE__*/_jsx(Tooltip, {
|
|
289
|
+
interactive: true,
|
|
290
|
+
options: {
|
|
291
|
+
placement: 'bottom'
|
|
292
|
+
},
|
|
293
|
+
popperClassName: "panel-tab-popper",
|
|
294
|
+
children: renderTabTooltip()
|
|
295
|
+
})]
|
|
296
|
+
}), glTab.element[0] // tab.element is jquery element, we want a dom element
|
|
297
|
+
)]
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
var XBasePanel = createXComponent(BasePanel);
|
|
303
|
+
export default XBasePanel;
|
|
304
|
+
//# sourceMappingURL=BasePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePanel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","createXComponent","LoadingOverlay","Tooltip","assertNotNull","EMPTY_ARRAY","Log","LayoutUtils","PanelEvent","PanelContextMenu","RenameDialog","TabEvent","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","BasePanel","constructor","props","_defineProperty","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleCopyPanel","bind","handleFocus","handleBlur","handleHide","handleResize","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","ref","createRef","glContainer","state","title","getTitleFromContainer","showRenameDialog","isWithinPanel","componentDidMount","_this$ref$current","_this$ref$current$par","componentPanel","glEventHub","on","focus","blur","emit","MOUNT","setState","current","parentElement","closest","componentWillUnmount","off","UNMOUNT","tab","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","event","FOCUS","onFocus","onBlur","onHide","_len","arguments","length","args","Array","_key","onResize","_len2","_key2","onBeforeShow","_len3","_key3","onShow","_len4","_key4","onTabBlur","_len5","_key5","onTabFocus","_len6","_key6","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","onFocusCapture","onBlurCapture","createPortal","getAdditionalActions","isShown","value","itemType","onCancel","onSubmit","interactive","options","placement","popperClassName","element","XBasePanel"],"sources":["../src/BasePanel.tsx"],"sourcesContent":["import React, {\n type FocusEvent,\n type FocusEventHandler,\n PureComponent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n type ContextAction,\n ContextActions,\n createXComponent,\n LoadingOverlay,\n type ResolvableContextAction,\n Tooltip,\n} from '@deephaven/components';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport LayoutUtils from './layout/LayoutUtils';\nimport { type PanelComponent } from './DashboardPlugin';\nimport PanelEvent from './PanelEvent';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\nimport TabEvent from './TabEvent';\nimport './Panel.scss';\n\nconst log = Log.module('Panel');\n\nexport type BasePanelProps = {\n /**\n * Reference to the component panel.\n * Will wait until it is set before emitting mount/unmount events.\n *\n */\n componentPanel?: PanelComponent;\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?: (e: MouseEvent) => void;\n onHide?: (...args: unknown[]) => void;\n onResize?: (...args: unknown[]) => 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?: ResolvableContextAction[];\n errorMessage?: string;\n isLoading?: boolean;\n isLoaded?: boolean;\n isClonable?: boolean;\n isRenamable?: boolean;\n};\n\ninterface BasePanelState {\n title?: string | null;\n showRenameDialog: boolean;\n isWithinPanel: 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\n */\nclass BasePanel extends PureComponent<BasePanelProps, BasePanelState> {\n constructor(props: BasePanelProps) {\n super(props);\n\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.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 this.ref = React.createRef<HTMLDivElement>();\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n isWithinPanel: true,\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(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel ?? this);\n\n this.setState({\n isWithinPanel:\n this.ref.current?.parentElement?.closest('.dh-panel') != null,\n });\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(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel ?? this);\n }\n\n ref: React.RefObject<HTMLDivElement>;\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(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked?.(e);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel ?? this);\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 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 getAdditionalActions = memoize(\n (\n actions: readonly ResolvableContextAction[],\n isClonable: boolean,\n isRenamable: boolean\n ) => {\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 glEventHub,\n additionalActions = EMPTY_ARRAY,\n errorMessage,\n isLoaded = true,\n isLoading = false,\n isClonable = false,\n isRenamable = false,\n } = this.props;\n\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title, isWithinPanel } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 dh-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n ref={this.ref}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {!isWithinPanel &&\n glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n glEventHub={glEventHub}\n additionalActions={this.getAdditionalActions(\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\nconst XBasePanel = createXComponent(BasePanel);\n\nexport default XBasePanel;\n"],"mappings":"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"}
|
package/dist/Panel.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/Panel.scss"],"names":[],"mappings":"AAAA;EACE","file":"Panel.css","sourcesContent":[".dh-panel {\n position: relative;\n}"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React, { PureComponent, type ReactElement } from 'react';
|
|
2
|
+
import { type ResolvableContextAction } from '@deephaven/components';
|
|
3
|
+
import type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';
|
|
4
|
+
import { type CustomizableWorkspace } from '@deephaven/redux';
|
|
5
|
+
interface PanelContextMenuProps {
|
|
6
|
+
additionalActions: ResolvableContextAction[];
|
|
7
|
+
glContainer: Container;
|
|
8
|
+
glEventHub: EventEmitter;
|
|
9
|
+
workspace: CustomizableWorkspace;
|
|
10
|
+
}
|
|
11
|
+
declare class PanelContextMenu extends PureComponent<PanelContextMenuProps, Record<string, never>> {
|
|
12
|
+
static defaultProps: {
|
|
13
|
+
additionalActions: never[];
|
|
14
|
+
};
|
|
15
|
+
constructor(props: PanelContextMenuProps);
|
|
16
|
+
getAllTabs(): Tab[];
|
|
17
|
+
handleCloseTab(): void;
|
|
18
|
+
handleCloseTabsAll(): void;
|
|
19
|
+
handleCloseTabsRight(): void;
|
|
20
|
+
handleReopenLast(): void;
|
|
21
|
+
canCloseTabsRight(): boolean;
|
|
22
|
+
canCloseAny(): boolean;
|
|
23
|
+
canReopenLast(): boolean;
|
|
24
|
+
render(): ReactElement;
|
|
25
|
+
}
|
|
26
|
+
declare const ConnectedPanelContextMenu: import("react-redux").ConnectedComponent<typeof PanelContextMenu, import("react-redux").Omit<Pick<React.ClassAttributes<PanelContextMenu> & PanelContextMenuProps, "glContainer" | "glEventHub" | "workspace" | keyof React.ClassAttributes<PanelContextMenu>> & Partial<Pick<React.ClassAttributes<PanelContextMenu> & PanelContextMenuProps, "additionalActions">> & Partial<Pick<{
|
|
27
|
+
additionalActions: never[];
|
|
28
|
+
}, never>>, "workspace">>;
|
|
29
|
+
export default ConnectedPanelContextMenu;
|
|
30
|
+
//# sourceMappingURL=PanelContextMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelContextMenu.d.ts","sourceRoot":"","sources":["../src/PanelContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,kBAAkB,CAAC;AAM1B,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAOD,cAAM,gBAAiB,SAAQ,aAAa,CAC1C,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,qBAAqB;IASxC,UAAU,IAAI,GAAG,EAAE;IAMnB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,IAAI;IAU1B,oBAAoB,IAAI,IAAI;IAiB5B,gBAAgB,IAAI,IAAI;IAKxB,iBAAiB,IAAI,OAAO;IAqB5B,WAAW,IAAI,OAAO;IActB,aAAa,IAAI,OAAO;IAYxB,MAAM,IAAI,YAAY;CAwCvB;AAUD,QAAA,MAAM,yBAAyB;;yBAEX,CAAC;AAErB,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import React, { PureComponent } from 'react';
|
|
5
|
+
import { ContextActions } from '@deephaven/components';
|
|
6
|
+
import { getWorkspace, setWorkspace as setWorkspaceAction } from '@deephaven/redux';
|
|
7
|
+
import { connect } from 'react-redux';
|
|
8
|
+
import { LayoutUtils } from "./layout/index.js";
|
|
9
|
+
import { PanelEvent } from "./PanelEvent.js";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
class PanelContextMenu extends PureComponent {
|
|
12
|
+
constructor(props) {
|
|
13
|
+
super(props);
|
|
14
|
+
this.handleCloseTab = this.handleCloseTab.bind(this);
|
|
15
|
+
this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);
|
|
16
|
+
this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);
|
|
17
|
+
this.handleReopenLast = this.handleReopenLast.bind(this);
|
|
18
|
+
}
|
|
19
|
+
getAllTabs() {
|
|
20
|
+
var _glContainer$tab$head, _glContainer$tab, _glContainer$tab$head2;
|
|
21
|
+
// return a clone of the tabs array, or returns empty array if null
|
|
22
|
+
var {
|
|
23
|
+
glContainer
|
|
24
|
+
} = this.props;
|
|
25
|
+
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 : [])];
|
|
26
|
+
}
|
|
27
|
+
handleCloseTab() {
|
|
28
|
+
var {
|
|
29
|
+
glContainer
|
|
30
|
+
} = this.props;
|
|
31
|
+
glContainer.close();
|
|
32
|
+
}
|
|
33
|
+
handleCloseTabsAll() {
|
|
34
|
+
var tabs = this.getAllTabs();
|
|
35
|
+
|
|
36
|
+
// No need to check if isClosable, golden-layout returns
|
|
37
|
+
// false when attempting to close tabs that you can't
|
|
38
|
+
tabs.forEach(tab => {
|
|
39
|
+
var _container;
|
|
40
|
+
return (_container = (tab === null || tab === void 0 ? void 0 : tab.contentItem).container) === null || _container === void 0 ? void 0 : _container.close();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
handleCloseTabsRight() {
|
|
44
|
+
var {
|
|
45
|
+
glContainer
|
|
46
|
+
} = this.props;
|
|
47
|
+
var tabs = this.getAllTabs();
|
|
48
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
49
|
+
var _tabs$i$contentItem, _tabs$i$contentItem$c, _glContainer$tab2, _glContainer$tab2$con, _glContainer$tab2$con2, _container2, _tabs$i;
|
|
50
|
+
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)) {
|
|
51
|
+
break; // end when we get back to current id
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line no-unused-expressions
|
|
55
|
+
(_container2 = ((_tabs$i = tabs[i]) === null || _tabs$i === void 0 ? void 0 : _tabs$i.contentItem).container) === null || _container2 === void 0 ? void 0 : _container2.close();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
handleReopenLast() {
|
|
59
|
+
var {
|
|
60
|
+
glContainer,
|
|
61
|
+
glEventHub
|
|
62
|
+
} = this.props;
|
|
63
|
+
glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);
|
|
64
|
+
}
|
|
65
|
+
canCloseTabsRight() {
|
|
66
|
+
var {
|
|
67
|
+
glContainer
|
|
68
|
+
} = this.props;
|
|
69
|
+
var tabs = this.getAllTabs();
|
|
70
|
+
var disabled = true;
|
|
71
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
72
|
+
var _tabs$i$contentItem2, _tabs$i$contentItem2$, _glContainer$tab3, _glContainer$tab3$con, _glContainer$tab3$con2, _tabs$i2, _tabs$i2$contentItem, _tabs$i2$contentItem$;
|
|
73
|
+
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)) {
|
|
74
|
+
break; // end when we get back to current id
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
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);
|
|
78
|
+
if (closable) {
|
|
79
|
+
disabled = false;
|
|
80
|
+
break; // end if we find a closeable tab
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return disabled;
|
|
85
|
+
}
|
|
86
|
+
canCloseAny() {
|
|
87
|
+
var tabs = this.getAllTabs();
|
|
88
|
+
var disabled = true;
|
|
89
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
90
|
+
var _tabs$i3, _tabs$i3$contentItem, _tabs$i3$contentItem$;
|
|
91
|
+
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);
|
|
92
|
+
if (closable) {
|
|
93
|
+
disabled = false;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return disabled;
|
|
98
|
+
}
|
|
99
|
+
canReopenLast() {
|
|
100
|
+
var _LayoutUtils$getStack, _workspace$data$close;
|
|
101
|
+
var {
|
|
102
|
+
workspace,
|
|
103
|
+
glContainer
|
|
104
|
+
} = this.props;
|
|
105
|
+
var stackId = (_LayoutUtils$getStack = LayoutUtils.getStackForConfig(glContainer.layoutManager.root, glContainer.getConfig())) === null || _LayoutUtils$getStack === void 0 ? void 0 : _LayoutUtils$getStack.config.id;
|
|
106
|
+
return !((_workspace$data$close = workspace.data.closed) !== null && _workspace$data$close !== void 0 && _workspace$data$close.some(panel => panel.parentStackId === stackId));
|
|
107
|
+
}
|
|
108
|
+
render() {
|
|
109
|
+
var _glContainer$tab4, _glContainer$tab4$con, _glContainer$tab4$con2;
|
|
110
|
+
var {
|
|
111
|
+
additionalActions,
|
|
112
|
+
glContainer
|
|
113
|
+
} = this.props;
|
|
114
|
+
var contextActions = [...additionalActions];
|
|
115
|
+
contextActions.push(() => ({
|
|
116
|
+
title: 'Re-open closed panel',
|
|
117
|
+
group: ContextActions.groups.medium + 2004,
|
|
118
|
+
action: this.handleReopenLast,
|
|
119
|
+
disabled: this.canReopenLast()
|
|
120
|
+
}));
|
|
121
|
+
var closable = (_glContainer$tab4 = glContainer.tab) === null || _glContainer$tab4 === void 0 ? void 0 : (_glContainer$tab4$con = _glContainer$tab4.contentItem) === null || _glContainer$tab4$con === void 0 ? void 0 : (_glContainer$tab4$con2 = _glContainer$tab4$con.config) === null || _glContainer$tab4$con2 === void 0 ? void 0 : _glContainer$tab4$con2.isClosable;
|
|
122
|
+
contextActions.push({
|
|
123
|
+
title: 'Close',
|
|
124
|
+
order: 10,
|
|
125
|
+
group: ContextActions.groups.low,
|
|
126
|
+
action: this.handleCloseTab,
|
|
127
|
+
disabled: closable === undefined || !closable
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// pushed as function so the disable check happens on run
|
|
131
|
+
contextActions.push(() => ({
|
|
132
|
+
title: 'Close Tabs to Right',
|
|
133
|
+
order: 20,
|
|
134
|
+
group: ContextActions.groups.low,
|
|
135
|
+
action: this.handleCloseTabsRight,
|
|
136
|
+
disabled: this.canCloseTabsRight()
|
|
137
|
+
}));
|
|
138
|
+
contextActions.push(() => ({
|
|
139
|
+
title: 'Close All',
|
|
140
|
+
order: 30,
|
|
141
|
+
group: ContextActions.groups.low,
|
|
142
|
+
action: this.handleCloseTabsAll,
|
|
143
|
+
disabled: this.canCloseAny()
|
|
144
|
+
}));
|
|
145
|
+
return /*#__PURE__*/_jsx(ContextActions, {
|
|
146
|
+
actions: contextActions
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
_defineProperty(PanelContextMenu, "defaultProps", {
|
|
151
|
+
additionalActions: []
|
|
152
|
+
});
|
|
153
|
+
var mapStateToProps = state => ({
|
|
154
|
+
workspace: getWorkspace(state)
|
|
155
|
+
});
|
|
156
|
+
var ConnectedPanelContextMenu = connect(mapStateToProps, {
|
|
157
|
+
setWorkspace: setWorkspaceAction
|
|
158
|
+
})(PanelContextMenu);
|
|
159
|
+
export default ConnectedPanelContextMenu;
|
|
160
|
+
//# sourceMappingURL=PanelContextMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","getWorkspace","setWorkspace","setWorkspaceAction","connect","LayoutUtils","PanelEvent","jsx","_jsx","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","handleReopenLast","getAllTabs","_glContainer$tab$head","_glContainer$tab","_glContainer$tab$head2","glContainer","tab","header","tabs","close","forEach","_container","contentItem","container","i","length","_tabs$i$contentItem","_tabs$i$contentItem$c","_glContainer$tab2","_glContainer$tab2$con","_glContainer$tab2$con2","_container2","_tabs$i","config","id","glEventHub","emit","REOPEN_LAST","canCloseTabsRight","disabled","_tabs$i$contentItem2","_tabs$i$contentItem2$","_glContainer$tab3","_glContainer$tab3$con","_glContainer$tab3$con2","_tabs$i2","_tabs$i2$contentItem","_tabs$i2$contentItem$","closable","Boolean","isClosable","canCloseAny","_tabs$i3","_tabs$i3$contentItem","_tabs$i3$contentItem$","canReopenLast","_LayoutUtils$getStack","_workspace$data$close","workspace","stackId","getStackForConfig","layoutManager","root","getConfig","data","closed","some","panel","parentStackId","render","_glContainer$tab4","_glContainer$tab4$con","_glContainer$tab4$con2","additionalActions","contextActions","push","title","group","groups","medium","action","order","low","undefined","actions","_defineProperty","mapStateToProps","state","ConnectedPanelContextMenu"],"sources":["../src/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n ContextActions,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport {\n type CustomizableWorkspace,\n type RootState,\n getWorkspace,\n setWorkspace as setWorkspaceAction,\n} from '@deephaven/redux';\nimport { connect } from 'react-redux';\nimport { type ClosedPanel } from './PanelManager';\nimport { LayoutUtils } from './layout';\nimport { PanelEvent } from './PanelEvent';\n\ninterface PanelContextMenuProps {\n additionalActions: ResolvableContextAction[];\n glContainer: Container;\n glEventHub: EventEmitter;\n workspace: CustomizableWorkspace;\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 this.handleReopenLast = this.handleReopenLast.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(\n tab => (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 handleReopenLast(): void {\n const { glContainer, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);\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 canReopenLast(): boolean {\n const { workspace, glContainer } = this.props;\n const stackId = LayoutUtils.getStackForConfig(\n glContainer.layoutManager.root,\n glContainer.getConfig()\n )?.config.id;\n\n return !workspace.data.closed?.some(\n panel => (panel as ClosedPanel).parentStackId === stackId\n );\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions = [...additionalActions];\n\n contextActions.push(() => ({\n title: 'Re-open closed panel',\n group: ContextActions.groups.medium + 2004,\n action: this.handleReopenLast,\n disabled: this.canReopenLast(),\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\nconst mapStateToProps = (\n state: RootState\n): {\n workspace: CustomizableWorkspace;\n} => ({\n workspace: getWorkspace(state),\n});\n\nconst ConnectedPanelContextMenu = connect(mapStateToProps, {\n setWorkspace: setWorkspaceAction,\n})(PanelContextMenu);\n\nexport default ConnectedPanelContextMenu;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ChangeEvent, type FormEvent, PureComponent, type ReactElement, type RefObject } from 'react';
|
|
2
|
+
interface RenameDialogProps {
|
|
3
|
+
isShared: boolean;
|
|
4
|
+
isOwner: boolean;
|
|
5
|
+
isShown: boolean;
|
|
6
|
+
itemType: string;
|
|
7
|
+
onSubmit: (title: string) => void;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
value?: string | null;
|
|
10
|
+
}
|
|
11
|
+
interface RenameDialogState {
|
|
12
|
+
value?: string | null;
|
|
13
|
+
valueWasValidated: boolean;
|
|
14
|
+
}
|
|
15
|
+
export default class RenameDialog extends PureComponent<RenameDialogProps, RenameDialogState> {
|
|
16
|
+
static defaultProps: {
|
|
17
|
+
isShared: boolean;
|
|
18
|
+
isOwner: boolean;
|
|
19
|
+
itemType: string;
|
|
20
|
+
value: string;
|
|
21
|
+
};
|
|
22
|
+
constructor(props: RenameDialogProps);
|
|
23
|
+
componentDidUpdate(prevProps: RenameDialogProps): void;
|
|
24
|
+
renameInputRef: RefObject<HTMLInputElement>;
|
|
25
|
+
resetState(): void;
|
|
26
|
+
handleRenameDialogOpened(): void;
|
|
27
|
+
handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void;
|
|
28
|
+
handleRenameCancel(): void;
|
|
29
|
+
handleRenameSubmit(event: FormEvent<HTMLFormElement>): void;
|
|
30
|
+
renderRenameDialog(): ReactElement;
|
|
31
|
+
render(): ReactElement;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=RenameDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameDialog.d.ts","sourceRoot":"","sources":["../src/RenameDialog.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,UAAU,iBAAiB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa,CACrD,iBAAiB,EACjB,iBAAiB,CAClB;IACC,MAAM,CAAC,YAAY;;;;;MAKjB;gBAEU,KAAK,EAAE,iBAAiB;IAkBpC,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAYtD,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5C,UAAU,IAAI,IAAI;IAKlB,wBAAwB,IAAI,IAAI;IAIhC,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAInE,kBAAkB,IAAI,IAAI;IAK1B,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;IAa3D,kBAAkB,IAAI,YAAY;IAyDlC,MAAM,IAAI,YAAY;CAiBvB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import React, { PureComponent } from 'react';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { Button, Popper } from '@deephaven/components';
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export default class RenameDialog extends PureComponent {
|
|
10
|
+
constructor(props) {
|
|
11
|
+
super(props);
|
|
12
|
+
_defineProperty(this, "renameInputRef", void 0);
|
|
13
|
+
this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);
|
|
14
|
+
this.handleRenameInputChange = this.handleRenameInputChange.bind(this);
|
|
15
|
+
this.handleRenameCancel = this.handleRenameCancel.bind(this);
|
|
16
|
+
this.handleRenameSubmit = this.handleRenameSubmit.bind(this);
|
|
17
|
+
this.renameInputRef = /*#__PURE__*/React.createRef();
|
|
18
|
+
var {
|
|
19
|
+
value
|
|
20
|
+
} = props;
|
|
21
|
+
this.state = {
|
|
22
|
+
value,
|
|
23
|
+
valueWasValidated: false
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
componentDidUpdate(prevProps) {
|
|
27
|
+
var {
|
|
28
|
+
isShown: prevIsShown
|
|
29
|
+
} = prevProps;
|
|
30
|
+
var {
|
|
31
|
+
isShown
|
|
32
|
+
} = this.props;
|
|
33
|
+
// Reset the state on dialog shown and not on the `value` prop change
|
|
34
|
+
// so the input keeps the internal value while the dialog is open.
|
|
35
|
+
// Useful in case the `value` prop update is triggered externally
|
|
36
|
+
// i.e. by someone else renaming the same shared dashboard
|
|
37
|
+
if (isShown && !prevIsShown) {
|
|
38
|
+
this.resetState();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
resetState() {
|
|
42
|
+
var {
|
|
43
|
+
value
|
|
44
|
+
} = this.props;
|
|
45
|
+
this.setState({
|
|
46
|
+
value,
|
|
47
|
+
valueWasValidated: false
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
handleRenameDialogOpened() {
|
|
51
|
+
var _this$renameInputRef, _this$renameInputRef$;
|
|
52
|
+
(_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();
|
|
53
|
+
}
|
|
54
|
+
handleRenameInputChange(event) {
|
|
55
|
+
this.setState({
|
|
56
|
+
value: event.target.value
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
handleRenameCancel() {
|
|
60
|
+
var {
|
|
61
|
+
onCancel
|
|
62
|
+
} = this.props;
|
|
63
|
+
onCancel();
|
|
64
|
+
}
|
|
65
|
+
handleRenameSubmit(event) {
|
|
66
|
+
event.stopPropagation();
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
var {
|
|
69
|
+
value
|
|
70
|
+
} = this.state;
|
|
71
|
+
var newTitle = value === null || value === void 0 ? void 0 : value.trim();
|
|
72
|
+
if (newTitle !== undefined && newTitle !== '') {
|
|
73
|
+
var {
|
|
74
|
+
onSubmit
|
|
75
|
+
} = this.props;
|
|
76
|
+
onSubmit(newTitle);
|
|
77
|
+
} else {
|
|
78
|
+
this.setState({
|
|
79
|
+
value: newTitle,
|
|
80
|
+
valueWasValidated: true
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
renderRenameDialog() {
|
|
85
|
+
var {
|
|
86
|
+
isShared,
|
|
87
|
+
isOwner,
|
|
88
|
+
itemType
|
|
89
|
+
} = this.props;
|
|
90
|
+
var {
|
|
91
|
+
value,
|
|
92
|
+
valueWasValidated
|
|
93
|
+
} = this.state;
|
|
94
|
+
return /*#__PURE__*/_jsxs("form", {
|
|
95
|
+
className: classNames('p-3', {
|
|
96
|
+
'was-validated': valueWasValidated
|
|
97
|
+
}),
|
|
98
|
+
onSubmit: this.handleRenameSubmit,
|
|
99
|
+
noValidate: true,
|
|
100
|
+
role: "presentation",
|
|
101
|
+
onMouseDown: event => {
|
|
102
|
+
// block events in the NewTabScreen ItemList
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
},
|
|
105
|
+
onMouseUp: event => {
|
|
106
|
+
event.stopPropagation();
|
|
107
|
+
},
|
|
108
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
109
|
+
className: "form-group",
|
|
110
|
+
children: [/*#__PURE__*/_jsxs("label", {
|
|
111
|
+
htmlFor: "rename-dialog-".concat(itemType, "-input"),
|
|
112
|
+
children: ["Rename ", itemType]
|
|
113
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
114
|
+
type: "text",
|
|
115
|
+
className: "form-control",
|
|
116
|
+
id: "rename-dialog-".concat(itemType, "-input"),
|
|
117
|
+
value: value !== null && value !== void 0 ? value : undefined,
|
|
118
|
+
ref: this.renameInputRef,
|
|
119
|
+
onChange: this.handleRenameInputChange,
|
|
120
|
+
required: true
|
|
121
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
122
|
+
className: "invalid-feedback",
|
|
123
|
+
children: [itemType, " name cannot be empty"]
|
|
124
|
+
}), (isShared || !isOwner) && /*#__PURE__*/_jsxs("div", {
|
|
125
|
+
className: "pt-2",
|
|
126
|
+
children: ["Renaming this ", itemType, " will rename for all users."]
|
|
127
|
+
})]
|
|
128
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
129
|
+
className: "text-right",
|
|
130
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
131
|
+
kind: "secondary",
|
|
132
|
+
className: "mr-2",
|
|
133
|
+
onClick: this.handleRenameCancel,
|
|
134
|
+
children: "Cancel"
|
|
135
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
136
|
+
kind: "primary",
|
|
137
|
+
type: "submit",
|
|
138
|
+
children: "Rename"
|
|
139
|
+
})]
|
|
140
|
+
})]
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
render() {
|
|
144
|
+
var {
|
|
145
|
+
isShown,
|
|
146
|
+
onCancel
|
|
147
|
+
} = this.props;
|
|
148
|
+
return /*#__PURE__*/_jsx(Popper, {
|
|
149
|
+
isShown: isShown,
|
|
150
|
+
onEntered: this.handleRenameDialogOpened,
|
|
151
|
+
onExited: onCancel,
|
|
152
|
+
options: {
|
|
153
|
+
placement: 'bottom'
|
|
154
|
+
},
|
|
155
|
+
interactive: true,
|
|
156
|
+
closeOnBlur: true,
|
|
157
|
+
children: this.renderRenameDialog()
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
_defineProperty(RenameDialog, "defaultProps", {
|
|
162
|
+
isShared: false,
|
|
163
|
+
isOwner: true,
|
|
164
|
+
itemType: 'Item',
|
|
165
|
+
value: ''
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=RenameDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameDialog.js","names":["React","PureComponent","classNames","Button","Popper","jsxs","_jsxs","jsx","_jsx","RenameDialog","constructor","props","_defineProperty","handleRenameDialogOpened","bind","handleRenameInputChange","handleRenameCancel","handleRenameSubmit","renameInputRef","createRef","value","state","valueWasValidated","componentDidUpdate","prevProps","isShown","prevIsShown","resetState","setState","_this$renameInputRef","_this$renameInputRef$","current","focus","event","target","onCancel","stopPropagation","preventDefault","newTitle","trim","undefined","onSubmit","renderRenameDialog","isShared","isOwner","itemType","className","noValidate","role","onMouseDown","onMouseUp","children","htmlFor","concat","type","id","ref","onChange","required","kind","onClick","render","onEntered","onExited","options","placement","interactive","closeOnBlur"],"sources":["../src/RenameDialog.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FormEvent,\n PureComponent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { Button, Popper } from '@deephaven/components';\n\ninterface RenameDialogProps {\n isShared: boolean;\n isOwner: boolean;\n isShown: boolean;\n itemType: string;\n onSubmit: (title: string) => void;\n onCancel: () => void;\n value?: string | null;\n}\n\ninterface RenameDialogState {\n value?: string | null;\n valueWasValidated: boolean;\n}\n\nexport default class RenameDialog extends PureComponent<\n RenameDialogProps,\n RenameDialogState\n> {\n static defaultProps = {\n isShared: false,\n isOwner: true,\n itemType: 'Item',\n value: '',\n };\n\n constructor(props: RenameDialogProps) {\n super(props);\n\n this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);\n this.handleRenameInputChange = this.handleRenameInputChange.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n\n this.renameInputRef = React.createRef();\n\n const { value } = props;\n\n this.state = {\n value,\n valueWasValidated: false,\n };\n }\n\n componentDidUpdate(prevProps: RenameDialogProps): void {\n const { isShown: prevIsShown } = prevProps;\n const { isShown } = this.props;\n // Reset the state on dialog shown and not on the `value` prop change\n // so the input keeps the internal value while the dialog is open.\n // Useful in case the `value` prop update is triggered externally\n // i.e. by someone else renaming the same shared dashboard\n if (isShown && !prevIsShown) {\n this.resetState();\n }\n }\n\n renameInputRef: RefObject<HTMLInputElement>;\n\n resetState(): void {\n const { value } = this.props;\n this.setState({ value, valueWasValidated: false });\n }\n\n handleRenameDialogOpened(): void {\n this.renameInputRef?.current?.focus();\n }\n\n handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value });\n }\n\n handleRenameCancel(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n handleRenameSubmit(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { value } = this.state;\n const newTitle = value?.trim();\n if (newTitle !== undefined && newTitle !== '') {\n const { onSubmit } = this.props;\n onSubmit(newTitle);\n } else {\n this.setState({ value: newTitle, valueWasValidated: true });\n }\n }\n\n renderRenameDialog(): ReactElement {\n const { isShared, isOwner, itemType } = this.props;\n const { value, valueWasValidated } = this.state;\n\n return (\n <form\n className={classNames('p-3', { 'was-validated': valueWasValidated })}\n onSubmit={this.handleRenameSubmit}\n noValidate\n role=\"presentation\"\n onMouseDown={event => {\n // block events in the NewTabScreen ItemList\n event.stopPropagation();\n }}\n onMouseUp={event => {\n event.stopPropagation();\n }}\n >\n <div className=\"form-group\">\n <label htmlFor={`rename-dialog-${itemType}-input`}>\n Rename {itemType}\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`rename-dialog-${itemType}-input`}\n value={value ?? undefined}\n ref={this.renameInputRef}\n onChange={this.handleRenameInputChange}\n required\n />\n <div className=\"invalid-feedback\">\n {itemType} name cannot be empty\n </div>\n {(isShared || !isOwner) && (\n <div className=\"pt-2\">\n Renaming this {itemType} will rename for all users.\n </div>\n )}\n </div>\n\n <div className=\"text-right\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleRenameCancel}\n >\n Cancel\n </Button>\n <Button kind=\"primary\" type=\"submit\">\n Rename\n </Button>\n </div>\n </form>\n );\n }\n\n render(): ReactElement {\n const { isShown, onCancel } = this.props;\n return (\n <Popper\n isShown={isShown}\n onEntered={this.handleRenameDialogOpened}\n onExited={onCancel}\n options={{\n placement: 'bottom',\n }}\n interactive\n closeOnBlur\n >\n {this.renderRenameDialog()}\n </Popper>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabEvent.d.ts","sourceRoot":"","sources":["../src/TabEvent.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ;;;EAGZ,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
package/dist/TabEvent.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabEvent.js","names":["TabEvent","Object","freeze","focus","blur"],"sources":["../src/TabEvent.ts"],"sourcesContent":["const TabEvent = Object.freeze({\n focus: 'TabEvent.focus',\n blur: 'TabEvent.blur',\n});\n\nexport default TabEvent;\n"],"mappings":"AAAA,IAAMA,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC7BC,KAAK,EAAE,gBAAgB;EACvBC,IAAI,EAAE;AACR,CAAC,CAAC;AAEF,eAAeJ,QAAQ"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,10 +10,12 @@ export { default as DashboardUtils } from './DashboardUtils';
|
|
|
10
10
|
export * from './LazyDashboard';
|
|
11
11
|
export * from './layout';
|
|
12
12
|
export * from './redux';
|
|
13
|
+
export { type BasePanelProps, default as BasePanel, default as Panel, } from './BasePanel';
|
|
13
14
|
export * from './PanelManager';
|
|
14
15
|
export * from './PanelEvent';
|
|
15
16
|
export { default as PanelErrorBoundary } from './PanelErrorBoundary';
|
|
16
17
|
export { default as PanelManager } from './PanelManager';
|
|
18
|
+
export { default as TabEvent } from './TabEvent';
|
|
17
19
|
export * from './useDashboardId';
|
|
18
20
|
export * from './useDhId';
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC;AAEzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC;AAEzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,KAAK,cAAc,EACnB,OAAO,IAAI,SAAS,EAEpB,OAAO,IAAI,KAAK,GACjB,MAAM,aAAa,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,10 +10,14 @@ export { default as DashboardUtils } from "./DashboardUtils.js";
|
|
|
10
10
|
export * from "./LazyDashboard.js";
|
|
11
11
|
export * from "./layout/index.js";
|
|
12
12
|
export * from "./redux/index.js";
|
|
13
|
+
export { default as BasePanel,
|
|
14
|
+
// Alias for BasePanel
|
|
15
|
+
default as Panel } from "./BasePanel.js";
|
|
13
16
|
export * from "./PanelManager.js";
|
|
14
17
|
export * from "./PanelEvent.js";
|
|
15
18
|
export { default as PanelErrorBoundary } from "./PanelErrorBoundary.js";
|
|
16
19
|
export { default as PanelManager } from "./PanelManager.js";
|
|
20
|
+
export { default as TabEvent } from "./TabEvent.js";
|
|
17
21
|
export * from "./useDashboardId.js";
|
|
18
22
|
export * from "./useDhId.js";
|
|
19
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Dashboard","default","DashboardUtils","PanelErrorBoundary","PanelManager"],"sources":["../src/index.ts"],"sourcesContent":["import Dashboard from './Dashboard';\n\nexport default Dashboard;\n\nexport * from './Dashboard';\nexport * from './DashboardConstants';\nexport * from './DashboardEvents';\nexport * from './DashboardPlugin';\nexport * from './DashboardLayout';\nexport * from './DashboardUtils';\nexport { default as DashboardUtils } from './DashboardUtils';\nexport * from './LazyDashboard';\nexport * from './layout';\nexport * from './redux';\nexport * from './PanelManager';\nexport * from './PanelEvent';\nexport { default as PanelErrorBoundary } from './PanelErrorBoundary';\nexport { default as PanelManager } from './PanelManager';\nexport * from './useDashboardId';\nexport * from './useDhId';\n"],"mappings":"OAAOA,SAAS;AAEhB,eAAeA,SAAS;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQhBC,OAAO,IAAIC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["Dashboard","default","DashboardUtils","BasePanel","Panel","PanelErrorBoundary","PanelManager","TabEvent"],"sources":["../src/index.ts"],"sourcesContent":["import Dashboard from './Dashboard';\n\nexport default Dashboard;\n\nexport * from './Dashboard';\nexport * from './DashboardConstants';\nexport * from './DashboardEvents';\nexport * from './DashboardPlugin';\nexport * from './DashboardLayout';\nexport * from './DashboardUtils';\nexport { default as DashboardUtils } from './DashboardUtils';\nexport * from './LazyDashboard';\nexport * from './layout';\nexport * from './redux';\nexport {\n type BasePanelProps,\n default as BasePanel,\n // Alias for BasePanel\n default as Panel,\n} from './BasePanel';\nexport * from './PanelManager';\nexport * from './PanelEvent';\nexport { default as PanelErrorBoundary } from './PanelErrorBoundary';\nexport { default as PanelManager } from './PanelManager';\nexport { default as TabEvent } from './TabEvent';\nexport * from './useDashboardId';\nexport * from './useDhId';\n"],"mappings":"OAAOA,SAAS;AAEhB,eAAeA,SAAS;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQhBC,OAAO,IAAIC,cAAc;AAAA;AAAA;AAAA;AAAA,SAMhCD,OAAO,IAAIE,SAAS;AACpB;AACAF,OAAO,IAAIG,KAAK;AAAA;AAAA;AAAA,SAITH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,YAAY;AAAA,SACvBL,OAAO,IAAIM,QAAQ;AAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/dashboard",
|
|
3
|
-
"version": "0.109.1-beta.
|
|
3
|
+
"version": "0.109.1-beta.9+ce171b91",
|
|
4
4
|
"description": "Deephaven Dashboard",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,15 +22,17 @@
|
|
|
22
22
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/components": "^0.109.1-beta.
|
|
26
|
-
"@deephaven/golden-layout": "^0.109.1-beta.
|
|
27
|
-
"@deephaven/log": "^0.109.1-beta.
|
|
28
|
-
"@deephaven/react-hooks": "^0.109.1-beta.
|
|
29
|
-
"@deephaven/redux": "^0.109.1-beta.
|
|
30
|
-
"@deephaven/utils": "^0.109.1-beta.
|
|
25
|
+
"@deephaven/components": "^0.109.1-beta.9+ce171b91",
|
|
26
|
+
"@deephaven/golden-layout": "^0.109.1-beta.9+ce171b91",
|
|
27
|
+
"@deephaven/log": "^0.109.1-beta.9+ce171b91",
|
|
28
|
+
"@deephaven/react-hooks": "^0.109.1-beta.9+ce171b91",
|
|
29
|
+
"@deephaven/redux": "^0.109.1-beta.9+ce171b91",
|
|
30
|
+
"@deephaven/utils": "^0.109.1-beta.9+ce171b91",
|
|
31
|
+
"classnames": "^2.3.1",
|
|
31
32
|
"fast-deep-equal": "^3.1.3",
|
|
32
33
|
"lodash.ismatch": "^4.1.1",
|
|
33
34
|
"lodash.throttle": "^4.1.1",
|
|
35
|
+
"memoize-one": "^5.1.1",
|
|
34
36
|
"nanoid": "^5.0.7",
|
|
35
37
|
"prop-types": "^15.7.2"
|
|
36
38
|
},
|
|
@@ -40,8 +42,8 @@
|
|
|
40
42
|
"react-redux": "^7.2.4"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
|
-
"@deephaven/mocks": "^0.109.1-beta.
|
|
44
|
-
"@deephaven/test-utils": "^0.109.1-beta.
|
|
45
|
+
"@deephaven/mocks": "^0.109.1-beta.9+ce171b91",
|
|
46
|
+
"@deephaven/test-utils": "^0.109.1-beta.9+ce171b91",
|
|
45
47
|
"@types/lodash.ismatch": "^4.4.0",
|
|
46
48
|
"@types/react-reconciler": "^0.32.0"
|
|
47
49
|
},
|
|
@@ -51,5 +53,5 @@
|
|
|
51
53
|
"publishConfig": {
|
|
52
54
|
"access": "public"
|
|
53
55
|
},
|
|
54
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "ce171b9146e5ba3ff169cd0a9f498921188ca9f6"
|
|
55
57
|
}
|