@deephaven/dashboard-core-plugins 0.42.1-beta.4 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/prop-types/UIPropTypes.d.ts +1 -6
  2. package/dist/prop-types/UIPropTypes.d.ts.map +1 -1
  3. package/package.json +22 -22
  4. package/dist/ChartBuilderPlugin.js +0 -54
  5. package/dist/ChartBuilderPlugin.js.map +0 -1
  6. package/dist/ChartPlugin.js +0 -66
  7. package/dist/ChartPlugin.js.map +0 -1
  8. package/dist/ConsolePlugin.js +0 -396
  9. package/dist/ConsolePlugin.js.map +0 -1
  10. package/dist/FilterPlugin.js +0 -205
  11. package/dist/FilterPlugin.js.map +0 -1
  12. package/dist/GridPlugin.js +0 -74
  13. package/dist/GridPlugin.js.map +0 -1
  14. package/dist/LinkerPlugin.js +0 -18
  15. package/dist/LinkerPlugin.js.map +0 -1
  16. package/dist/MarkdownPlugin.js +0 -87
  17. package/dist/MarkdownPlugin.js.map +0 -1
  18. package/dist/PandasPlugin.js +0 -66
  19. package/dist/PandasPlugin.js.map +0 -1
  20. package/dist/controls/ControlType.js +0 -10
  21. package/dist/controls/ControlType.js.map +0 -1
  22. package/dist/controls/dropdown-filter/DropdownFilter.css +0 -86
  23. package/dist/controls/dropdown-filter/DropdownFilter.css.map +0 -1
  24. package/dist/controls/dropdown-filter/DropdownFilter.js +0 -417
  25. package/dist/controls/dropdown-filter/DropdownFilter.js.map +0 -1
  26. package/dist/controls/input-filter/InputFilter.css +0 -75
  27. package/dist/controls/input-filter/InputFilter.css.map +0 -1
  28. package/dist/controls/input-filter/InputFilter.js +0 -291
  29. package/dist/controls/input-filter/InputFilter.js.map +0 -1
  30. package/dist/controls/markdown/MarkdownContainer.js +0 -30
  31. package/dist/controls/markdown/MarkdownContainer.js.map +0 -1
  32. package/dist/controls/markdown/MarkdownEditor.js +0 -52
  33. package/dist/controls/markdown/MarkdownEditor.js.map +0 -1
  34. package/dist/controls/markdown/MarkdownStartPage.js +0 -109
  35. package/dist/controls/markdown/MarkdownStartPage.js.map +0 -1
  36. package/dist/controls/markdown/MarkdownUtils.js +0 -23
  37. package/dist/controls/markdown/MarkdownUtils.js.map +0 -1
  38. package/dist/events/ChartEvent.js +0 -9
  39. package/dist/events/ChartEvent.js.map +0 -1
  40. package/dist/events/ConsoleEvent.js +0 -11
  41. package/dist/events/ConsoleEvent.js.map +0 -1
  42. package/dist/events/InputFilterEvent.js +0 -14
  43. package/dist/events/InputFilterEvent.js.map +0 -1
  44. package/dist/events/IrisGridEvent.js +0 -12
  45. package/dist/events/IrisGridEvent.js.map +0 -1
  46. package/dist/events/MarkdownEvent.js +0 -4
  47. package/dist/events/MarkdownEvent.js.map +0 -1
  48. package/dist/events/NotebookEvent.js +0 -15
  49. package/dist/events/NotebookEvent.js.map +0 -1
  50. package/dist/events/PQEvent.js +0 -9
  51. package/dist/events/PQEvent.js.map +0 -1
  52. package/dist/events/PandasEvent.js +0 -8
  53. package/dist/events/PandasEvent.js.map +0 -1
  54. package/dist/events/TabEvent.js +0 -12
  55. package/dist/events/TabEvent.js.map +0 -1
  56. package/dist/events/index.js +0 -9
  57. package/dist/events/index.js.map +0 -1
  58. package/dist/index.js +0 -17
  59. package/dist/index.js.map +0 -1
  60. package/dist/linker/ColumnSelectionValidator.js +0 -2
  61. package/dist/linker/ColumnSelectionValidator.js.map +0 -1
  62. package/dist/linker/Linker.js +0 -736
  63. package/dist/linker/Linker.js.map +0 -1
  64. package/dist/linker/LinkerLink.css +0 -142
  65. package/dist/linker/LinkerLink.css.map +0 -1
  66. package/dist/linker/LinkerLink.js +0 -314
  67. package/dist/linker/LinkerLink.js.map +0 -1
  68. package/dist/linker/LinkerOverlayContent.css +0 -63
  69. package/dist/linker/LinkerOverlayContent.css.map +0 -1
  70. package/dist/linker/LinkerOverlayContent.js +0 -343
  71. package/dist/linker/LinkerOverlayContent.js.map +0 -1
  72. package/dist/linker/LinkerUtils.js +0 -139
  73. package/dist/linker/LinkerUtils.js.map +0 -1
  74. package/dist/linker/ToolType.js +0 -5
  75. package/dist/linker/ToolType.js.map +0 -1
  76. package/dist/linker/index.js +0 -2
  77. package/dist/linker/index.js.map +0 -1
  78. package/dist/panels/ChartColumnSelectorOverlay.css +0 -11
  79. package/dist/panels/ChartColumnSelectorOverlay.css.map +0 -1
  80. package/dist/panels/ChartColumnSelectorOverlay.js +0 -38
  81. package/dist/panels/ChartColumnSelectorOverlay.js.map +0 -1
  82. package/dist/panels/ChartFilterOverlay.css +0 -22
  83. package/dist/panels/ChartFilterOverlay.css.map +0 -1
  84. package/dist/panels/ChartFilterOverlay.js +0 -90
  85. package/dist/panels/ChartFilterOverlay.js.map +0 -1
  86. package/dist/panels/ChartPanel.css +0 -38
  87. package/dist/panels/ChartPanel.css.map +0 -1
  88. package/dist/panels/ChartPanel.js +0 -971
  89. package/dist/panels/ChartPanel.js.map +0 -1
  90. package/dist/panels/ChartPanelUtils.js +0 -5
  91. package/dist/panels/ChartPanelUtils.js.map +0 -1
  92. package/dist/panels/CommandHistoryPanel.css +0 -19
  93. package/dist/panels/CommandHistoryPanel.css.map +0 -1
  94. package/dist/panels/CommandHistoryPanel.js +0 -195
  95. package/dist/panels/CommandHistoryPanel.js.map +0 -1
  96. package/dist/panels/ConsolePanel.css +0 -19
  97. package/dist/panels/ConsolePanel.css.map +0 -1
  98. package/dist/panels/ConsolePanel.js +0 -365
  99. package/dist/panels/ConsolePanel.js.map +0 -1
  100. package/dist/panels/DropdownFilterPanel.css +0 -6
  101. package/dist/panels/DropdownFilterPanel.css.map +0 -1
  102. package/dist/panels/DropdownFilterPanel.js +0 -685
  103. package/dist/panels/DropdownFilterPanel.js.map +0 -1
  104. package/dist/panels/FileExplorerPanel.css +0 -6
  105. package/dist/panels/FileExplorerPanel.css.map +0 -1
  106. package/dist/panels/FileExplorerPanel.js +0 -252
  107. package/dist/panels/FileExplorerPanel.js.map +0 -1
  108. package/dist/panels/FilterSetManager.css +0 -112
  109. package/dist/panels/FilterSetManager.css.map +0 -1
  110. package/dist/panels/FilterSetManager.js +0 -689
  111. package/dist/panels/FilterSetManager.js.map +0 -1
  112. package/dist/panels/FilterSetManagerPanel.css +0 -34
  113. package/dist/panels/FilterSetManagerPanel.css.map +0 -1
  114. package/dist/panels/FilterSetManagerPanel.js +0 -345
  115. package/dist/panels/FilterSetManagerPanel.js.map +0 -1
  116. package/dist/panels/InputFilterPanel.js +0 -232
  117. package/dist/panels/InputFilterPanel.js.map +0 -1
  118. package/dist/panels/IrisGridPanel.css +0 -24
  119. package/dist/panels/IrisGridPanel.css.map +0 -1
  120. package/dist/panels/IrisGridPanel.js +0 -1018
  121. package/dist/panels/IrisGridPanel.js.map +0 -1
  122. package/dist/panels/IrisGridPanelTooltip.js +0 -39
  123. package/dist/panels/IrisGridPanelTooltip.js.map +0 -1
  124. package/dist/panels/LogPanel.css +0 -15
  125. package/dist/panels/LogPanel.css.map +0 -1
  126. package/dist/panels/LogPanel.js +0 -110
  127. package/dist/panels/LogPanel.js.map +0 -1
  128. package/dist/panels/MarkdownNotebook.css +0 -107
  129. package/dist/panels/MarkdownNotebook.css.map +0 -1
  130. package/dist/panels/MarkdownNotebook.js +0 -232
  131. package/dist/panels/MarkdownNotebook.js.map +0 -1
  132. package/dist/panels/MarkdownPanel.css +0 -90
  133. package/dist/panels/MarkdownPanel.css.map +0 -1
  134. package/dist/panels/MarkdownPanel.js +0 -202
  135. package/dist/panels/MarkdownPanel.js.map +0 -1
  136. package/dist/panels/MockFileStorage.js +0 -70
  137. package/dist/panels/MockFileStorage.js.map +0 -1
  138. package/dist/panels/MockFileStorageTable.js +0 -80
  139. package/dist/panels/MockFileStorageTable.js.map +0 -1
  140. package/dist/panels/NotebookPanel.css +0 -44
  141. package/dist/panels/NotebookPanel.css.map +0 -1
  142. package/dist/panels/NotebookPanel.js +0 -1224
  143. package/dist/panels/NotebookPanel.js.map +0 -1
  144. package/dist/panels/PandasPanel.css +0 -15
  145. package/dist/panels/PandasPanel.css.map +0 -1
  146. package/dist/panels/PandasPanel.js +0 -86
  147. package/dist/panels/PandasPanel.js.map +0 -1
  148. package/dist/panels/Panel.js +0 -314
  149. package/dist/panels/Panel.js.map +0 -1
  150. package/dist/panels/PanelContextMenu.js +0 -126
  151. package/dist/panels/PanelContextMenu.js.map +0 -1
  152. package/dist/panels/RenameDialog.js +0 -156
  153. package/dist/panels/RenameDialog.js.map +0 -1
  154. package/dist/panels/WidgetPanel.css +0 -17
  155. package/dist/panels/WidgetPanel.css.map +0 -1
  156. package/dist/panels/WidgetPanel.js +0 -189
  157. package/dist/panels/WidgetPanel.js.map +0 -1
  158. package/dist/panels/WidgetPanelTooltip.css +0 -40
  159. package/dist/panels/WidgetPanelTooltip.css.map +0 -1
  160. package/dist/panels/WidgetPanelTooltip.js +0 -49
  161. package/dist/panels/WidgetPanelTooltip.js.map +0 -1
  162. package/dist/panels/index.js +0 -22
  163. package/dist/panels/index.js.map +0 -1
  164. package/dist/prop-types/CommonPropTypes.js +0 -9
  165. package/dist/prop-types/CommonPropTypes.js.map +0 -1
  166. package/dist/prop-types/UIPropTypes.js +0 -47
  167. package/dist/prop-types/UIPropTypes.js.map +0 -1
  168. package/dist/prop-types/index.js +0 -3
  169. package/dist/prop-types/index.js.map +0 -1
  170. package/dist/redux/actionTypes.js +0 -3
  171. package/dist/redux/actionTypes.js.map +0 -1
  172. package/dist/redux/actions.js +0 -88
  173. package/dist/redux/actions.js.map +0 -1
  174. package/dist/redux/index.js +0 -10
  175. package/dist/redux/index.js.map +0 -1
  176. package/dist/redux/reducers/connection.js +0 -7
  177. package/dist/redux/reducers/connection.js.map +0 -1
  178. package/dist/redux/reducers/index.js +0 -5
  179. package/dist/redux/reducers/index.js.map +0 -1
  180. package/dist/redux/reducers/sessionWrapper.js +0 -7
  181. package/dist/redux/reducers/sessionWrapper.js.map +0 -1
  182. package/dist/redux/selectors.js +0 -92
  183. package/dist/redux/selectors.js.map +0 -1
