@deephaven/dashboard-core-plugins 0.5.1-beta.0 → 0.5.2-matplotlib.3

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 (235) hide show
  1. package/dist/ConsolePlugin.js +362 -3
  2. package/dist/ConsolePlugin.js.map +1 -1
  3. package/dist/MatPlotLibPlugin.js +45 -0
  4. package/dist/MatPlotLibPlugin.js.map +1 -0
  5. package/dist/controls/dropdown-filter/DropdownFilter.css +11 -18
  6. package/dist/controls/dropdown-filter/DropdownFilter.css.map +1 -1
  7. package/dist/controls/dropdown-filter/DropdownFilter.js +19 -23
  8. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  9. package/dist/controls/input-filter/InputFilter.css +7 -11
  10. package/dist/controls/input-filter/InputFilter.css.map +1 -1
  11. package/dist/controls/input-filter/InputFilter.js +8 -15
  12. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  13. package/dist/dist/events/ChartEvent.d.ts +3 -0
  14. package/dist/dist/events/ChartEvent.d.ts.map +1 -0
  15. package/dist/dist/events/ConsoleEvent.d.ts +3 -0
  16. package/dist/dist/events/ConsoleEvent.d.ts.map +1 -0
  17. package/dist/dist/events/ControlEvent.d.ts +3 -0
  18. package/dist/dist/events/ControlEvent.d.ts.map +1 -0
  19. package/dist/dist/events/InputFilterEvent.d.ts +3 -0
  20. package/dist/dist/events/InputFilterEvent.d.ts.map +1 -0
  21. package/dist/dist/events/IrisGridEvent.d.ts +3 -0
  22. package/dist/dist/events/IrisGridEvent.d.ts.map +1 -0
  23. package/dist/dist/events/MarkdownEvent.d.ts +5 -0
  24. package/dist/dist/events/MarkdownEvent.d.ts.map +1 -0
  25. package/dist/dist/events/MatPlotLibEvent.d.ts +3 -0
  26. package/dist/dist/events/MatPlotLibEvent.d.ts.map +1 -0
  27. package/dist/dist/events/NotebookEvent.d.ts +3 -0
  28. package/dist/dist/events/NotebookEvent.d.ts.map +1 -0
  29. package/dist/dist/events/PandasEvent.d.ts +3 -0
  30. package/dist/dist/events/PandasEvent.d.ts.map +1 -0
  31. package/dist/dist/events/TabEvent.d.ts +3 -0
  32. package/dist/dist/events/TabEvent.d.ts.map +1 -0
  33. package/dist/{events → dist/events}/index.d.ts +1 -0
  34. package/dist/{events → dist/events}/index.d.ts.map +1 -1
  35. package/dist/events/MatPlotLibEvent.js +12 -0
  36. package/dist/events/MatPlotLibEvent.js.map +1 -0
  37. package/dist/events/index.js +1 -0
  38. package/dist/events/index.js.map +1 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/panels/ConsolePanel.js +22 -2
  42. package/dist/panels/ConsolePanel.js.map +1 -1
  43. package/dist/panels/InputFilterPanel.js +1 -4
  44. package/dist/panels/InputFilterPanel.js.map +1 -1
  45. package/dist/panels/MatPlotLibPanel.css +11 -0
  46. package/dist/panels/MatPlotLibPanel.css.map +1 -0
  47. package/dist/panels/MatPlotLibPanel.js +124 -0
  48. package/dist/panels/MatPlotLibPanel.js.map +1 -0
  49. package/dist/panels/index.js +1 -0
  50. package/dist/panels/index.js.map +1 -1
  51. package/dist/{ChartPlugin.d.ts → src/ChartPlugin.d.ts} +0 -0
  52. package/dist/src/ChartPlugin.d.ts.map +1 -0
  53. package/dist/{ConsolePlugin.d.ts → src/ConsolePlugin.d.ts} +0 -0
  54. package/dist/src/ConsolePlugin.d.ts.map +1 -0
  55. package/dist/{FilterPlugin.d.ts → src/FilterPlugin.d.ts} +0 -0
  56. package/dist/src/FilterPlugin.d.ts.map +1 -0
  57. package/dist/{GridPlugin.d.ts → src/GridPlugin.d.ts} +0 -0
  58. package/dist/src/GridPlugin.d.ts.map +1 -0
  59. package/dist/{LinkerPlugin.d.ts → src/LinkerPlugin.d.ts} +0 -0
  60. package/dist/src/LinkerPlugin.d.ts.map +1 -0
  61. package/dist/{MarkdownPlugin.d.ts → src/MarkdownPlugin.d.ts} +0 -0
  62. package/dist/src/MarkdownPlugin.d.ts.map +1 -0
  63. package/dist/src/MatPlotLibPlugin.d.ts +5 -0
  64. package/dist/src/MatPlotLibPlugin.d.ts.map +1 -0
  65. package/dist/{PandasPlugin.d.ts → src/PandasPlugin.d.ts} +0 -0
  66. package/dist/src/PandasPlugin.d.ts.map +1 -0
  67. package/dist/{controls → src/controls}/ControlType.d.ts +0 -0
  68. package/dist/src/controls/ControlType.d.ts.map +1 -0
  69. package/dist/{controls → src/controls}/dropdown-filter/DropdownFilter.d.ts +0 -0
  70. package/dist/src/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -0
  71. package/dist/{controls → src/controls}/input-filter/InputFilter.d.ts +0 -0
  72. package/dist/src/controls/input-filter/InputFilter.d.ts.map +1 -0
  73. package/dist/{controls → src/controls}/markdown/MarkdownContainer.d.ts +0 -0
  74. package/dist/src/controls/markdown/MarkdownContainer.d.ts.map +1 -0
  75. package/dist/{controls → src/controls}/markdown/MarkdownEditor.d.ts +0 -0
  76. package/dist/src/controls/markdown/MarkdownEditor.d.ts.map +1 -0
  77. package/dist/{controls → src/controls}/markdown/MarkdownStartPage.d.ts +0 -0
  78. package/dist/src/controls/markdown/MarkdownStartPage.d.ts.map +1 -0
  79. package/dist/{controls → src/controls}/markdown/MarkdownUtils.d.ts +0 -0
  80. package/dist/src/controls/markdown/MarkdownUtils.d.ts.map +1 -0
  81. package/dist/{events → src/events}/ChartEvent.d.ts +0 -0
  82. package/dist/src/events/ChartEvent.d.ts.map +1 -0
  83. package/dist/{events → src/events}/ConsoleEvent.d.ts +0 -0
  84. package/dist/src/events/ConsoleEvent.d.ts.map +1 -0
  85. package/dist/{events → src/events}/ControlEvent.d.ts +0 -0
  86. package/dist/src/events/ControlEvent.d.ts.map +1 -0
  87. package/dist/{events → src/events}/InputFilterEvent.d.ts +0 -0
  88. package/dist/src/events/InputFilterEvent.d.ts.map +1 -0
  89. package/dist/{events → src/events}/IrisGridEvent.d.ts +0 -0
  90. package/dist/src/events/IrisGridEvent.d.ts.map +1 -0
  91. package/dist/{events → src/events}/MarkdownEvent.d.ts +0 -0
  92. package/dist/src/events/MarkdownEvent.d.ts.map +1 -0
  93. package/dist/src/events/MatPlotLibEvent.d.ts +5 -0
  94. package/dist/src/events/MatPlotLibEvent.d.ts.map +1 -0
  95. package/dist/{events → src/events}/NotebookEvent.d.ts +0 -0
  96. package/dist/src/events/NotebookEvent.d.ts.map +1 -0
  97. package/dist/{events → src/events}/PQEvent.d.ts +0 -0
  98. package/dist/src/events/PQEvent.d.ts.map +1 -0
  99. package/dist/{events → src/events}/PandasEvent.d.ts +0 -0
  100. package/dist/src/events/PandasEvent.d.ts.map +1 -0
  101. package/dist/{events → src/events}/TabEvent.d.ts +0 -0
  102. package/dist/src/events/TabEvent.d.ts.map +1 -0
  103. package/dist/src/events/index.d.ts +11 -0
  104. package/dist/{panels → src/events}/index.d.ts.map +1 -1
  105. package/dist/{index.d.ts → src/index.d.ts} +1 -0
  106. package/dist/src/index.d.ts.map +1 -0
  107. package/dist/{linker → src/linker}/Linker.d.ts +0 -0
  108. package/dist/src/linker/Linker.d.ts.map +1 -0
  109. package/dist/{linker → src/linker}/LinkerLink.d.ts +0 -0
  110. package/dist/src/linker/LinkerLink.d.ts.map +1 -0
  111. package/dist/{linker → src/linker}/LinkerOverlayContent.d.ts +0 -0
  112. package/dist/src/linker/LinkerOverlayContent.d.ts.map +1 -0
  113. package/dist/{linker → src/linker}/LinkerUtils.d.ts +0 -0
  114. package/dist/src/linker/LinkerUtils.d.ts.map +1 -0
  115. package/dist/{linker → src/linker}/ToolType.d.ts +0 -0
  116. package/dist/{linker → src/linker}/ToolType.d.ts.map +1 -1
  117. package/dist/{panels → src/panels}/ChartColumnSelectorOverlay.d.ts +0 -0
  118. package/dist/src/panels/ChartColumnSelectorOverlay.d.ts.map +1 -0
  119. package/dist/{panels → src/panels}/ChartFilterOverlay.d.ts +0 -0
  120. package/dist/src/panels/ChartFilterOverlay.d.ts.map +1 -0
  121. package/dist/{panels → src/panels}/ChartPanel.d.ts +0 -0
  122. package/dist/src/panels/ChartPanel.d.ts.map +1 -0
  123. package/dist/{panels → src/panels}/CommandHistoryPanel.d.ts +0 -0
  124. package/dist/src/panels/CommandHistoryPanel.d.ts.map +1 -0
  125. package/dist/{panels → src/panels}/ConsolePanel.d.ts +1 -0
  126. package/dist/src/panels/ConsolePanel.d.ts.map +1 -0
  127. package/dist/{panels → src/panels}/DropdownFilterPanel.d.ts +0 -0
  128. package/dist/src/panels/DropdownFilterPanel.d.ts.map +1 -0
  129. package/dist/{panels → src/panels}/FileExplorerPanel.d.ts +0 -0
  130. package/dist/src/panels/FileExplorerPanel.d.ts.map +1 -0
  131. package/dist/{panels → src/panels}/InputFilterPanel.d.ts +0 -0
  132. package/dist/src/panels/InputFilterPanel.d.ts.map +1 -0
  133. package/dist/{panels → src/panels}/IrisGridPanel.d.ts +0 -0
  134. package/dist/src/panels/IrisGridPanel.d.ts.map +1 -0
  135. package/dist/{panels → src/panels}/LogPanel.d.ts +0 -0
  136. package/dist/src/panels/LogPanel.d.ts.map +1 -0
  137. package/dist/{panels → src/panels}/MarkdownPanel.d.ts +0 -0
  138. package/dist/src/panels/MarkdownPanel.d.ts.map +1 -0
  139. package/dist/src/panels/MatPlotLibPanel.d.ts +22 -0
  140. package/dist/src/panels/MatPlotLibPanel.d.ts.map +1 -0
  141. package/dist/{panels → src/panels}/NotebookPanel.d.ts +0 -0
  142. package/dist/src/panels/NotebookPanel.d.ts.map +1 -0
  143. package/dist/{panels → src/panels}/PandasPanel.d.ts +0 -0
  144. package/dist/src/panels/PandasPanel.d.ts.map +1 -0
  145. package/dist/{panels → src/panels}/Panel.d.ts +0 -0
  146. package/dist/src/panels/Panel.d.ts.map +1 -0
  147. package/dist/{panels → src/panels}/PanelContextMenu.d.ts +0 -0
  148. package/dist/src/panels/PanelContextMenu.d.ts.map +1 -0
  149. package/dist/{panels → src/panels}/RenameDialog.d.ts +0 -0
  150. package/dist/src/panels/RenameDialog.d.ts.map +1 -0
  151. package/dist/{panels → src/panels}/Shortcuts.d.ts +0 -0
  152. package/dist/src/panels/Shortcuts.d.ts.map +1 -0
  153. package/dist/{panels → src/panels}/WidgetPanel.d.ts +0 -0
  154. package/dist/src/panels/WidgetPanel.d.ts.map +1 -0
  155. package/dist/{panels → src/panels}/WidgetPanelTooltip.d.ts +0 -0
  156. package/dist/src/panels/WidgetPanelTooltip.d.ts.map +1 -0
  157. package/dist/{panels → src/panels}/index.d.ts +1 -0
  158. package/dist/{prop-types → src/panels}/index.d.ts.map +1 -1
  159. package/dist/{prop-types → src/prop-types}/CommonPropTypes.d.ts +0 -0
  160. package/dist/src/prop-types/CommonPropTypes.d.ts.map +1 -0
  161. package/dist/{prop-types → src/prop-types}/UIPropTypes.d.ts +0 -0
  162. package/dist/src/prop-types/UIPropTypes.d.ts.map +1 -0
  163. package/dist/{prop-types → src/prop-types}/index.d.ts +0 -0
  164. package/dist/{redux/reducers → src/prop-types}/index.d.ts.map +1 -1
  165. package/dist/{redux → src/redux}/actionTypes.d.ts +0 -0
  166. package/dist/src/redux/actionTypes.d.ts.map +1 -0
  167. package/dist/{redux → src/redux}/actions.d.ts +0 -0
  168. package/dist/src/redux/actions.d.ts.map +1 -0
  169. package/dist/{redux → src/redux}/index.d.ts +0 -0
  170. package/dist/src/redux/index.d.ts.map +1 -0
  171. package/dist/{redux → src/redux}/reducers/index.d.ts +0 -0
  172. package/dist/src/redux/reducers/index.d.ts.map +1 -0
  173. package/dist/{redux → src/redux}/reducers/sessionWrapper.d.ts +0 -0
  174. package/dist/src/redux/reducers/sessionWrapper.d.ts.map +1 -0
  175. package/dist/{redux → src/redux}/selectors.d.ts +0 -0
  176. package/dist/src/redux/selectors.d.ts.map +1 -0
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +17 -17
  179. package/dist/ChartPlugin.d.ts.map +0 -1
  180. package/dist/ConsolePlugin.d.ts.map +0 -1
  181. package/dist/FilterPlugin.d.ts.map +0 -1
  182. package/dist/GridPlugin.d.ts.map +0 -1
  183. package/dist/LinkerPlugin.d.ts.map +0 -1
  184. package/dist/MarkdownPlugin.d.ts.map +0 -1
  185. package/dist/PandasPlugin.d.ts.map +0 -1
  186. package/dist/controls/ControlType.d.ts.map +0 -1
  187. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +0 -1
  188. package/dist/controls/input-filter/InputFilter.d.ts.map +0 -1
  189. package/dist/controls/markdown/MarkdownContainer.d.ts.map +0 -1
  190. package/dist/controls/markdown/MarkdownEditor.d.ts.map +0 -1
  191. package/dist/controls/markdown/MarkdownStartPage.d.ts.map +0 -1
  192. package/dist/controls/markdown/MarkdownUtils.d.ts.map +0 -1
  193. package/dist/events/ChartEvent.d.ts.map +0 -1
  194. package/dist/events/ConsoleEvent.d.ts.map +0 -1
  195. package/dist/events/ControlEvent.d.ts.map +0 -1
  196. package/dist/events/InputFilterEvent.d.ts.map +0 -1
  197. package/dist/events/IrisGridEvent.d.ts.map +0 -1
  198. package/dist/events/MarkdownEvent.d.ts.map +0 -1
  199. package/dist/events/NotebookEvent.d.ts.map +0 -1
  200. package/dist/events/PQEvent.d.ts.map +0 -1
  201. package/dist/events/PandasEvent.d.ts.map +0 -1
  202. package/dist/events/TabEvent.d.ts.map +0 -1
  203. package/dist/index.d.ts.map +0 -1
  204. package/dist/linker/Linker.d.ts.map +0 -1
  205. package/dist/linker/LinkerLink.d.ts.map +0 -1
  206. package/dist/linker/LinkerOverlayContent.d.ts.map +0 -1
  207. package/dist/linker/LinkerUtils.d.ts.map +0 -1
  208. package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +0 -1
  209. package/dist/panels/ChartFilterOverlay.d.ts.map +0 -1
  210. package/dist/panels/ChartPanel.d.ts.map +0 -1
  211. package/dist/panels/CommandHistoryPanel.d.ts.map +0 -1
  212. package/dist/panels/ConsolePanel.d.ts.map +0 -1
  213. package/dist/panels/DropdownFilterPanel.d.ts.map +0 -1
  214. package/dist/panels/FileExplorerPanel.d.ts.map +0 -1
  215. package/dist/panels/InputFilterPanel.css +0 -5
  216. package/dist/panels/InputFilterPanel.css.map +0 -1
  217. package/dist/panels/InputFilterPanel.d.ts.map +0 -1
  218. package/dist/panels/IrisGridPanel.d.ts.map +0 -1
  219. package/dist/panels/LogPanel.d.ts.map +0 -1
  220. package/dist/panels/MarkdownPanel.d.ts.map +0 -1
  221. package/dist/panels/NotebookPanel.d.ts.map +0 -1
  222. package/dist/panels/PandasPanel.d.ts.map +0 -1
  223. package/dist/panels/Panel.d.ts.map +0 -1
  224. package/dist/panels/PanelContextMenu.d.ts.map +0 -1
  225. package/dist/panels/RenameDialog.d.ts.map +0 -1
  226. package/dist/panels/Shortcuts.d.ts.map +0 -1
  227. package/dist/panels/WidgetPanel.d.ts.map +0 -1
  228. package/dist/panels/WidgetPanelTooltip.d.ts.map +0 -1
  229. package/dist/prop-types/CommonPropTypes.d.ts.map +0 -1
  230. package/dist/prop-types/UIPropTypes.d.ts.map +0 -1
  231. package/dist/redux/actionTypes.d.ts.map +0 -1
  232. package/dist/redux/actions.d.ts.map +0 -1
  233. package/dist/redux/index.d.ts.map +0 -1
  234. package/dist/redux/reducers/sessionWrapper.d.ts.map +0 -1
  235. package/dist/redux/selectors.d.ts.map +0 -1
