@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.
Files changed (166) hide show
  1. package/dist/ChartBuilderPlugin.d.ts +1 -1
  2. package/dist/ChartBuilderPlugin.d.ts.map +1 -1
  3. package/dist/ChartBuilderPlugin.js +6 -8
  4. package/dist/ChartBuilderPlugin.js.map +1 -1
  5. package/dist/ChartPlugin.d.ts +1 -1
  6. package/dist/ChartPlugin.d.ts.map +1 -1
  7. package/dist/ChartPlugin.js +4 -8
  8. package/dist/ChartPlugin.js.map +1 -1
  9. package/dist/ConsolePlugin.d.ts +1 -1
  10. package/dist/ConsolePlugin.d.ts.map +1 -1
  11. package/dist/ConsolePlugin.js +16 -62
  12. package/dist/ConsolePlugin.js.map +1 -1
  13. package/dist/FilterPlugin.d.ts +1 -1
  14. package/dist/FilterPlugin.d.ts.map +1 -1
  15. package/dist/FilterPlugin.js +6 -13
  16. package/dist/FilterPlugin.js.map +1 -1
  17. package/dist/GridPlugin.d.ts +1 -1
  18. package/dist/GridPlugin.d.ts.map +1 -1
  19. package/dist/GridPlugin.js +4 -8
  20. package/dist/GridPlugin.js.map +1 -1
  21. package/dist/LinkerPlugin.d.ts +1 -1
  22. package/dist/LinkerPlugin.d.ts.map +1 -1
  23. package/dist/LinkerPlugin.js +2 -2
  24. package/dist/LinkerPlugin.js.map +1 -1
  25. package/dist/MarkdownPlugin.d.ts +1 -1
  26. package/dist/MarkdownPlugin.d.ts.map +1 -1
  27. package/dist/MarkdownPlugin.js +4 -8
  28. package/dist/MarkdownPlugin.js.map +1 -1
  29. package/dist/PandasPlugin.d.ts +1 -1
  30. package/dist/PandasPlugin.d.ts.map +1 -1
  31. package/dist/PandasPlugin.js +4 -8
  32. package/dist/PandasPlugin.js.map +1 -1
  33. package/dist/controls/ControlType.js +0 -6
  34. package/dist/controls/ControlType.js.map +1 -1
  35. package/dist/controls/dropdown-filter/DropdownFilter.js +7 -51
  36. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  37. package/dist/controls/input-filter/InputFilter.js +1 -31
  38. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  39. package/dist/controls/markdown/MarkdownContainer.js +0 -3
  40. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  41. package/dist/controls/markdown/MarkdownEditor.d.ts +0 -2
  42. package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
  43. package/dist/controls/markdown/MarkdownEditor.js +13 -20
  44. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  45. package/dist/controls/markdown/MarkdownStartPage.js +0 -11
  46. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  47. package/dist/controls/markdown/MarkdownUtils.js +0 -7
  48. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  49. package/dist/events/ChartEvent.js +0 -5
  50. package/dist/events/ChartEvent.js.map +1 -1
  51. package/dist/events/ConsoleEvent.js +0 -7
  52. package/dist/events/ConsoleEvent.js.map +1 -1
  53. package/dist/events/InputFilterEvent.js +0 -10
  54. package/dist/events/InputFilterEvent.js.map +1 -1
  55. package/dist/events/IrisGridEvent.js +0 -8
  56. package/dist/events/IrisGridEvent.js.map +1 -1
  57. package/dist/events/MarkdownEvent.js.map +1 -1
  58. package/dist/events/NotebookEvent.js +0 -10
  59. package/dist/events/NotebookEvent.js.map +1 -1
  60. package/dist/events/PQEvent.js +0 -5
  61. package/dist/events/PQEvent.js.map +1 -1
  62. package/dist/events/PandasEvent.js +0 -4
  63. package/dist/events/PandasEvent.js.map +1 -1
  64. package/dist/events/TabEvent.js +0 -8
  65. package/dist/events/TabEvent.js.map +1 -1
  66. package/dist/events/index.js.map +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/linker/Linker.d.ts +3 -0
  69. package/dist/linker/Linker.d.ts.map +1 -1
  70. package/dist/linker/Linker.js +70 -119
  71. package/dist/linker/Linker.js.map +1 -1
  72. package/dist/linker/LinkerLink.css +90 -25
  73. package/dist/linker/LinkerLink.css.map +1 -1
  74. package/dist/linker/LinkerLink.d.ts +20 -2
  75. package/dist/linker/LinkerLink.d.ts.map +1 -1
  76. package/dist/linker/LinkerLink.js +214 -23
  77. package/dist/linker/LinkerLink.js.map +1 -1
  78. package/dist/linker/LinkerOverlayContent.css +0 -4
  79. package/dist/linker/LinkerOverlayContent.css.map +1 -1
  80. package/dist/linker/LinkerOverlayContent.d.ts +11 -0
  81. package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
  82. package/dist/linker/LinkerOverlayContent.js +78 -33
  83. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  84. package/dist/linker/LinkerUtils.d.ts +9 -2
  85. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  86. package/dist/linker/LinkerUtils.js +9 -25
  87. package/dist/linker/LinkerUtils.js.map +1 -1
  88. package/dist/linker/ToolType.js.map +1 -1
  89. package/dist/panels/ChartColumnSelectorOverlay.d.ts +5 -5
  90. package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
  91. package/dist/panels/ChartColumnSelectorOverlay.js +4 -7
  92. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  93. package/dist/panels/ChartFilterOverlay.d.ts +4 -4
  94. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  95. package/dist/panels/ChartFilterOverlay.js +2 -7
  96. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  97. package/dist/panels/ChartPanel.d.ts.map +1 -1
  98. package/dist/panels/ChartPanel.js +11 -150
  99. package/dist/panels/ChartPanel.js.map +1 -1
  100. package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
  101. package/dist/panels/CommandHistoryPanel.js +1 -26
  102. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  103. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  104. package/dist/panels/ConsolePanel.js +12 -57
  105. package/dist/panels/ConsolePanel.js.map +1 -1
  106. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  107. package/dist/panels/DropdownFilterPanel.js +16 -122
  108. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  109. package/dist/panels/FileExplorerPanel.js +4 -33
  110. package/dist/panels/FileExplorerPanel.js.map +1 -1
  111. package/dist/panels/FilterSetManager.d.ts.map +1 -1
  112. package/dist/panels/FilterSetManager.js +13 -86
  113. package/dist/panels/FilterSetManager.js.map +1 -1
  114. package/dist/panels/FilterSetManagerPanel.js +10 -64
  115. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  116. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  117. package/dist/panels/InputFilterPanel.js +8 -38
  118. package/dist/panels/InputFilterPanel.js.map +1 -1
  119. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  120. package/dist/panels/IrisGridPanel.js +24 -133
  121. package/dist/panels/IrisGridPanel.js.map +1 -1
  122. package/dist/panels/IrisGridPanelTooltip.d.ts +5 -5
  123. package/dist/panels/IrisGridPanelTooltip.d.ts.map +1 -1
  124. package/dist/panels/IrisGridPanelTooltip.js +2 -5
  125. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  126. package/dist/panels/LogPanel.js +4 -22
  127. package/dist/panels/LogPanel.js.map +1 -1
  128. package/dist/panels/MarkdownNotebook.js +3 -30
  129. package/dist/panels/MarkdownNotebook.js.map +1 -1
  130. package/dist/panels/MarkdownPanel.js +2 -30
  131. package/dist/panels/MarkdownPanel.js.map +1 -1
  132. package/dist/panels/MockFileStorage.js +1 -14
  133. package/dist/panels/MockFileStorage.js.map +1 -1
  134. package/dist/panels/MockFileStorageTable.js +11 -30
  135. package/dist/panels/MockFileStorageTable.js.map +1 -1
  136. package/dist/panels/NotebookPanel.js +24 -182
  137. package/dist/panels/NotebookPanel.js.map +1 -1
  138. package/dist/panels/PandasPanel.js +1 -20
  139. package/dist/panels/PandasPanel.js.map +1 -1
  140. package/dist/panels/Panel.js +2 -38
  141. package/dist/panels/Panel.js.map +1 -1
  142. package/dist/panels/PanelContextMenu.js +7 -29
  143. package/dist/panels/PanelContextMenu.js.map +1 -1
  144. package/dist/panels/RenameDialog.js +2 -17
  145. package/dist/panels/RenameDialog.js.map +1 -1
  146. package/dist/panels/WidgetPanel.js +2 -20
  147. package/dist/panels/WidgetPanel.js.map +1 -1
  148. package/dist/panels/WidgetPanelTooltip.d.ts +5 -5
  149. package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
  150. package/dist/panels/WidgetPanelTooltip.js +2 -4
  151. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  152. package/dist/panels/index.js.map +1 -1
  153. package/dist/prop-types/CommonPropTypes.js +0 -3
  154. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  155. package/dist/prop-types/UIPropTypes.js.map +1 -1
  156. package/dist/prop-types/index.js.map +1 -1
  157. package/dist/redux/actionTypes.js.map +1 -1
  158. package/dist/redux/actions.js +8 -9
  159. package/dist/redux/actions.js.map +1 -1
  160. package/dist/redux/index.js.map +1 -1
  161. package/dist/redux/reducers/connection.js.map +1 -1
  162. package/dist/redux/reducers/index.js.map +1 -1
  163. package/dist/redux/reducers/sessionWrapper.js.map +1 -1
  164. package/dist/redux/selectors.js +10 -15
  165. package/dist/redux/selectors.js.map +1 -1
  166. package/package.json +21 -20
@@ -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
- } // render after move can happen before tab event, glTab could be null
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
@@ -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(); // No need to check if isClosable, golden-layout returns
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
- } // eslint-disable-next-line no-unused-expressions
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
- }); // pushed as function so the disable check happens on run
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":"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"}
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; // Reset the state on dialog shown and not on the `value` prop change
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,