@@ -1,1224 +0,0 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
- // Wrapper for the Notebook for use in a golden layout container
7
- import React, { Component } from 'react';
8
- import ReactDOM from 'react-dom';
9
- import memoize from 'memoize-one';
10
- import { connect } from 'react-redux';
11
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
12
- import { BasicModal, ContextActions, DropdownMenu, Tooltip, GLOBAL_SHORTCUTS, Button } from '@deephaven/components';
13
- import { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';
14
- import { FileUtils, NewItemModal } from '@deephaven/file-explorer';
15
- import { vsSave, vsKebabVertical, dhFileSearch, vsPlay, dhRunSelection, vsCheck } from '@deephaven/icons';
16
- import { getFileStorage, saveSettings as saveSettingsAction, getSettings, getDefaultNotebookSettings } from '@deephaven/redux';
17
- import classNames from 'classnames';
18
- import debounce from 'lodash.debounce';
19
- import Log from '@deephaven/log';
20
- import { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';
21
- import { PanelEvent } from '@deephaven/dashboard';
22
- import { ConsoleEvent, NotebookEvent } from "../events/index.js";
23
- import { getDashboardSessionWrapper } from "../redux/index.js";
24
- import Panel from "./Panel.js";
25
- import MarkdownNotebook from "./MarkdownNotebook.js";
26
- import "./NotebookPanel.css";
27
- var log = Log.module('NotebookPanel');
28
- var DEBOUNCE_PANEL_STATE_UPDATE = 400;
29
- class NotebookPanel extends Component {
30
- static handleError(error) {
31
- if (PromiseUtils.isCanceled(error)) {
32
- return;
33
- }
34
- log.error(error);
35
- }
36
- static languageFromFileName(fileName) {
37
- var extension = FileUtils.getExtension(fileName).toLowerCase();
38
- switch (extension) {
39
- case 'py':
40
- case 'python':
41
- return 'python';
42
- case 'groovy':
43
- return 'groovy';
44
- case 'scala':
45
- return 'scala';
46
- default:
47
- return null;
48
- }
49
- }
50
- constructor(props) {
51
- super(props);
52
- _defineProperty(this, "pending", void 0);
53
- _defineProperty(this, "debouncedSavePanelState", void 0);
54
- _defineProperty(this, "debouncedLoad", void 0);
55
- _defineProperty(this, "notebook", void 0);
56
- _defineProperty(this, "tabTitleElement", void 0);
57
- _defineProperty(this, "tabInitOnce", void 0);
58
- _defineProperty(this, "editor", void 0);
59
- _defineProperty(this, "getSettings", memoize((initialSettings, isMinimapEnabled) => _objectSpread(_objectSpread({}, initialSettings), {}, {
60
- minimap: {
61
- enabled: isMinimapEnabled
62
- }
63
- })));
64
- _defineProperty(this, "getOverflowActions", memoize((isMinimapEnabled, isWordWrapEnabled) => [{
65
- title: 'Find',
66
- icon: dhFileSearch,
67
- action: this.handleFind,
68
- group: ContextActions.groups.high,
69
- shortcut: SHORTCUTS.NOTEBOOK.FIND,
70
- order: 10
71
- }, {
72
- title: 'Show Minimap',
73
- icon: isMinimapEnabled ? vsCheck : undefined,
74
- action: this.handleMinimapChange,
75
- group: ContextActions.groups.medium,
76
- shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,
77
- order: 20
78
- }, {
79
- title: 'Word Wrap',
80
- icon: isWordWrapEnabled ? vsCheck : undefined,
81
- action: this.handleWordWrapChange,
82
- group: ContextActions.groups.medium,
83
- shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,
84
- order: 30
85
- }]));
86
- this.handleBlur = this.handleBlur.bind(this);
87
- this.handleCloseCancel = this.handleCloseCancel.bind(this);
88
- this.handleCloseDiscard = this.handleCloseDiscard.bind(this);
89
- this.handleCloseSave = this.handleCloseSave.bind(this);
90
- this.handleCopy = this.handleCopy.bind(this);
91
- this.handleEditorInitialized = this.handleEditorInitialized.bind(this);
92
- this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);
93
- this.handleEditorChange = this.handleEditorChange.bind(this);
94
- this.handleFind = this.handleFind.bind(this);
95
- this.handleMinimapChange = this.handleMinimapChange.bind(this);
96
- this.handleWordWrapChange = this.handleWordWrapChange.bind(this);
97
- this.handleFocus = this.handleFocus.bind(this);
98
- this.handleLinkClick = this.handleLinkClick.bind(this);
99
- this.handleLoadSuccess = this.handleLoadSuccess.bind(this);
100
- this.handleLoadError = this.handleLoadError.bind(this);
101
- this.handlePanelDropped = this.handlePanelDropped.bind(this);
102
- this.handleRenameFile = this.handleRenameFile.bind(this);
103
- this.handleResize = this.handleResize.bind(this);
104
- this.handleRunCommand = this.handleRunCommand.bind(this);
105
- this.handleRunAll = this.handleRunAll.bind(this);
106
- this.handleRunSelected = this.handleRunSelected.bind(this);
107
- this.handleSave = this.handleSave.bind(this);
108
- this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);
109
- this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);
110
- this.handleSaveError = this.handleSaveError.bind(this);
111
- this.handleSaveSuccess = this.handleSaveSuccess.bind(this);
112
- this.handleSessionOpened = this.handleSessionOpened.bind(this);
113
- this.handleSessionClosed = this.handleSessionClosed.bind(this);
114
- this.handleShow = this.handleShow.bind(this);
115
- this.handleShowRename = this.handleShowRename.bind(this);
116
- this.handleTab = this.handleTab.bind(this);
117
- this.handleTabBlur = this.handleTabBlur.bind(this);
118
- this.handleTabClick = this.handleTabClick.bind(this);
119
- this.handleTabFocus = this.handleTabFocus.bind(this);
120
- this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);
121
- this.handleOverwrite = this.handleOverwrite.bind(this);
122
- this.handlePreviewPromotion = this.handlePreviewPromotion.bind(this);
123
- this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(this);
124
- this.pending = new Pending();
125
- this.debouncedSavePanelState = debounce(this.savePanelState.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);
126
- this.debouncedLoad = debounce(this.load.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);
127
- this.notebook = null;
128
- this.tabTitleElement = null;
129
- this.tabInitOnce = false;
130
- var {
131
- isDashboardActive,
132
- session,
133
- sessionLanguage,
134
- panelState
135
- } = props;
136
- var settings = {
137
- value: '',
138
- language: '',
139
- wordWrap: 'off'
140
- };
141
- var fileMetadata = null;
142
- var {
143
- isPreview
144
- } = props;
145
- if (panelState != null) {
146
- ({
147
- fileMetadata = fileMetadata,
148
- isPreview = isPreview,
149
- settings = settings
150
- } = panelState);
151
- }
152
-
153
- // Not showing the unsaved indicator for null file id and editor content === '',
154
- // may need to implement some other indication that this notebook has never been saved
155
- var hasFileId = fileMetadata != null && FileUtils.hasPath(fileMetadata.itemName);
156
-
157
- // Unsaved if file id != null and content != null
158
- // OR file id is null AND content is not null or ''
159
- var isUnsaved = hasFileId === true && settings.value != null || !hasFileId && settings.value != null && settings.value.length > 0;
160
- var changeCount = isUnsaved ? 1 : 0;
161
- this.state = {
162
- error: undefined,
163
- isDashboardActive,
164
- isFocused: false,
165
- isLoading: true,
166
- isLoaded: false,
167
- isPreview,
168
- savedChangeCount: 0,
169
- changeCount,
170
- fileMetadata,
171
- settings,
172
- session,
173
- sessionLanguage,
174
- // eslint-disable-next-line react/no-unused-state
175
- panelState: {
176
- fileMetadata,
177
- settings
178
- },
179
- showCloseModal: false,
180
- showSaveAsModal: false,
181
- scriptCode: ''
182
- };
183
- log.debug('constructor', props, this.state);
184
- }
185
- componentDidMount() {
186
- var {
187
- glContainer,
188
- glEventHub
189
- } = this.props;
190
- var {
191
- tab
192
- } = glContainer;
193
- if (tab != null) this.initTab(tab);
194
- this.initNotebookContent();
195
- glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);
196
- glEventHub.on(PanelEvent.DROPPED, this.handlePanelDropped);
197
- glContainer.on(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);
198
- }
199
- componentDidUpdate(prevProps, prevState) {
200
- var {
201
- isPreview,
202
- settings
203
- } = this.state;
204
- var {
205
- wordWrap
206
- } = settings;
207
- var {
208
- defaultNotebookSettings
209
- } = this.props;
210
- if (isPreview !== prevState.isPreview) {
211
- this.setPreviewStatus();
212
- }
213
- if (wordWrap !== prevState.settings.wordWrap) {
214
- this.updateEditorWordWrap();
215
- this.debouncedSavePanelState();
216
- }
217
- if (defaultNotebookSettings.isMinimapEnabled !== prevProps.defaultNotebookSettings.isMinimapEnabled) {
218
- this.updateEditorMinimap();
219
- }
220
- }
221
- componentWillUnmount() {
222
- this.debouncedSavePanelState.flush();
223
- this.pending.cancel();
224
- var {
225
- glEventHub,
226
- glContainer
227
- } = this.props;
228
- var {
229
- fileMetadata,
230
- isPreview
231
- } = this.state;
232
- glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);
233
- glEventHub.off(PanelEvent.DROPPED, this.handlePanelDropped);
234
- glContainer.off(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);
235
- glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);
236
- }
237
- // Called by TabEvent. Happens once when created, but also each time its moved.
238
- // when moved, need to re-init the unsaved indicators on title elements
239
- initTab(tab) {
240
- if (!this.tabInitOnce) {
241
- this.tabInitOnce = true;
242
- this.initTabCloseOverride();
243
- }
244
- this.initTabClasses(tab);
245
- }
246
-
247
- /**
248
- * Adds a beforeClose handler to check if a notebook needs to be saved
249
- * Call panel close with force if the check can be skipped
250
- *
251
- * Note that firing a close event manually may trigger before state update occurs
252
- * In those instances, use force
253
- */
254
- initTabCloseOverride() {
255
- var {
256
- glContainer
257
- } = this.props;
258
- glContainer.beforeClose(options => {
259
- if ((options === null || options === void 0 ? void 0 : options.force) === true) {
260
- return true;
261
- }
262
- var {
263
- changeCount,
264
- savedChangeCount
265
- } = this.state;
266
- if (changeCount !== savedChangeCount) {
267
- this.setState({
268
- showCloseModal: true
269
- });
270
- return false;
271
- }
272
- return true;
273
- });
274
- }
275
- initTabClasses(tab) {
276
- var tabElement = tab.element.get(0);
277
- assertNotNull(tabElement);
278
- var titleElement = tabElement.querySelector('.lm_title');
279
- this.tabTitleElement = titleElement;
280
- titleElement === null || titleElement === void 0 ? void 0 : titleElement.classList.add('notebook-title');
281
- this.setPreviewStatus();
282
- }
283
- getNotebookValue() {
284
- var {
285
- changeCount,
286
- savedChangeCount,
287
- settings
288
- } = this.state;
289
- var {
290
- value
291
- } = settings;
292
- if (changeCount !== savedChangeCount && this.notebook) {
293
- var notebookValue = this.notebook.getValue();
294
- return notebookValue != null ? notebookValue : value;
295
- }
296
- return value;
297
- }
298
- initNotebookContent() {
299
- // Init from file,
300
- // fallback to content from settings for unsaved notebook
301
- var {
302
- fileMetadata,
303
- settings,
304
- isPreview
305
- } = this.state;
306
- if (fileMetadata && fileMetadata.id) {
307
- log.debug('Init content from file');
308
- this.registerFileMetadata(fileMetadata, isPreview);
309
- this.load();
310
- return;
311
- }
312
- if (settings.value != null) {
313
- log.debug('Use content passed in the settings prop');
314
- this.handleLoadSuccess();
315
- return;
316
- }
317
- // No settings, no metadata
318
- this.handleLoadError(new Error('Missing file metadata'));
319
- }
320
- closeFileTabById(id) {
321
- var {
322
- glEventHub
323
- } = this.props;
324
- glEventHub.emit(NotebookEvent.CLOSE_FILE, {
325
- id
326
- });
327
- }
328
-
329
- // Associate file id with the current tab
330
- // so the next time the file is opened this tab can be focused instead of opening a new tab
331
- registerFileMetadata(fileMetadata, isPreview) {
332
- var {
333
- glEventHub,
334
- metadata
335
- } = this.props;
336
- var {
337
- id: tabId
338
- } = metadata;
339
- glEventHub.emit(NotebookEvent.REGISTER_FILE, tabId, fileMetadata, isPreview);
340
- }
341
- renameTab(id, title) {
342
- var {
343
- glEventHub
344
- } = this.props;
345
- glEventHub.emit(NotebookEvent.RENAME, id, title);
346
- }
347
- load() {
348
- var {
349
- fileMetadata,
350
- settings
351
- } = this.state;
352
- assertNotNull(fileMetadata);
353
- var {
354
- id
355
- } = fileMetadata;
356
- var {
357
- fileStorage
358
- } = this.props;
359
- this.pending.add(fileStorage.loadFile(id)).then(loadedFile => {
360
- var _NotebookPanel$langua;
361
- log.debug('Loaded file', loadedFile);
362
- var {
363
- filename: itemName
364
- } = loadedFile;
365
- var {
366
- itemName: prevItemName
367
- } = this.state;
368
- if (itemName !== prevItemName) {
369
- var {
370
- metadata
371
- } = this.props;
372
- var {
373
- id: tabId
374
- } = metadata;
375
- this.renameTab(tabId, FileUtils.getBaseName(itemName));
376
- }
377
- var updatedSettings = _objectSpread(_objectSpread({}, settings), {}, {
378
- language: (_NotebookPanel$langua = NotebookPanel.languageFromFileName(itemName)) !== null && _NotebookPanel$langua !== void 0 ? _NotebookPanel$langua : ''
379
- });
380
- if (settings.value == null) {
381
- updatedSettings.value = loadedFile.content;
382
- }
383
- if (settings.wordWrap === undefined) {
384
- settings.wordWrap = 'off';
385
- }
386
- this.setState({
387
- fileMetadata: {
388
- id: itemName,
389
- itemName
390
- },
391
- settings: updatedSettings
392
- });
393
- this.debouncedSavePanelState();
394
- }).then(this.handleLoadSuccess).catch(this.handleLoadError);
395
- }
396
-
397
- /**
398
- * Attempts to save the notebook.
399
- * @returns Returns true if save has begun, false if user needed to be prompted
400
- */
401
- save() {
402
- var {
403
- fileMetadata
404
- } = this.state;
405
- if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {
406
- var content = this.getNotebookValue();
407
- if (content !== undefined) {
408
- this.saveContent(fileMetadata.itemName, content);
409
- return true;
410
- }
411
- return false;
412
- }
413
- this.setState({
414
- showSaveAsModal: true
415
- });
416
- return false;
417
- }
418
-
419
- /**
420
- * Update existing file content
421
- * @param filename The name of the file
422
- * @param content New file content
423
- */
424
- saveContent(filename, content) {
425
- log.debug('saveContent', filename, content);
426
- this.updateSavedChangeCount();
427
- var {
428
- fileStorage
429
- } = this.props;
430
- this.pending.add(fileStorage.saveFile({
431
- filename,
432
- content,
433
- basename: filename
434
- })).then(this.handleSaveSuccess).catch(this.handleSaveError);
435
- }
436
- updateSavedChangeCount() {
437
- this.setState(_ref => {
438
- var {
439
- changeCount
440
- } = _ref;
441
- return {
442
- savedChangeCount: changeCount
443
- };
444
- });
445
- }
446
- setPreviewStatus() {
447
- if (!this.tabTitleElement) {
448
- return;
449
- }
450
- var {
451
- isPreview
452
- } = this.state;
453
- log.debug('setPreviewStatus', this.tabTitleElement, isPreview);
454
- if (isPreview) {
455
- this.tabTitleElement.classList.add('is-preview');
456
- } else {
457
- this.tabTitleElement.classList.remove('is-preview');
458
- }
459
- }
460
- handlePreviewPromotion() {
461
- this.removePreviewStatus();
462
- }
463
- savePanelState() {
464
- this.setState(state => {
465
- var {
466
- changeCount,
467
- savedChangeCount,
468
- fileMetadata,
469
- isPreview,
470
- settings: initialSettings
471
- } = state;
472
- var value = this.getNotebookValue();
473
- // notebooks with no unsaved changes have value === null in dehydrated state
474
- // content will be loaded from file when hydrating
475
- var dehydratedValue = changeCount !== savedChangeCount ? value : undefined;
476
- var settings = _objectSpread(_objectSpread({}, initialSettings), {}, {
477
- value
478
- });
479
- var dehydratedSettings = _objectSpread(_objectSpread({}, initialSettings), {}, {
480
- value: dehydratedValue
481
- });
482
- var panelState = {
483
- settings: dehydratedSettings,
484
- fileMetadata,
485
- isPreview
486
- };
487
- log.debug('Saving panel state', panelState);
488
- return {
489
- settings,
490
- // eslint-disable-next-line react/no-unused-state
491
- panelState
492
- };
493
- });
494
- }
495
- handleCloseDiscard() {
496
- this.setState({
497
- showCloseModal: false
498
- });
499
- var {
500
- glContainer
501
- } = this.props;
502
- glContainer.close({
503
- force: true
504
- });
505
- }
506
- handleCloseSave() {
507
- this.setState({
508
- showCloseModal: false
509
- });
510
- if (this.save()) {
511
- var {
512
- glContainer
513
- } = this.props;
514
- glContainer.close({
515
- force: true
516
- });
517
- }
518
- }
519
- handleCloseCancel() {
520
- this.setState({
521
- showCloseModal: false
522
- });
523
- }
524
-
525
- /**
526
- * Closes overwritten tabs
527
- * @param fileName The name of the file to be overwritten
528
- */
529
- handleOverwrite(fileName) {
530
- var {
531
- glEventHub
532
- } = this.props;
533
- glEventHub.emit(NotebookEvent.CLOSE_FILE, {
534
- id: fileName,
535
- itemName: fileName
536
- }, {
537
- force: true
538
- });
539
- this.focus();
540
- }
541
- handleCopy() {
542
- var {
543
- fileMetadata,
544
- settings
545
- } = this.state;
546
- assertNotNull(fileMetadata);
547
- var content = this.getNotebookValue();
548
- var {
549
- language
550
- } = settings;
551
- var {
552
- itemName
553
- } = fileMetadata;
554
- var copyName = FileUtils.getCopyFileName(itemName);
555
- log.debug('handleCopy', fileMetadata, itemName, copyName);
556
- this.createNotebook(copyName, language, content);
557
- }
558
- handleEditorInitialized(innerEditor) {
559
- this.editor = innerEditor;
560
- }
561
- handleEditorWillDestroy() {
562
- this.editor = undefined;
563
- }
564
- handleEditorChange(e) {
565
- log.debug2('handleEditorChanged', e);
566
- this.removePreviewStatus();
567
- this.setState(state => {
568
- var {
569
- changeCount,
570
- savedChangeCount
571
- } = state;
572
- var {
573
- isUndoing,
574
- isRedoing
575
- } = e;
576
- if (isUndoing) {
577
- // Note that it's possible to undo past where the user last saved, if they save and then undo for example
578
- return {
579
- changeCount: changeCount - 1,
580
- savedChangeCount
581
- };
582
- }
583
- if (!isRedoing && changeCount < savedChangeCount) {
584
- // We made another change after undoing some changes from the previous save
585
- // Just reset the saved counter to zero and increase the unchanged saves
586
- // It'll be set correctly on the next save
587
- return {
588
- changeCount: changeCount + 1,
589
- savedChangeCount: 0
590
- };
591
- }
592
- return {
593
- changeCount: changeCount + 1,
594
- savedChangeCount
595
- };
596
- });
597
- this.debouncedSavePanelState();
598
- }
599
- handleFind() {
600
- if (this.notebook) {
601
- this.notebook.toggleFind();
602
- }
603
- }
604
- updateEditorMinimap() {
605
- if (this.editor) {
606
- var {
607
- defaultNotebookSettings
608
- } = this.props;
609
- this.editor.updateOptions({
610
- minimap: {
611
- enabled: defaultNotebookSettings.isMinimapEnabled
612
- }
613
- });
614
- }
615
- }
616
- handleMinimapChange() {
617
- var {
618
- settings,
619
- defaultNotebookSettings,
620
- saveSettings
621
- } = this.props;
622
- var newSettings = _objectSpread(_objectSpread({}, settings), {}, {
623
- defaultNotebookSettings: {
624
- isMinimapEnabled: !defaultNotebookSettings.isMinimapEnabled
625
- }
626
- });
627
- saveSettings(newSettings);
628
- }
629
- updateEditorWordWrap() {
630
- if (this.editor) {
631
- var {
632
- settings: _settings
633
- } = this.state;
634
- var {
635
- wordWrap
636
- } = _settings;
637
- this.editor.updateOptions({
638
- wordWrap
639
- });
640
- }
641
- }
642
- handleWordWrapChange() {
643
- if (this.editor) {
644
- this.setState(prevState => {
645
- var {
646
- settings
647
- } = prevState;
648
- var wordWrap = settings.wordWrap === 'on' ? 'off' : 'on';
649
- return {
650
- settings: _objectSpread(_objectSpread({}, settings), {}, {
651
- wordWrap
652
- })
653
- };
654
- });
655
- }
656
- }
657
- handleBlur() {
658
- log.debug('handleBlur');
659
- this.setState({
660
- isFocused: false
661
- });
662
- }
663
- handleFocus() {
664
- log.debug('handleFocus');
665
- this.setState({
666
- isFocused: true
667
- });
668
- }
669
-
670
- /**
671
- * @param event The click event from clicking on the link
672
- */
673
- handleLinkClick(event) {
674
- var {
675
- notebooksUrl,
676
- session,
677
- sessionLanguage
678
- } = this.props;
679
- var {
680
- href
681
- } = event.currentTarget;
682
- if (!href || !href.startsWith(notebooksUrl)) {
683
- return;
684
- }
685
- event.stopPropagation();
686
- event.preventDefault();
687
- var notebookPath = "/".concat(href.substring(notebooksUrl.length)).replace(/%20/g, ' ');
688
- if (notebookPath === '/') {
689
- log.debug('Ignoring invalid notebook link', notebookPath);
690
- return;
691
- }
692
- log.debug('Notebook link clicked, opening', notebookPath);
693
- var {
694
- glEventHub
695
- } = this.props;
696
- var notebookSettings = {
697
- value: null,
698
- language: sessionLanguage
699
- };
700
- var fileMetadata = {
701
- id: notebookPath,
702
- itemName: notebookPath
703
- };
704
- glEventHub.emit(NotebookEvent.SELECT_NOTEBOOK, session, sessionLanguage, notebookSettings, fileMetadata);
705
- }
706
- handleLoadSuccess() {
707
- this.setState({
708
- error: undefined,
709
- isLoaded: true,
710
- isLoading: false
711
- });
712
- }
713
- handleLoadError(errorParam) {
714
- var error = errorParam;
715
- if (PromiseUtils.isCanceled(error)) {
716
- return;
717
- }
718
- if (PromiseUtils.isTimedOut(error)) {
719
- error = new Error('File not found.');
720
- }
721
- log.error(error);
722
- this.setState({
723
- error,
724
- isLoading: false
725
- });
726
- }
727
- handleSave() {
728
- log.debug('handleSave');
729
- this.save();
730
- }
731
- handleSaveSuccess(file) {
732
- var _NotebookPanel$langua2;
733
- var {
734
- fileStorage
735
- } = this.props;
736
- var fileMetadata = {
737
- id: file.filename,
738
- itemName: file.filename
739
- };
740
- var language = (_NotebookPanel$langua2 = NotebookPanel.languageFromFileName(file.filename)) !== null && _NotebookPanel$langua2 !== void 0 ? _NotebookPanel$langua2 : '';
741
- this.setState(state => {
742
- var {
743
- fileMetadata: oldMetadata
744
- } = state;
745
- var settings = _objectSpread(_objectSpread({}, state.settings), {}, {
746
- language
747
- });
748
- log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);
749
- if (oldMetadata && FileUtils.hasPath(oldMetadata.itemName) && oldMetadata.itemName !== fileMetadata.itemName) {
750
- log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);
751
- fileStorage.deleteFile(oldMetadata.itemName).catch(NotebookPanel.handleError);
752
- }
753
- return {
754
- fileMetadata,
755
- settings,
756
- isPreview: false
757
- };
758
- });
759
- this.debouncedSavePanelState();
760
- this.registerFileMetadata(fileMetadata, false);
761
- }
762
- handleSaveError(error) {
763
- if (PromiseUtils.isCanceled(error)) {
764
- return;
765
- }
766
- // There was an error saving, just reset the savedChangeCount
767
- // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,
768
- // But we may as well continue showing the error until they actually save again
769
- this.setState({
770
- savedChangeCount: 0
771
- });
772
- log.error(error);
773
- }
774
- handleSaveAsCancel() {
775
- this.setState({
776
- showSaveAsModal: false
777
- });
778
- }
779
- handleSaveAsSubmit(name) {
780
- var _this$getNotebookValu;
781
- var isOverwrite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
782
- if (isOverwrite) {
783
- this.handleOverwrite(name);
784
- }
785
- log.debug('handleSaveAsSubmit', name);
786
- var {
787
- fileMetadata
788
- } = this.state;
789
- if (!fileMetadata) {
790
- return;
791
- }
792
- var {
793
- itemName: prevItemName
794
- } = fileMetadata;
795
- var content = (_this$getNotebookValu = this.getNotebookValue()) !== null && _this$getNotebookValu !== void 0 ? _this$getNotebookValu : '';
796
- this.setState({
797
- showSaveAsModal: false
798
- });
799
- if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {
800
- var {
801
- metadata
802
- } = this.props;
803
- var {
804
- id: tabId
805
- } = metadata;
806
- this.renameTab(tabId, FileUtils.getBaseName(name));
807
- }
808
- this.saveContent(name, content);
809
- }
810
- handleRenameFile(oldName, newName, panelState) {
811
- var {
812
- fileMetadata,
813
- panelState: curPanelState
814
- } = this.state;
815
- var {
816
- glContainer
817
- } = this.props;
818
- if ((fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName) === "/".concat(newName) && panelState && JSON.stringify(curPanelState) !== JSON.stringify(panelState)) {
819
- glContainer.close();
820
- return;
821
- }
822
- if (fileMetadata && fileMetadata.id === oldName) {
823
- this.setState({
824
- fileMetadata: {
825
- id: newName,
826
- itemName: newName
827
- }
828
- });
829
- this.debouncedSavePanelState();
830
- }
831
- }
832
- handleResize() {
833
- var _this$notebook;
834
- (_this$notebook = this.notebook) === null || _this$notebook === void 0 ? void 0 : _this$notebook.updateDimensions();
835
- }
836
- handleRunCommand(command) {
837
- this.runCommand(command);
838
- }
839
- handleRunAll() {
840
- var _this$notebook$getVal;
841
- if (!this.notebook) {
842
- log.error('Editor is not initialized.');
843
- return;
844
- }
845
- this.runCommand((_this$notebook$getVal = this.notebook.getValue()) !== null && _this$notebook$getVal !== void 0 ? _this$notebook$getVal : undefined);
846
- }
847
- handleRunSelected() {
848
- if (!this.notebook) {
849
- log.error('Editor is not initialized.');
850
- return;
851
- }
852
- this.runCommand(this.notebook.getSelectedCommand());
853
- }
854
- handleSessionOpened(session, _ref2) {
855
- var {
856
- language
857
- } = _ref2;
858
- this.setState({
859
- session,
860
- sessionLanguage: language
861
- });
862
- }
863
- handleSessionClosed() {
864
- this.setState({
865
- session: undefined,
866
- sessionLanguage: undefined
867
- });
868
- }
869
- handleShow() {
870
- var _this$notebook2;
871
- log.debug('handleShow');
872
- (_this$notebook2 = this.notebook) === null || _this$notebook2 === void 0 ? void 0 : _this$notebook2.updateDimensions();
873
- }
874
- handlePanelDropped(droppedId) {
875
- var {
876
- metadata: {
877
- id
878
- }
879
- } = this.props;
880
- // re-render necessary for portal after being dropped
881
- if (droppedId === id) this.forceUpdate();
882
- }
883
- handleShowRename() {
884
- this.setState({
885
- showSaveAsModal: true
886
- });
887
- }
888
- handleTab(tab) {
889
- log.debug('NotebookPanel tab event', tab);
890
- this.initTab(tab);
891
- }
892
- handleTabFocus() {
893
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
894
- args[_key] = arguments[_key];
895
- }
896
- log.debug('handleTabFocus', ...args);
897
- var {
898
- glContainer
899
- } = this.props;
900
- this.setState({
901
- isDashboardActive: true
902
- });
903
- if (this.notebook && !glContainer.isHidden) {
904
- this.notebook.updateDimensions();
905
- }
906
- }
907
- handleTabBlur() {
908
- log.debug('handleTabBlur');
909
- this.setState({
910
- isDashboardActive: false
911
- });
912
- }
913
- handleTabClick(e) {
914
- log.debug('handle NotebookPanel tab click');
915
- this.focus();
916
- if (e.detail === 2) {
917
- this.removePreviewStatus();
918
- }
919
- }
920
-
921
- /**
922
- * Transform the link URI to load from where the notebook is if it's relative
923
- * @param src The link to transform
924
- * @returns String the transformed link
925
- */
926
- handleTransformLinkUri(src) {
927
- var {
928
- notebooksUrl
929
- } = this.props;
930
- var {
931
- fileMetadata
932
- } = this.state;
933
- if (src.endsWith('/')) {
934
- return src;
935
- }
936
- if (src.startsWith('/')) {
937
- return "".concat(notebooksUrl).concat(src.substring(1));
938
- }
939
- var itemName = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName;
940
- if (itemName === undefined) {
941
- return src;
942
- }
943
- if (itemName.charAt(0) === '/') {
944
- itemName = itemName.substring(1);
945
- }
946
- var itemUri = new URL(itemName, notebooksUrl);
947
- return new URL(src, itemUri).href;
948
- }
949
- focus() {
950
- requestAnimationFrame(() => {
951
- if (this.notebook) {
952
- this.notebook.focus();
953
- }
954
- });
955
- }
956
- createNotebook(itemName, language) {
957
- var content = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
958
- var {
959
- glEventHub
960
- } = this.props;
961
- var {
962
- session,
963
- sessionLanguage,
964
- settings
965
- } = this.state;
966
- var notebookSettings = _objectSpread(_objectSpread({}, settings), {}, {
967
- language,
968
- value: content
969
- });
970
- var fileMetadata = {
971
- id: null,
972
- itemName
973
- };
974
- log.debug('handleCreateNotebook', session, sessionLanguage, notebookSettings, fileMetadata);
975
- glEventHub.emit(NotebookEvent.CREATE_NOTEBOOK, session, sessionLanguage, notebookSettings, fileMetadata);
976
- }
977
- runCommand(command) {
978
- if (command === undefined || command === '') {
979
- log.debug('Ignoring empty command.');
980
- return;
981
- }
982
- this.removePreviewStatus();
983
- var {
984
- glEventHub
985
- } = this.props;
986
- glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);
987
- }
988
- removePreviewStatus() {
989
- this.setState(_ref3 => {
990
- var {
991
- isPreview
992
- } = _ref3;
993
- if (isPreview) {
994
- var {
995
- fileMetadata
996
- } = this.state;
997
- if (fileMetadata) {
998
- this.registerFileMetadata(fileMetadata, false);
999
- }
1000
- return {
1001
- isPreview: false
1002
- };
1003
- }
1004
- return null;
1005
- });
1006
- }
1007
- getDropdownOverflowActions() {
1008
- var {
1009
- defaultNotebookSettings
1010
- } = this.props;
1011
- var {
1012
- settings: initialSettings
1013
- } = this.state;
1014
- return this.getOverflowActions(defaultNotebookSettings.isMinimapEnabled, this.getSettings(initialSettings, defaultNotebookSettings.isMinimapEnabled).wordWrap === 'on');
1015
- }
1016
- render() {
1017
- var _fileMetadata$itemNam, _settings$value;
1018
- var {
1019
- fileStorage,
1020
- glContainer,
1021
- glContainer: {
1022
- tab
1023
- },
1024
- glEventHub,
1025
- defaultNotebookSettings
1026
- } = this.props;
1027
- var {
1028
- changeCount,
1029
- savedChangeCount,
1030
- error,
1031
- isDashboardActive,
1032
- isLoaded,
1033
- isLoading,
1034
- isPreview,
1035
- fileMetadata,
1036
- session,
1037
- sessionLanguage,
1038
- settings: initialSettings,
1039
- showCloseModal,
1040
- showSaveAsModal
1041
- } = this.state;
1042
- // We don't want to steal focus if this isn't shown or it's just a preview
1043
- var focusOnMount = isDashboardActive && !glContainer.isHidden && !isPreview;
1044
- var itemName = (_fileMetadata$itemNam = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName) !== null && _fileMetadata$itemNam !== void 0 ? _fileMetadata$itemNam : NotebookPanel.DEFAULT_NAME;
1045
- var isMarkdown = itemName.endsWith('.md');
1046
- var isExistingItem = (fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.id) != null;
1047
- var settings = this.getSettings(initialSettings, defaultNotebookSettings.isMinimapEnabled);
1048
- var isSessionConnected = session != null;
1049
- var isLanguageMatching = sessionLanguage === settings.language;
1050
- var runButtonsDisabled = !isLoaded || !isSessionConnected || !isLanguageMatching;
1051
- var toolbarDisabled = !isLoaded;
1052
- var contextActions = [{
1053
- action: this.handleSave,
1054
- shortcut: GLOBAL_SHORTCUTS.SAVE
1055
- }, {
1056
- action: this.handleMinimapChange,
1057
- shortcut: SHORTCUTS.NOTEBOOK.MINIMAP
1058
- }, {
1059
- action: this.handleWordWrapChange,
1060
- shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP
1061
- }];
1062
- var disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(isSessionConnected, isLanguageMatching, 'Notebook extension', 'Run');
1063
- var disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(isSessionConnected, isLanguageMatching, 'Notebook extension', 'Run Selected');
1064
- var additionalActions = [{
1065
- title: isExistingItem ? 'Rename' : 'Save As…',
1066
- order: 10,
1067
- group: ContextActions.groups.high,
1068
- action: this.handleShowRename
1069
- }, {
1070
- title: 'Copy File',
1071
- action: this.handleCopy,
1072
- group: ContextActions.groups.high,
1073
- order: 20
1074
- }];
1075
- var portal = tab === null || tab === void 0 ? void 0 : tab.element.find('.lm_title_before').get(0);
1076
- return /*#__PURE__*/React.createElement(React.Fragment, null, portal && /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement("span", {
1077
- className: classNames('editor-unsaved-indicator', {
1078
- 'is-unsaved': changeCount !== savedChangeCount
1079
- })
1080
- }), portal // tab.element is jquery element, we want a dom element
1081
- ), /*#__PURE__*/React.createElement(Panel, {
1082
- className: "notebook-container",
1083
- componentPanel: this,
1084
- glContainer: glContainer,
1085
- glEventHub: glEventHub,
1086
- onTab: this.handleTab,
1087
- onResize: this.handleResize,
1088
- onShow: this.handleShow,
1089
- onTabClicked: this.handleTabClick,
1090
- onTabFocus: this.handleTabFocus,
1091
- onTabBlur: this.handleTabBlur,
1092
- onSessionOpen: this.handleSessionOpened,
1093
- onSessionClose: this.handleSessionClosed,
1094
- onFocus: this.handleFocus,
1095
- onBlur: this.handleBlur,
1096
- additionalActions: additionalActions,
1097
- renderTabTooltip: () => itemName
1098
- }, !isMarkdown && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
1099
- className: "notebook-toolbar"
1100
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
1101
- kind: "ghost",
1102
- className: "btn-play",
1103
- onClick: this.handleRunAll,
1104
- disabled: runButtonsDisabled,
1105
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1106
- icon: vsPlay,
1107
- transform: "grow-4"
1108
- }),
1109
- tooltip: "Run ".concat(SHORTCUTS.NOTEBOOK.RUN.getDisplayText()),
1110
- "aria-label": "Run"
1111
- }), disabledRunButtonTooltip != null && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunButtonTooltip)), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
1112
- kind: "ghost",
1113
- className: "btn-play",
1114
- onClick: this.handleRunSelected,
1115
- disabled: runButtonsDisabled,
1116
- icon: /*#__PURE__*/React.createElement(FontAwesomeIcon, {
1117
- icon: dhRunSelection,
1118
- transform: "grow-4"
1119
- }),
1120
- tooltip: "Run Selected ".concat(SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()),
1121
- "aria-label": "Run Selected"
1122
- }), disabledRunSelectedButtonTooltip != null && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunSelectedButtonTooltip)), /*#__PURE__*/React.createElement(Button, {
1123
- kind: "ghost",
1124
- className: "mr-auto",
1125
- disabled: toolbarDisabled,
1126
- onClick: this.handleSave,
1127
- icon: vsSave,
1128
- tooltip: "Save ".concat(GLOBAL_SHORTCUTS.SAVE.getDisplayText()),
1129
- "aria-label": "Save"
1130
- }), /*#__PURE__*/React.createElement(Button, {
1131
- kind: "ghost",
1132
- className: "btn-overflow btn-link-icon",
1133
- disabled: toolbarDisabled,
1134
- icon: vsKebabVertical,
1135
- tooltip: "More Actions...",
1136
- onClick: () => {
1137
- // no-op: click is handled in `DropdownMenu`
1138
- }
1139
- }, /*#__PURE__*/React.createElement(DropdownMenu, {
1140
- actions: this.getDropdownOverflowActions,
1141
- popperOptions: NotebookPanel.POPPER_OPTIONS
1142
- }))), /*#__PURE__*/React.createElement(ScriptEditor, {
1143
- isLoaded: isLoaded,
1144
- isLoading: isLoading,
1145
- error: error,
1146
- onChange: this.handleEditorChange,
1147
- onRunCommand: this.handleRunCommand,
1148
- session: session,
1149
- sessionLanguage: sessionLanguage,
1150
- onEditorInitialized: this.handleEditorInitialized,
1151
- onEditorWillDestroy: this.handleEditorWillDestroy,
1152
- settings: settings,
1153
- focusOnMount: focusOnMount,
1154
- ref: notebook => {
1155
- this.notebook = notebook;
1156
- }
1157
- })), isMarkdown && /*#__PURE__*/React.createElement(MarkdownNotebook, {
1158
- content: (_settings$value = settings.value) !== null && _settings$value !== void 0 ? _settings$value : '',
1159
- onLinkClick: this.handleLinkClick,
1160
- onRunCode: this.handleRunCommand,
1161
- transformImageUri: this.handleTransformLinkUri,
1162
- transformLinkUri: this.handleTransformLinkUri
1163
- }), /*#__PURE__*/React.createElement(NewItemModal, {
1164
- isOpen: showSaveAsModal,
1165
- type: "file",
1166
- defaultValue: itemName,
1167
- title: isExistingItem ? 'Rename' : 'Save file as',
1168
- onSubmit: this.handleSaveAsSubmit,
1169
- onCancel: this.handleSaveAsCancel,
1170
- notifyOnExtensionChange: true,
1171
- storage: fileStorage
1172
- }), /*#__PURE__*/React.createElement(BasicModal, {
1173
- isOpen: showCloseModal,
1174
- headerText: "Do you want to save the changes you made to ".concat(itemName, "?"),
1175
- bodyText: "Your changes will be lost if you don't save them.",
1176
- onCancel: this.handleCloseCancel,
1177
- onDiscard: this.handleCloseDiscard,
1178
- onConfirm: this.handleCloseSave,
1179
- discardButtonText: "Discard Changes",
1180
- confirmButtonText: "Save"
1181
- }), /*#__PURE__*/React.createElement(ContextActions, {
1182
- actions: contextActions
1183
- })));
1184
- }
1185
- }
1186
- _defineProperty(NotebookPanel, "COMPONENT", 'NotebookPanel');
1187
- _defineProperty(NotebookPanel, "POPPER_OPTIONS", {
1188
- placement: 'bottom-end'
1189
- });
1190
- _defineProperty(NotebookPanel, "DEFAULT_NAME", 'Untitled');
1191
- _defineProperty(NotebookPanel, "defaultProps", {
1192
- isDashboardActive: true,
1193
- isPreview: false,
1194
- session: null,
1195
- sessionLanguage: null,
1196
- defaultNotebookSettings: null
1197
- });
1198
- var mapStateToProps = (state, ownProps) => {
1199
- var fileStorage = getFileStorage(state);
1200
- var settings = getSettings(state);
1201
- var defaultNotebookSettings = getDefaultNotebookSettings(state);
1202
- var sessionWrapper = getDashboardSessionWrapper(state, ownProps.localDashboardId);
1203
- var {
1204
- session,
1205
- config: sessionConfig
1206
- } = sessionWrapper !== null && sessionWrapper !== void 0 ? sessionWrapper : {};
1207
- var {
1208
- type: sessionLanguage
1209
- } = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : {};
1210
- return {
1211
- fileStorage,
1212
- settings,
1213
- defaultNotebookSettings,
1214
- session,
1215
- sessionLanguage
1216
- };
1217
- };
1218
- var ConnectedNotebookPanel = connect(mapStateToProps, {
1219
- saveSettings: saveSettingsAction
1220
- }, null, {
1221
- forwardRef: true
1222
- })(NotebookPanel);
1223
- export default ConnectedNotebookPanel;
1224
- //# sourceMappingURL=NotebookPanel.js.map