@@ -1,16 +1,45 @@
1
- import { useListener } from '@deephaven/dashboard';
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+
3
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
+
9
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
+
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+
13
+ import { LayoutUtils, useListener } from '@deephaven/dashboard';
14
+ import { FileUtils } from '@deephaven/file-explorer';
2
15
  import Log from '@deephaven/log';
3
- import React, { useCallback, useEffect } from 'react';
16
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
4
17
  import { useDispatch } from 'react-redux';
5
- import { ConsoleEvent } from './events';
18
+ import shortid from 'shortid';
19
+ import { ConsoleEvent, NotebookEvent } from './events';
6
20
  import { ConsolePanel, CommandHistoryPanel, FileExplorerPanel, LogPanel, NotebookPanel } from './panels';
7
21
  import { setDashboardConsoleSettings } from './redux';
8
22
  var log = Log.module('ConsolePlugin');
23
+
24
+ function isNotebookPanel(panel) {
25
+ return panel.notebook !== undefined;
26
+ }
27
+
9
28
  export var ConsolePlugin = function ConsolePlugin(_ref) {
10
29
  var id = _ref.id,
11
30
  layout = _ref.layout,
12
31
  panelManager = _ref.panelManager,
13
32
  registerComponent = _ref.registerComponent;
33
+ var notebookIndex = useRef(0); // Map from file ID to panel ID
34
+
35
+ var _useState = useState(new Map()),
36
+ _useState2 = _slicedToArray(_useState, 1),
37
+ openFileMap = _useState2[0];
38
+
39
+ var _useState3 = useState(new Map()),
40
+ _useState4 = _slicedToArray(_useState3, 1),
41
+ previewFileMap = _useState4[0];
42
+
14
43
  var dispatch = useDispatch();
15
44
  var getConsolePanel = useCallback(function () {
16
45
  return panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent);
@@ -37,6 +66,328 @@ export var ConsolePlugin = function ConsolePlugin(_ref) {
37
66
  var handleSettingsChanged = useCallback(function (consoleSettings) {
38
67
  dispatch(setDashboardConsoleSettings(id, consoleSettings));
39
68
  }, [dispatch, id]);
69
+ var getNotebookFileName = useCallback(function (_ref2) {
70
+ var language = _ref2.language;
71
+ var extension = language === 'python' ? 'py' : language;
72
+ var title = null;
73
+
74
+ if (!extension) {
75
+ log.debug('No extension for language', language);
76
+ title = "Untitled-".concat(notebookIndex.current);
77
+ } else {
78
+ title = "Untitled-".concat(notebookIndex.current, ".").concat(extension);
79
+ }
80
+
81
+ notebookIndex.current += 1;
82
+ return title;
83
+ }, []);
84
+ var getPanelIdForFileMetadata = useCallback(function (fileMetadata) {
85
+ var createIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
86
+ var fileId = fileMetadata.id;
87
+
88
+ if (fileId && openFileMap.has(fileId)) {
89
+ return openFileMap.get(fileId);
90
+ }
91
+
92
+ if (fileId && previewFileMap.has(fileId)) {
93
+ return previewFileMap.get(fileId);
94
+ }
95
+
96
+ if (createIfNecessary) {
97
+ return shortid.generate();
98
+ }
99
+
100
+ return null;
101
+ }, [openFileMap, previewFileMap]);
102
+ var renamePanel = useCallback(function (panelId, newTitle) {
103
+ LayoutUtils.renameComponent(layout.root, {
104
+ id: panelId
105
+ }, newTitle);
106
+ }, [layout.root]);
107
+ var renameFilePanel = useCallback(function (oldName, newName) {
108
+ log.debug('Rename file panel', oldName, newName);
109
+ var panelId;
110
+
111
+ if (openFileMap.has(oldName)) {
112
+ panelId = openFileMap.get(oldName);
113
+ openFileMap["delete"](oldName);
114
+
115
+ if (panelId != null) {
116
+ openFileMap.set(newName, panelId);
117
+ }
118
+ }
119
+
120
+ if (previewFileMap.has(oldName)) {
121
+ panelId = previewFileMap.get(oldName);
122
+ previewFileMap["delete"](oldName);
123
+
124
+ if (panelId != null) {
125
+ previewFileMap.set(newName, panelId);
126
+ }
127
+ }
128
+
129
+ if (!panelId) {
130
+ log.debug2("File ".concat(oldName, " isn't open, no need to rename the tab"));
131
+ return;
132
+ }
133
+
134
+ renamePanel(panelId, FileUtils.getBaseName(newName));
135
+ }, [openFileMap, previewFileMap, renamePanel]);
136
+ var activateFilePanel = useCallback(function (fileMetadata) {
137
+ var panelId = getPanelIdForFileMetadata(fileMetadata, false);
138
+
139
+ if (panelId == null) {
140
+ log.error('Could not find panel id for file metadata', fileMetadata);
141
+ return;
142
+ }
143
+
144
+ LayoutUtils.activateTab(layout.root, {
145
+ id: panelId
146
+ });
147
+ }, [getPanelIdForFileMetadata, layout.root]);
148
+ var registerFilePanel = useCallback(function (panelId, fileMetadata, isPreview) {
149
+ log.debug('registerFilePanel', panelId, fileMetadata, isPreview);
150
+
151
+ if (!fileMetadata || !fileMetadata.id) {
152
+ log.debug('Ignore empty file id', fileMetadata);
153
+ return;
154
+ }
155
+
156
+ var fileId = fileMetadata.id;
157
+
158
+ if (isPreview) {
159
+ previewFileMap.set(fileId, panelId);
160
+ return;
161
+ }
162
+
163
+ if (openFileMap.has(fileId)) {
164
+ var existingPanelId = openFileMap.get(fileId);
165
+
166
+ if (panelId === existingPanelId) {
167
+ log.debug("Update tab title for file ".concat(fileId));
168
+ var itemName = fileMetadata.itemName;
169
+ renameFilePanel(fileId, FileUtils.getBaseName(itemName));
170
+ } else {
171
+ log.error("File ".concat(fileId, " already associated with a different tab ").concat(existingPanelId));
172
+ }
173
+
174
+ return;
175
+ }
176
+
177
+ openFileMap.set(fileId, panelId); // De-register preview tab
178
+
179
+ if (previewFileMap.has(fileId)) {
180
+ previewFileMap["delete"](fileId);
181
+ }
182
+ }, [openFileMap, previewFileMap, renameFilePanel]);
183
+ var unregisterFilePanel = useCallback(function (fileMetadata, isPreview) {
184
+ // Note: unregister event is triggered AFTER new register when switching from preview to edit mode
185
+ // due to the LayoutUtils implementation (new tab added before deleting the old one)
186
+ // This doesn't cause any issues because previews and editable files are stored in different maps,
187
+ // but this situation could be completely avoided by sending an event to the tab
188
+ // to make it switch from preview to edit mode without re-mounting and re-registering
189
+ log.debug('unregisterFileTab', fileMetadata, isPreview);
190
+
191
+ if (!fileMetadata || !fileMetadata.id) {
192
+ log.debug('Ignore empty file id', fileMetadata);
193
+ return;
194
+ }
195
+
196
+ var fileId = fileMetadata.id;
197
+
198
+ if (isPreview) {
199
+ previewFileMap["delete"](fileId);
200
+ return;
201
+ }
202
+
203
+ openFileMap["delete"](fileId);
204
+ }, [openFileMap, previewFileMap]);
205
+ var closeFilePanel = useCallback(function (fileMetadata) {
206
+ log.debug('closeFilePanel', fileMetadata);
207
+ var fileId = fileMetadata.id;
208
+ var panelId = null;
209
+ var isPreview = false;
210
+
211
+ if (openFileMap.has(fileId)) {
212
+ panelId = openFileMap.get(fileId);
213
+ } else if (previewFileMap.has(fileId)) {
214
+ panelId = previewFileMap.get(fileId);
215
+ isPreview = true;
216
+ } else {
217
+ log.debug("File ".concat(fileId, " isn't open, ignore close event"));
218
+ return;
219
+ }
220
+
221
+ unregisterFilePanel(fileMetadata, isPreview);
222
+ LayoutUtils.closeComponent(layout.root, {
223
+ id: panelId
224
+ });
225
+ }, [layout.root, openFileMap, previewFileMap, unregisterFilePanel]);
226
+ var getNotebookTitle = useCallback(function (fileMetadata) {
227
+ var itemName = fileMetadata.itemName;
228
+ return FileUtils.getBaseName(itemName);
229
+ }, []);
230
+ var fileIsOpen = useCallback(function (fileMetadata) {
231
+ var fileId = fileMetadata.id;
232
+ log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);
233
+ return fileId && openFileMap.has(fileId);
234
+ }, [openFileMap]);
235
+ var fileIsOpenAsPreview = useCallback(function (fileMetadata) {
236
+ var fileId = fileMetadata.id;
237
+ log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);
238
+ return fileId && previewFileMap.has(fileId);
239
+ }, [previewFileMap]);
240
+ var fileIsActive = useCallback(function (fileMetadata) {
241
+ var panelId = getPanelIdForFileMetadata(fileMetadata, false);
242
+ return panelId != null && LayoutUtils.isActiveTab(layout.root, {
243
+ id: panelId
244
+ });
245
+ }, [getPanelIdForFileMetadata, layout.root]);
246
+ var makeConfig = useCallback(function (_ref3) {
247
+ var panelId = _ref3.id,
248
+ settings = _ref3.settings,
249
+ fileMetadata = _ref3.fileMetadata,
250
+ session = _ref3.session,
251
+ sessionLanguage = _ref3.sessionLanguage,
252
+ _ref3$isPreview = _ref3.isPreview,
253
+ isPreview = _ref3$isPreview === void 0 ? false : _ref3$isPreview;
254
+ var panelState = {
255
+ settings: settings,
256
+ fileMetadata: fileMetadata
257
+ };
258
+ var title = getNotebookTitle(fileMetadata);
259
+ return {
260
+ type: 'react-component',
261
+ component: NotebookPanel.COMPONENT,
262
+ props: {
263
+ localDashboardId: id,
264
+ metadata: {
265
+ id: panelId
266
+ },
267
+ session: session,
268
+ sessionLanguage: sessionLanguage,
269
+ panelState: panelState,
270
+ isPreview: isPreview
271
+ },
272
+ title: title,
273
+ id: panelId
274
+ };
275
+ }, [getNotebookTitle, id]);
276
+ var createNotebook = useCallback(function (session, sessionLanguage, settings) {
277
+ var fileMetadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
278
+ id: null,
279
+ itemName: getNotebookFileName(settings)
280
+ };
281
+ var panelId = getPanelIdForFileMetadata(fileMetadata);
282
+
283
+ if (fileIsOpen(fileMetadata)) {
284
+ log.debug('File is already open, focus tab');
285
+ LayoutUtils.activateTab(layout.root, {
286
+ id: panelId
287
+ });
288
+ return;
289
+ }
290
+
291
+ var stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
292
+ var config = makeConfig({
293
+ id: panelId,
294
+ settings: settings,
295
+ fileMetadata: fileMetadata,
296
+ session: session,
297
+ sessionLanguage: sessionLanguage
298
+ });
299
+ log.debug('createNotebook', config, openFileMap);
300
+ LayoutUtils.openComponentInStack(stack, config);
301
+ }, [fileIsOpen, getNotebookFileName, getPanelIdForFileMetadata, layout.root, makeConfig, openFileMap]);
302
+ var selectNotebook = useCallback(function (session, sessionLanguage, settings, fileMetadata) {
303
+ log.debug('selectNotebook', fileMetadata);
304
+ var previewTabId = null;
305
+ var isPreview = true;
306
+ var isFileOpen = fileIsOpen(fileMetadata);
307
+ var isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);
308
+
309
+ if (!isFileOpen && !isFileOpenAsPreview) {
310
+ log.debug('selectNotebook, file not open');
311
+
312
+ if (previewFileMap.size > 0) {
313
+ log.debug('selectNotebook, file not open, previewFileMap not empty'); // Existing preview tab id to reuse
314
+
315
+ var _Array$from = Array.from(previewFileMap.values());
316
+
317
+ var _Array$from2 = _slicedToArray(_Array$from, 1);
318
+
319
+ previewTabId = _Array$from2[0];
320
+ }
321
+ } else {
322
+ // File already open in background
323
+ if (!fileIsActive(fileMetadata)) {
324
+ activateFilePanel(fileMetadata);
325
+ return;
326
+ } // File already open in foreground, not in preview mode
327
+
328
+
329
+ if (!isFileOpenAsPreview) {
330
+ activateFilePanel(fileMetadata);
331
+ return;
332
+ } // File already open in foreground in preview mode
333
+
334
+
335
+ var _Array$from3 = Array.from(previewFileMap.values());
336
+
337
+ var _Array$from4 = _slicedToArray(_Array$from3, 1);
338
+
339
+ previewTabId = _Array$from4[0];
340
+ isPreview = false;
341
+ }
342
+
343
+ var panelId = null;
344
+ var stack = null;
345
+
346
+ if (previewTabId != null) {
347
+ panelId = previewTabId;
348
+ stack = LayoutUtils.getStackForConfig(layout.root, {
349
+ component: NotebookPanel.COMPONENT,
350
+ id: panelId
351
+ });
352
+ }
353
+
354
+ if (stack == null) {
355
+ panelId = getPanelIdForFileMetadata(fileMetadata);
356
+ stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
357
+ }
358
+
359
+ var config = makeConfig({
360
+ id: panelId,
361
+ settings: settings,
362
+ fileMetadata: fileMetadata,
363
+ session: session,
364
+ sessionLanguage: sessionLanguage,
365
+ isPreview: isPreview
366
+ });
367
+ LayoutUtils.openComponentInStack(stack, config); // openComponentInStack attempts to maintain the focus
368
+ // Focus open tab if it's editable
369
+
370
+ if (!isPreview) {
371
+ LayoutUtils.activateTab(layout.root, {
372
+ id: panelId
373
+ });
374
+ }
375
+ }, [activateFilePanel, fileIsActive, fileIsOpen, fileIsOpenAsPreview, getPanelIdForFileMetadata, layout.root, makeConfig, previewFileMap]);
376
+ /** Attempts to send the text to a notebook matching the passed in settings */
377
+
378
+ var sendToNotebook = useCallback(function (session, sessionLanguage) {
379
+ var settings = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
380
+ var createIfNecessary = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
381
+ var notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);
382
+
383
+ if (notebookPanel && isNotebookPanel(notebookPanel)) {
384
+ if (settings && settings.value && notebookPanel.notebook) {
385
+ notebookPanel.notebook.append(settings.value);
386
+ }
387
+ } else if (createIfNecessary) {
388
+ createNotebook(session, sessionLanguage, settings);
389
+ }
390
+ }, [createNotebook, panelManager]);
40
391
  useEffect(function () {
41
392
  var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel)];
42
393
  return function () {
@@ -47,6 +398,14 @@ export var ConsolePlugin = function ConsolePlugin(_ref) {
47
398
  }, [registerComponent]);
48
399
  useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);
49
400
  useListener(layout.eventHub, ConsoleEvent.SETTINGS_CHANGED, handleSettingsChanged);
401
+ useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);
402
+ useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);
403
+ useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);
404
+ useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);
405
+ useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);
406
+ useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);
407
+ useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);
408
+ useListener(layout.eventHub, NotebookEvent.UNREGISTER_FILE, unregisterFilePanel);
50
409
  return /*#__PURE__*/React.createElement(React.Fragment, null);
51
410
  };
52
411
  export default ConsolePlugin;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["useListener","Log","React","useCallback","useEffect","useDispatch","ConsoleEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","ConsolePlugin","id","layout","panelManager","registerComponent","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","cleanups","COMPONENT","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED"],"mappings":"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","sourcesContent":["import {\n DashboardPluginComponentProps,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport React, { ComponentType, useCallback, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ConsoleEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
1
+ {"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","ConsolePlugin","id","layout","panelManager","registerComponent","notebookIndex","Map","openFileMap","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","set","debug2","getBaseName","activateFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","fileIsActive","isActiveTab","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","props","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","previewTabId","isFileOpen","isFileOpenAsPreview","size","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, {\n ComponentType,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n const activateFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n const fileIsActive = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n return (\n panelId != null && LayoutUtils.isActiveTab(layout.root, { id: panelId })\n );\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata)) {\n log.debug('File is already open, focus tab');\n LayoutUtils.activateTab(layout.root, { id: panelId });\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n ]\n );\n\n const selectNotebook = useCallback(\n (session, sessionLanguage, settings, fileMetadata) => {\n log.debug('selectNotebook', fileMetadata);\n let previewTabId = null;\n let isPreview = true;\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n if (!isFileOpen && !isFileOpenAsPreview) {\n log.debug('selectNotebook, file not open');\n if (previewFileMap.size > 0) {\n log.debug('selectNotebook, file not open, previewFileMap not empty');\n // Existing preview tab id to reuse\n [previewTabId] = Array.from(previewFileMap.values());\n }\n } else {\n // File already open in background\n if (!fileIsActive(fileMetadata)) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground, not in preview mode\n if (!isFileOpenAsPreview) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground in preview mode\n [previewTabId] = Array.from(previewFileMap.values());\n isPreview = false;\n }\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview,\n });\n LayoutUtils.openComponentInStack(stack, config);\n // openComponentInStack attempts to maintain the focus\n // Focus open tab if it's editable\n if (!isPreview) {\n LayoutUtils.activateTab(layout.root, { id: panelId });\n }\n },\n [\n activateFilePanel,\n fileIsActive,\n fileIsOpen,\n fileIsOpenAsPreview,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
@@ -0,0 +1,45 @@
1
+ import React, { useCallback, useEffect } from 'react';
2
+ import shortid from 'shortid';
3
+ import { LayoutUtils, useListener } from '@deephaven/dashboard';
4
+ import { MatPlotLibPanel } from './panels';
5
+ import { MatPlotLibEvent } from './events';
6
+ export var MatPlotLibPlugin = function MatPlotLibPlugin(_ref) {
7
+ var id = _ref.id,
8
+ layout = _ref.layout,
9
+ registerComponent = _ref.registerComponent;
10
+ var handleOpen = useCallback(function (title, makeModel) {
11
+ var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
12
+ var panelId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : shortid.generate();
13
+ var dragEvent = arguments.length > 4 ? arguments[4] : undefined;
14
+ var config = {
15
+ type: 'react-component',
16
+ component: MatPlotLibPanel.COMPONENT,
17
+ props: {
18
+ localDashboardId: id,
19
+ id: panelId,
20
+ metadata: metadata,
21
+ makeModel: makeModel
22
+ },
23
+ title: title,
24
+ id: panelId
25
+ };
26
+ var root = layout.root;
27
+ LayoutUtils.openComponent({
28
+ root: root,
29
+ config: config,
30
+ dragEvent: dragEvent
31
+ });
32
+ }, [id, layout]);
33
+ useEffect(function () {
34
+ var cleanups = [registerComponent(MatPlotLibPanel.COMPONENT, MatPlotLibPanel)];
35
+ return function () {
36
+ cleanups.forEach(function (cleanup) {
37
+ return cleanup();
38
+ });
39
+ };
40
+ }, [registerComponent]);
41
+ useListener(layout.eventHub, MatPlotLibEvent.OPEN, handleOpen);
42
+ return /*#__PURE__*/React.createElement(React.Fragment, null);
43
+ };
44
+ export default MatPlotLibPlugin;
45
+ //# sourceMappingURL=MatPlotLibPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/MatPlotLibPlugin.tsx"],"names":["React","useCallback","useEffect","shortid","LayoutUtils","useListener","MatPlotLibPanel","MatPlotLibEvent","MatPlotLibPlugin","id","layout","registerComponent","handleOpen","title","makeModel","metadata","panelId","generate","dragEvent","config","type","component","COMPONENT","props","localDashboardId","root","openComponent","cleanups","forEach","cleanup","eventHub","OPEN"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,QAA8C,OAA9C;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,SAEEC,WAFF,EAGEC,WAHF,QAIO,sBAJP;AAKA,SAASC,eAAT,QAAgC,UAAhC;AACA,SAASC,eAAT,QAAgC,UAAhC;AAEA,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,OAIkB;AAAA,MAHhDC,EAGgD,QAHhDA,EAGgD;AAAA,MAFhDC,MAEgD,QAFhDA,MAEgD;AAAA,MADhDC,iBACgD,QADhDA,iBACgD;AAChD,MAAMC,UAAU,GAAGX,WAAW,CAC5B,UACEY,KADF,EAEEC,SAFF,EAMK;AAAA,QAHHC,QAGG,uEAHiC,EAGjC;AAAA,QAFHC,OAEG,uEAFOb,OAAO,CAACc,QAAR,EAEP;AAAA,QADHC,SACG;AACH,QAAMC,MAAM,GAAG;AACbC,MAAAA,IAAI,EAAE,iBADO;AAEbC,MAAAA,SAAS,EAAEf,eAAe,CAACgB,SAFd;AAGbC,MAAAA,KAAK,EAAE;AACLC,QAAAA,gBAAgB,EAAEf,EADb;AAELA,QAAAA,EAAE,EAAEO,OAFC;AAGLD,QAAAA,QAAQ,EAARA,QAHK;AAILD,QAAAA,SAAS,EAATA;AAJK,OAHM;AASbD,MAAAA,KAAK,EAALA,KATa;AAUbJ,MAAAA,EAAE,EAAEO;AAVS,KAAf;AAaA,QAAQS,IAAR,GAAiBf,MAAjB,CAAQe,IAAR;AACArB,IAAAA,WAAW,CAACsB,aAAZ,CAA0B;AAAED,MAAAA,IAAI,EAAJA,IAAF;AAAQN,MAAAA,MAAM,EAANA,MAAR;AAAgBD,MAAAA,SAAS,EAATA;AAAhB,KAA1B;AACD,GAvB2B,EAwB5B,CAACT,EAAD,EAAKC,MAAL,CAxB4B,CAA9B;AA2BAR,EAAAA,SAAS,CAAC,YAAM;AACd,QAAMyB,QAAQ,GAAG,CACfhB,iBAAiB,CAACL,eAAe,CAACgB,SAAjB,EAA4BhB,eAA5B,CADF,CAAjB;AAIA,WAAO,YAAM;AACXqB,MAAAA,QAAQ,CAACC,OAAT,CAAiB,UAAAC,OAAO;AAAA,eAAIA,OAAO,EAAX;AAAA,OAAxB;AACD,KAFD;AAGD,GARQ,EAQN,CAAClB,iBAAD,CARM,CAAT;AAUAN,EAAAA,WAAW,CAACK,MAAM,CAACoB,QAAR,EAAkBvB,eAAe,CAACwB,IAAlC,EAAwCnB,UAAxC,CAAX;AAEA,sBAAO,yCAAP;AACD,CA7CM;AA+CP,eAAeJ,gBAAf","sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MatPlotLibPanel } from './panels';\nimport { MatPlotLibEvent } from './events';\n\nexport const MatPlotLibPlugin = ({\n id,\n layout,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const handleOpen = useCallback(\n (\n title: string,\n makeModel: () => Promise<string>,\n metadata: Record<string, unknown> = {},\n panelId = shortid.generate(),\n dragEvent?: DragEvent\n ) => {\n const config = {\n type: 'react-component',\n component: MatPlotLibPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(MatPlotLibPanel.COMPONENT, MatPlotLibPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, MatPlotLibEvent.OPEN, handleOpen);\n\n return <></>;\n};\n\nexport default MatPlotLibPlugin;\n"],"file":"MatPlotLibPlugin.js"}
@@ -1,11 +1,6 @@
1
1
  .dropdown-filter-panel-component .lm_content {
2
- z-index: 15;
3
2
  overflow: visible;
4
3
  }
5
- .dropdown-filter-panel-component .react-card-front,
6
- .dropdown-filter-panel-component .react-card-back {
7
- overflow: hidden;
8
- }
9
4
 
10
5
  .dropdown-filter {
11
6
  background: #1a171a;
@@ -17,21 +12,19 @@
17
12
  }
18
13
  .dropdown-filter .dropdown-filter-settings-card,
19
14
  .dropdown-filter .dropdown-filter-value-card {
15
+ position: relative;
16
+ overflow: auto;
17
+ height: 100%;
20
18
  background: #2d2a2e;
21
19
  }
22
20
  .dropdown-filter .dropdown-filter-card-content {
23
- display: flex;
24
- flex-direction: column;
25
- justify-content: center;
26
- padding: 1rem;
27
- max-width: 500px;
28
- min-width: 250px;
29
- margin: 0 auto;
30
- width: 100%;
31
- min-height: 100%;
21
+ margin: auto;
22
+ padding: 0.25rem;
32
23
  }
33
24
  .dropdown-filter .dropdown-filter-settings-card {
34
- overflow: auto;
25
+ display: flex;
26
+ justify-content: center;
27
+ align-items: center;
35
28
  }
36
29
  .dropdown-filter .dropdown-filter-settings-grid {
37
30
  display: grid;
@@ -50,11 +43,11 @@
50
43
  .dropdown-filter .dropdown-filter-settings-buttons {
51
44
  display: flex;
52
45
  justify-content: flex-end;
46
+ flex-wrap: wrap;
53
47
  }
54
48
  .dropdown-filter .dropdown-filter-value-card {
55
- overflow: auto;
56
- }
57
- .dropdown-filter .dropdown-filter-value-card .dropdown-filter-card-content {
49
+ display: flex;
50
+ justify-content: center;
58
51
  align-items: center;
59
52
  }
60
53
  .dropdown-filter .dropdown-filter-column {
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.scss","../../../../components/scss/bootstrap_overrides.scss","../../../../components/scss/new_variables.scss","../../../../../node_modules/bootstrap/scss/_variables.scss"],"names":[],"mappings":"AAKE;EAEE;EACA;;AAGF;AAAA;EAGE;;;AAIJ;EACE,YCLe;;ADOf;EACE,OCnBE;EDoBF,eElBO;EFmBP;;AAGF;AAAA;EAEE,YClBY;;ADqBd;EACE;EACA;EACA;EACA,SGoGK;EHnGL;EACA;EACA;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;EACA,YEjDO;EFkDP,SElDO;EFmDP,gBGkFK;;AHhFL;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;;AAIF;EACE;;AACA;EACE;;AAIJ;EACE;EACA;EACA;EACA,SEhFO;EFiFP,OC/DO;EDgEP;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA,SE9FO;;AFgGP;EACE;EACA,OCvFW;EDwFX;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA","file":"DropdownFilter.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.scss","../../../../components/scss/bootstrap_overrides.scss","../../../../components/scss/new_variables.scss","../../../../../node_modules/bootstrap/scss/_variables.scss"],"names":[],"mappings":"AAKE;EAEE;;;AAIJ;EACE,YCEe;;ADAf;EACE,OCZE;EDaF,eEXO;EFYP;;AAGF;AAAA;EAEE;EACA;EACA;EACA,YCdY;;ADiBd;EACE;EACA,SE5BO;;AFgCT;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA,YExCO;EFyCP,SEzCO;EF0CP,gBG2FK;;AHzFL;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA,SEvEO;EFwEP,OCtDO;EDuDP;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA,SErFO;;AFuFP;EACE;EACA,OC9EW;ED+EX;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA","file":"DropdownFilter.css"}