@deephaven/dashboard-core-plugins 0.33.1-beta.4 → 0.34.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAGL,6BAA6B,EAI7B,oBAAoB,EAGrB,MAAM,sBAAsB,CAAC;AA8B9B,MAAM,MAAM,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAQF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,GAAG,CAAC,OAAO,GAAG,IAAI,CAwgBpB;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAGL,6BAA6B,EAI7B,oBAAoB,EAGrB,MAAM,sBAAsB,CAAC;AA8B9B,MAAM,MAAM,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAQF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,GAAG,CAAC,OAAO,GAAG,IAAI,CAihBpB;AAED,eAAe,aAAa,CAAC"}
@@ -5,6 +5,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
5
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
6
  import { assertIsDashboardPluginProps, DashboardUtils, LayoutUtils, useListener } from '@deephaven/dashboard';
7
7
  import { FileUtils } from '@deephaven/file-explorer';
8
+ import { isComponent } from '@deephaven/golden-layout';
8
9
  import Log from '@deephaven/log';
9
10
  import { useCallback, useEffect, useRef, useState } from 'react';
10
11
  import { useDispatch } from 'react-redux';
@@ -101,7 +102,7 @@ export function ConsolePlugin(props) {
101
102
  if (createIfNecessary) {
102
103
  return shortid.generate();
103
104
  }
104
- return null;
105
+ return undefined;
105
106
  }, [openFileMap, previewFileMap]);
106
107
  var renamePanel = useCallback((panelId, newTitle) => {
107
108
  LayoutUtils.renameComponent(layout.root, {
@@ -180,11 +181,6 @@ export function ConsolePlugin(props) {
180
181
  }
181
182
  }, [openFileMap, previewFileMap, renameFilePanel, addOpenFileMapEntry, addPreviewFileMapEntry, deletePreviewFileMapEntry]);
182
183
  var unregisterFilePanel = useCallback((fileMetadata, isPreview) => {
183
- // Note: unregister event is triggered AFTER new register when switching from preview to edit mode
184
- // due to the LayoutUtils implementation (new tab added before deleting the old one)
185
- // This doesn't cause any issues because previews and editable files are stored in different maps,
186
- // but this situation could be completely avoided by sending an event to the tab
187
- // to make it switch from preview to edit mode without re-mounting and re-registering
188
184
  log.debug('unregisterFileTab', fileMetadata, isPreview);
189
185
  if (fileMetadata == null || fileMetadata.id == null) {
190
186
  log.debug('Ignore empty file id', fileMetadata);
@@ -314,51 +310,53 @@ export function ConsolePlugin(props) {
314
310
  log.debug('selectNotebook', fileMetadata, shouldFocus);
315
311
  var isFileOpen = fileIsOpen(fileMetadata);
316
312
  var isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);
317
-
318
- // If the file is already open, just show and focus it if necessary
319
- if (isFileOpen) {
320
- showFilePanel(fileMetadata);
321
- if (shouldFocus) {
322
- var _panelId = getPanelIdForFileMetadata(fileMetadata);
323
- focusPanelById(_panelId);
324
- }
325
- return;
313
+ var [previewId] = [...previewFileMap.values()];
314
+ var isPreview = !shouldFocus;
315
+ var panelId = isPreview && previewId ? previewId : getPanelIdForFileMetadata(fileMetadata);
316
+ if (panelId == null || panelId === '') {
317
+ throw new Error('Unable to retrieve or create panelId for metadata', fileMetadata);
326
318
  }
327
319
 
328
- // If the file is already open as a preview and we're not focusing it, just show it
329
- // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below
330
- if (isFileOpenAsPreview && !shouldFocus) {
320
+ // If the file is already open, show it
321
+ if (isFileOpen || isFileOpenAsPreview) {
331
322
  showFilePanel(fileMetadata);
332
- return;
323
+ } else {
324
+ var stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
325
+ var config = makeConfig({
326
+ id: panelId,
327
+ settings,
328
+ fileMetadata,
329
+ session,
330
+ sessionLanguage,
331
+ isPreview
332
+ });
333
+
334
+ // This will replace the existing preview by panelId if needed
335
+ LayoutUtils.openComponentInStack(stack, config);
333
336
  }
334
- var [previewTabId] = Array.from(previewFileMap.values());
335
- var panelId = null;
336
- var stack = null;
337
- if (previewTabId != null) {
338
- panelId = previewTabId;
339
- stack = LayoutUtils.getStackForConfig(layout.root, {
337
+
338
+ // If the file is open as a preview and focused, promote to non-preview
339
+ if (isFileOpenAsPreview && shouldFocus) {
340
+ var fileId = fileMetadata.id;
341
+ var _stack = LayoutUtils.getStackForConfig(layout.root, {
340
342
  component: NotebookPanel.COMPONENT,
341
343
  id: panelId
342
344
  });
345
+ var item = LayoutUtils.getContentItemInStack(_stack, {
346
+ component: NotebookPanel.COMPONENT,
347
+ id: panelId
348
+ });
349
+ if (item && isComponent(item)) {
350
+ item.container.emit(NotebookEvent.PROMOTE_FROM_PREVIEW);
351
+ deletePreviewFileMapEntry(fileId);
352
+ addOpenFileMapEntry(fileId, panelId);
353
+ }
343
354
  }
344
- if (stack == null) {
345
- panelId = getPanelIdForFileMetadata(fileMetadata);
346
- stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
347
- }
348
- var config = makeConfig({
349
- id: panelId,
350
- settings,
351
- fileMetadata,
352
- session,
353
- sessionLanguage,
354
- isPreview: !shouldFocus
355
- });
356
- LayoutUtils.openComponentInStack(stack, config);
357
355
  if (shouldFocus) {
358
- // Focus the tab we just opened if we're supposed to
356
+ // Focus the tab if we're supposed to
359
357
  focusPanelById(panelId);
360
358
  }
361
- }, [showFilePanel, fileIsOpen, fileIsOpenAsPreview, focusPanelById, getPanelIdForFileMetadata, layout.root, makeConfig, previewFileMap]);
359
+ }, [showFilePanel, fileIsOpen, fileIsOpenAsPreview, focusPanelById, getPanelIdForFileMetadata, layout.root, makeConfig, previewFileMap, deletePreviewFileMapEntry, addOpenFileMapEntry]);
362
360
 
363
361
  /** Attempts to send the text to a notebook matching the passed in settings */
364
362
  var sendToNotebook = useCallback(function (session, sessionLanguage) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","setOpenFileMap","Map","previewFileMap","setPreviewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","addOpenFileMapEntry","key","value","map","set","deleteOpenFileMapEntry","delete","addPreviewFileMapEntry","deletePreviewFileMapEntry","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","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","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","options","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport { CloseOptions } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { useCallback, useEffect, useRef, useState } 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 focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nfunction assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap, setOpenFileMap] = useState(new Map<string, string>());\n const [previewFileMap, setPreviewFileMap] = useState(\n new Map<string, string>()\n );\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const addOpenFileMapEntry = useCallback(\n (key: string, value: string) => {\n setOpenFileMap(map => new Map(map.set(key, value)));\n },\n [setOpenFileMap]\n );\n\n const deleteOpenFileMapEntry = useCallback(\n (key: string) => {\n setOpenFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setOpenFileMap]\n );\n\n const addPreviewFileMapEntry = useCallback(\n (key: string, value: string) => {\n setPreviewFileMap(map => new Map(map.set(key, value)));\n },\n [setPreviewFileMap]\n );\n\n const deletePreviewFileMapEntry = useCallback(\n (key: string) => {\n setPreviewFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setPreviewFileMap]\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 == null) {\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: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\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 deleteOpenFileMapEntry(oldName);\n if (panelId != null) {\n addOpenFileMapEntry(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n deletePreviewFileMapEntry(oldName);\n if (panelId != null) {\n addPreviewFileMapEntry(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\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 [\n openFileMap,\n previewFileMap,\n renamePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deleteOpenFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = 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: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n addPreviewFileMapEntry(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, itemName);\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n addOpenFileMapEntry(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n deletePreviewFileMapEntry(fileId);\n }\n },\n [\n openFileMap,\n previewFileMap,\n renameFilePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\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 == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n deletePreviewFileMapEntry(fileId);\n return;\n }\n deleteOpenFileMapEntry(fileId);\n },\n [deleteOpenFileMapEntry, deletePreviewFileMapEntry]\n );\n\n const closeFilePanel = useCallback(\n (fileMetadata, options?: CloseOptions) => {\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 }, options);\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: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && 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 != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\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' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\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) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(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 focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\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: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\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 (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\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 null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","isComponent","Log","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","setOpenFileMap","Map","previewFileMap","setPreviewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","addOpenFileMapEntry","key","value","map","set","deleteOpenFileMapEntry","delete","addPreviewFileMapEntry","deletePreviewFileMapEntry","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","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","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","options","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewId","values","Error","getStackForConfig","item","getContentItemInStack","container","emit","PROMOTE_FROM_PREVIEW","sendToNotebook","notebookPanel","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport { CloseOptions, isComponent } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { useCallback, useEffect, useRef, useState } 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 focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nfunction assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap, setOpenFileMap] = useState(new Map<string, string>());\n const [previewFileMap, setPreviewFileMap] = useState(\n new Map<string, string>()\n );\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const addOpenFileMapEntry = useCallback(\n (key: string, value: string) => {\n setOpenFileMap(map => new Map(map.set(key, value)));\n },\n [setOpenFileMap]\n );\n\n const deleteOpenFileMapEntry = useCallback(\n (key: string) => {\n setOpenFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setOpenFileMap]\n );\n\n const addPreviewFileMapEntry = useCallback(\n (key: string, value: string) => {\n setPreviewFileMap(map => new Map(map.set(key, value)));\n },\n [setPreviewFileMap]\n );\n\n const deletePreviewFileMapEntry = useCallback(\n (key: string) => {\n setPreviewFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setPreviewFileMap]\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 == null) {\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: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return undefined;\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 deleteOpenFileMapEntry(oldName);\n if (panelId != null) {\n addOpenFileMapEntry(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n deletePreviewFileMapEntry(oldName);\n if (panelId != null) {\n addPreviewFileMapEntry(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\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 [\n openFileMap,\n previewFileMap,\n renamePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deleteOpenFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = 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: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n addPreviewFileMapEntry(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, itemName);\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n addOpenFileMapEntry(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n deletePreviewFileMapEntry(fileId);\n }\n },\n [\n openFileMap,\n previewFileMap,\n renameFilePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n deletePreviewFileMapEntry(fileId);\n return;\n }\n deleteOpenFileMapEntry(fileId);\n },\n [deleteOpenFileMapEntry, deletePreviewFileMapEntry]\n );\n\n const closeFilePanel = useCallback(\n (fileMetadata, options?: CloseOptions) => {\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 }, options);\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: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && 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 != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\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' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\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) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(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 focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n const [previewId] = [...previewFileMap.values()];\n const isPreview = !shouldFocus;\n const panelId =\n isPreview && previewId\n ? previewId\n : getPanelIdForFileMetadata(fileMetadata);\n\n if (panelId == null || panelId === '') {\n throw new Error(\n 'Unable to retrieve or create panelId for metadata',\n fileMetadata\n );\n }\n\n // If the file is already open, show it\n if (isFileOpen || isFileOpenAsPreview) {\n showFilePanel(fileMetadata);\n } else {\n const 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\n // This will replace the existing preview by panelId if needed\n LayoutUtils.openComponentInStack(stack, config);\n }\n\n // If the file is open as a preview and focused, promote to non-preview\n if (isFileOpenAsPreview && shouldFocus) {\n const fileId = fileMetadata.id;\n const stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n\n const item = LayoutUtils.getContentItemInStack(stack, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n if (item && isComponent(item)) {\n item.container.emit(NotebookEvent.PROMOTE_FROM_PREVIEW);\n deletePreviewFileMapEntry(fileId);\n addOpenFileMapEntry(fileId, panelId);\n }\n }\n\n if (shouldFocus) {\n // Focus the tab if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n deletePreviewFileMapEntry,\n addOpenFileMapEntry,\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 (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\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 null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
@@ -7,6 +7,7 @@ declare class NotebookEvent {
7
7
  static REGISTER_FILE: string;
8
8
  static SEND_TO_NOTEBOOK: string;
9
9
  static UNREGISTER_FILE: string;
10
+ static PROMOTE_FROM_PREVIEW: string;
10
11
  }
11
12
  export default NotebookEvent;
12
13
  //# sourceMappingURL=NotebookEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookEvent.d.ts","sourceRoot":"","sources":["../../src/events/NotebookEvent.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,UAAU,SAA6B;IAE9C,MAAM,CAAC,MAAM,SAA0B;IAEvC,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,aAAa,SAAgC;IAEpD,MAAM,CAAC,gBAAgB,SAAkC;IAEzD,MAAM,CAAC,eAAe,SAAkC;CACzD;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"NotebookEvent.d.ts","sourceRoot":"","sources":["../../src/events/NotebookEvent.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IACjB,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,UAAU,SAA6B;IAE9C,MAAM,CAAC,MAAM,SAA0B;IAEvC,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,aAAa,SAAgC;IAEpD,MAAM,CAAC,gBAAgB,SAAkC;IAEzD,MAAM,CAAC,eAAe,SAAkC;IAExD,MAAM,CAAC,oBAAoB,SAAsC;CAClE;AAED,eAAe,aAAa,CAAC"}
@@ -10,5 +10,6 @@ _defineProperty(NotebookEvent, "RENAME_FILE", 'NotebookEvent.renameFile');
10
10
  _defineProperty(NotebookEvent, "REGISTER_FILE", 'NotebookEvent.registerFile');
11
11
  _defineProperty(NotebookEvent, "SEND_TO_NOTEBOOK", 'NotebookEvent.sendToNotebook');
12
12
  _defineProperty(NotebookEvent, "UNREGISTER_FILE", 'NotebookEvent.unregisterFile');
13
+ _defineProperty(NotebookEvent, "PROMOTE_FROM_PREVIEW", 'NotebookEvent.promoteFromPreview');
13
14
  export default NotebookEvent;
14
15
  //# sourceMappingURL=NotebookEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookEvent.js","names":["NotebookEvent"],"sources":["../../src/events/NotebookEvent.ts"],"sourcesContent":["class NotebookEvent {\n static CREATE_NOTEBOOK = 'NotebookEvent.createNotebook';\n\n static SELECT_NOTEBOOK = 'NotebookEvent.selectNotebook';\n\n static CLOSE_FILE = 'NotebookEvent.closeFile';\n\n static RENAME = 'NotebookEvent.rename';\n\n static RENAME_FILE = 'NotebookEvent.renameFile';\n\n static REGISTER_FILE = 'NotebookEvent.registerFile';\n\n static SEND_TO_NOTEBOOK = 'NotebookEvent.sendToNotebook';\n\n static UNREGISTER_FILE = 'NotebookEvent.unregisterFile';\n}\n\nexport default NotebookEvent;\n"],"mappings":";;;AAAA,MAAMA,aAAa,CAAC;AAgBnB,gBAhBKA,aAAa,qBACQ,8BAA8B;AAAA,gBADnDA,aAAa,qBAGQ,8BAA8B;AAAA,gBAHnDA,aAAa,gBAKG,yBAAyB;AAAA,gBALzCA,aAAa,YAOD,sBAAsB;AAAA,gBAPlCA,aAAa,iBASI,0BAA0B;AAAA,gBAT3CA,aAAa,mBAWM,4BAA4B;AAAA,gBAX/CA,aAAa,sBAaS,8BAA8B;AAAA,gBAbpDA,aAAa,qBAeQ,8BAA8B;AAGzD,eAAeA,aAAa"}
1
+ {"version":3,"file":"NotebookEvent.js","names":["NotebookEvent"],"sources":["../../src/events/NotebookEvent.ts"],"sourcesContent":["class NotebookEvent {\n static CREATE_NOTEBOOK = 'NotebookEvent.createNotebook';\n\n static SELECT_NOTEBOOK = 'NotebookEvent.selectNotebook';\n\n static CLOSE_FILE = 'NotebookEvent.closeFile';\n\n static RENAME = 'NotebookEvent.rename';\n\n static RENAME_FILE = 'NotebookEvent.renameFile';\n\n static REGISTER_FILE = 'NotebookEvent.registerFile';\n\n static SEND_TO_NOTEBOOK = 'NotebookEvent.sendToNotebook';\n\n static UNREGISTER_FILE = 'NotebookEvent.unregisterFile';\n\n static PROMOTE_FROM_PREVIEW = 'NotebookEvent.promoteFromPreview';\n}\n\nexport default NotebookEvent;\n"],"mappings":";;;AAAA,MAAMA,aAAa,CAAC;AAkBnB,gBAlBKA,aAAa,qBACQ,8BAA8B;AAAA,gBADnDA,aAAa,qBAGQ,8BAA8B;AAAA,gBAHnDA,aAAa,gBAKG,yBAAyB;AAAA,gBALzCA,aAAa,YAOD,sBAAsB;AAAA,gBAPlCA,aAAa,iBASI,0BAA0B;AAAA,gBAT3CA,aAAa,mBAWM,4BAA4B;AAAA,gBAX/CA,aAAa,sBAaS,8BAA8B;AAAA,gBAbpDA,aAAa,qBAeQ,8BAA8B;AAAA,gBAfnDA,aAAa,0BAiBa,kCAAkC;AAGlE,eAAeA,aAAa"}
@@ -1,4 +1,4 @@
1
- import { Component, MouseEvent, ReactElement } from 'react';
1
+ import React, { Component, ReactElement } from 'react';
2
2
  import type { editor } from 'monaco-editor';
3
3
  import { DropdownAction } from '@deephaven/components';
4
4
  import { ScriptEditor } from '@deephaven/console';
@@ -58,7 +58,6 @@ interface NotebookPanelState {
58
58
  showSaveAsModal: boolean;
59
59
  scriptCode: string;
60
60
  itemName?: string;
61
- shouldPromptClose: boolean;
62
61
  }
63
62
  declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {
64
63
  static COMPONENT: string;
@@ -87,6 +86,13 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
87
86
  tabInitOnce: boolean;
88
87
  editor?: editor.IStandaloneCodeEditor;
89
88
  initTab(tab: Tab): void;
89
+ /**
90
+ * Adds a beforeClose handler to check if a notebook needs to be saved
91
+ * Call panel close with force if the check can be skipped
92
+ *
93
+ * Note that firing a close event manually may trigger before state update occurs
94
+ * In those instances, use force
95
+ */
90
96
  initTabCloseOverride(): void;
91
97
  initTabClasses(tab: Tab): void;
92
98
  getNotebookValue(): string | undefined;
@@ -108,6 +114,7 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
108
114
  saveContent(filename: string, content: string): void;
109
115
  updateSavedChangeCount(): void;
110
116
  setPreviewStatus(): void;
117
+ handlePreviewPromotion(): void;
111
118
  getSettings: (initialSettings: editor.IStandaloneEditorConstructionOptions, isMinimapEnabled: boolean) => editor.IStandaloneEditorConstructionOptions;
112
119
  getOverflowActions: (isMinimapEnabled: boolean, isWordWrapEnabled: boolean) => {
113
120
  title: string;
@@ -140,7 +147,7 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
140
147
  /**
141
148
  * @param event The click event from clicking on the link
142
149
  */
143
- handleLinkClick(event: MouseEvent<HTMLAnchorElement>): void;
150
+ handleLinkClick(event: React.MouseEvent<HTMLAnchorElement>): void;
144
151
  handleLoadSuccess(): void;
145
152
  handleLoadError(errorParam: {
146
153
  message?: string | undefined;
@@ -164,7 +171,7 @@ declare class NotebookPanel extends Component<NotebookPanelProps, NotebookPanelS
164
171
  handleTab(tab: Tab): void;
165
172
  handleTabFocus(...args: unknown[]): void;
166
173
  handleTabBlur(): void;
167
- handlePanelTabClick(): void;
174
+ handleTabClick(e: MouseEvent): void;
168
175
  /**
169
176
  * Transform the link URI to load from where the notebook is if it's relative
170
177
  * @param src The link to transform
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
@@ -97,7 +97,7 @@ class NotebookPanel extends Component {
97
97
  this.handleLinkClick = this.handleLinkClick.bind(this);
98
98
  this.handleLoadSuccess = this.handleLoadSuccess.bind(this);
99
99
  this.handleLoadError = this.handleLoadError.bind(this);
100
- this.handlePanelTabClick = this.handlePanelTabClick.bind(this);
100
+ this.handleTabClick = this.handleTabClick.bind(this);
101
101
  this.handleRenameFile = this.handleRenameFile.bind(this);
102
102
  this.handleResize = this.handleResize.bind(this);
103
103
  this.handleRunCommand = this.handleRunCommand.bind(this);
@@ -117,6 +117,7 @@ class NotebookPanel extends Component {
117
117
  this.handleTabBlur = this.handleTabBlur.bind(this);
118
118
  this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);
119
119
  this.handleOverwrite = this.handleOverwrite.bind(this);
120
+ this.handlePreviewPromotion = this.handlePreviewPromotion.bind(this);
120
121
  this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(this);
121
122
  this.pending = new Pending();
122
123
  this.debouncedSavePanelState = debounce(this.savePanelState.bind(this), DEBOUNCE_PANEL_STATE_UPDATE);
@@ -175,8 +176,7 @@ class NotebookPanel extends Component {
175
176
  },
176
177
  showCloseModal: false,
177
178
  showSaveAsModal: false,
178
- scriptCode: '',
179
- shouldPromptClose: true
179
+ scriptCode: ''
180
180
  };
181
181
  log.debug('constructor', props, this.state);
182
182
  }
@@ -191,7 +191,7 @@ class NotebookPanel extends Component {
191
191
  if (tab != null) this.initTab(tab);
192
192
  this.initNotebookContent();
193
193
  glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);
194
- glContainer.on('tabClicked', this.handlePanelTabClick);
194
+ glContainer.on(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);
195
195
  }
196
196
  componentDidUpdate(prevProps, prevState) {
197
197
  var {
@@ -219,15 +219,15 @@ class NotebookPanel extends Component {
219
219
  this.debouncedSavePanelState.flush();
220
220
  this.pending.cancel();
221
221
  var {
222
- glContainer,
223
- glEventHub
222
+ glEventHub,
223
+ glContainer
224
224
  } = this.props;
225
225
  var {
226
226
  fileMetadata,
227
227
  isPreview
228
228
  } = this.state;
229
229
  glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);
230
- glContainer.off('tabClicked', this.handlePanelTabClick);
230
+ glContainer.off(NotebookEvent.PROMOTE_FROM_PREVIEW, this.handlePreviewPromotion);
231
231
  glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);
232
232
  }
233
233
  // Called by TabEvent. Happens once when created, but also each time its moved.
@@ -239,6 +239,14 @@ class NotebookPanel extends Component {
239
239
  }
240
240
  this.initTabClasses(tab);
241
241
  }
242
+
243
+ /**
244
+ * Adds a beforeClose handler to check if a notebook needs to be saved
245
+ * Call panel close with force if the check can be skipped
246
+ *
247
+ * Note that firing a close event manually may trigger before state update occurs
248
+ * In those instances, use force
249
+ */
242
250
  initTabCloseOverride() {
243
251
  var {
244
252
  glContainer
@@ -249,10 +257,9 @@ class NotebookPanel extends Component {
249
257
  }
250
258
  var {
251
259
  changeCount,
252
- savedChangeCount,
253
- shouldPromptClose
260
+ savedChangeCount
254
261
  } = this.state;
255
- if (changeCount !== savedChangeCount && shouldPromptClose) {
262
+ if (changeCount !== savedChangeCount) {
256
263
  this.setState({
257
264
  showCloseModal: true
258
265
  });
@@ -446,6 +453,9 @@ class NotebookPanel extends Component {
446
453
  this.tabTitleElement.classList.remove('is-preview');
447
454
  }
448
455
  }
456
+ handlePreviewPromotion() {
457
+ this.removePreviewStatus();
458
+ }
449
459
  savePanelState() {
450
460
  this.setState(state => {
451
461
  var {
@@ -480,29 +490,30 @@ class NotebookPanel extends Component {
480
490
  }
481
491
  handleCloseDiscard() {
482
492
  this.setState({
483
- shouldPromptClose: false,
484
493
  showCloseModal: false
485
494
  });
486
495
  var {
487
496
  glContainer
488
497
  } = this.props;
489
- glContainer.close();
498
+ glContainer.close({
499
+ force: true
500
+ });
490
501
  }
491
502
  handleCloseSave() {
492
503
  this.setState({
493
- shouldPromptClose: false,
494
504
  showCloseModal: false
495
505
  });
496
506
  if (this.save()) {
497
507
  var {
498
508
  glContainer
499
509
  } = this.props;
500
- glContainer.close();
510
+ glContainer.close({
511
+ force: true
512
+ });
501
513
  }
502
514
  }
503
515
  handleCloseCancel() {
504
516
  this.setState({
505
- shouldPromptClose: true,
506
517
  showCloseModal: false
507
518
  });
508
519
  }
@@ -886,9 +897,12 @@ class NotebookPanel extends Component {
886
897
  isDashboardActive: false
887
898
  });
888
899
  }
889
- handlePanelTabClick() {
890
- log.debug('handlePanelTabClick');
900
+ handleTabClick(e) {
901
+ log.debug('handle NotebookPanel tab click');
891
902
  this.focus();
903
+ if (e.detail === 2) {
904
+ this.removePreviewStatus();
905
+ }
892
906
  }
893
907
 
894
908
  /**
@@ -948,7 +962,7 @@ class NotebookPanel extends Component {
948
962
  glEventHub.emit(NotebookEvent.CREATE_NOTEBOOK, session, sessionLanguage, notebookSettings, fileMetadata);
949
963
  }
950
964
  runCommand(command) {
951
- if (command === undefined) {
965
+ if (command === undefined || command === '') {
952
966
  log.debug('Ignoring empty command.');
953
967
  return;
954
968
  }
@@ -1059,6 +1073,7 @@ class NotebookPanel extends Component {
1059
1073
  onTab: this.handleTab,
1060
1074
  onResize: this.handleResize,
1061
1075
  onShow: this.handleShow,
1076
+ onTabClicked: this.handleTabClick,
1062
1077
  onTabFocus: this.handleTabFocus,
1063
1078
  onTabBlur: this.handleTabBlur,
1064
1079
  onSessionOpen: this.handleSessionOpened,
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookPanel.js","names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","Button","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","vsCheck","getFileStorage","saveSettings","saveSettingsAction","getSettings","getDefaultNotebookSettings","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","initialSettings","isMinimapEnabled","minimap","enabled","isWordWrapEnabled","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","undefined","handleMinimapChange","medium","MINIMAP","handleWordWrapChange","WORDWRAP","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorInitialized","handleEditorWillDestroy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","handleOverwrite","getDropdownOverflowActions","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","wordWrap","fileMetadata","isPreview","hasFileId","hasPath","itemName","isUnsaved","length","changeCount","state","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","shouldPromptClose","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","defaultNotebookSettings","setPreviewStatus","updateEditorWordWrap","updateEditorMinimap","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","beforeClose","options","force","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","dehydratedValue","dehydratedSettings","close","focus","copyName","getCopyFileName","createNotebook","innerEditor","editor","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","updateOptions","newSettings","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","isOverwrite","oldName","newName","curPanelState","JSON","stringify","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","getOverflowActions","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","ConnectedNotebookPanel","forwardRef"],"sources":["../../src/panels/NotebookPanel.tsx"],"sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n Button,\n DropdownAction,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n vsCheck,\n} from '@deephaven/icons';\nimport {\n getFileStorage,\n saveSettings as saveSettingsAction,\n RootState,\n getSettings,\n WorkspaceSettings,\n getDefaultNotebookSettings,\n} from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport type {\n Container,\n EventEmitter,\n Tab,\n CloseOptions,\n} from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\ninterface NotebookSetting {\n isMinimapEnabled: boolean;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: editor.IStandaloneEditorConstructionOptions;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n defaultNotebookSettings: NotebookSetting;\n settings: WorkspaceSettings;\n saveSettings: (settings: WorkspaceSettings) => void;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: editor.IStandaloneEditorConstructionOptions;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n\n shouldPromptClose: boolean;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n defaultNotebookSettings: null,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleMinimapChange = this.handleMinimapChange.bind(this);\n this.handleWordWrapChange = this.handleWordWrapChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n this.handleOverwrite = this.handleOverwrite.bind(this);\n this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(\n this\n );\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: editor.IStandaloneEditorConstructionOptions = {\n value: '',\n language: '',\n wordWrap: 'off',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState != null) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata != null && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId === true && settings.value != null) ||\n (!hasFileId && settings.value != null && settings.value.length > 0);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n\n shouldPromptClose: true,\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab != null) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview, settings } = this.state;\n const { wordWrap } = settings;\n const { defaultNotebookSettings } = this.props;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n if (wordWrap !== prevState.settings.wordWrap) {\n this.updateEditorWordWrap();\n this.debouncedSavePanelState();\n }\n if (\n defaultNotebookSettings.isMinimapEnabled !==\n prevProps.defaultNotebookSettings.isMinimapEnabled\n ) {\n this.updateEditorMinimap();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n editor?: editor.IStandaloneCodeEditor;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n initTabCloseOverride() {\n const { glContainer } = this.props;\n glContainer.beforeClose((options?: CloseOptions) => {\n if (options?.force === true) {\n return true;\n }\n\n const { changeCount, savedChangeCount, shouldPromptClose } = this.state;\n if (changeCount !== savedChangeCount && shouldPromptClose) {\n this.setState({ showCloseModal: true });\n return false;\n }\n\n return true;\n });\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | undefined {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n if (settings.wordWrap === undefined) {\n settings.wordWrap = 'off';\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content !== undefined) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getSettings = memoize(\n (\n initialSettings: editor.IStandaloneEditorConstructionOptions,\n isMinimapEnabled: boolean\n ): editor.IStandaloneEditorConstructionOptions => ({\n ...initialSettings,\n minimap: { enabled: isMinimapEnabled },\n })\n );\n\n getOverflowActions = memoize(\n (isMinimapEnabled: boolean, isWordWrapEnabled: boolean) => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n {\n title: 'Show Minimap',\n icon: isMinimapEnabled ? vsCheck : undefined,\n action: this.handleMinimapChange,\n group: ContextActions.groups.medium,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,\n order: 20,\n },\n {\n title: 'Word Wrap',\n icon: isWordWrapEnabled ? vsCheck : undefined,\n action: this.handleWordWrapChange,\n group: ContextActions.groups.medium,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,\n order: 30,\n },\n ]\n );\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue =\n changeCount !== savedChangeCount ? value : undefined;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.setState({ shouldPromptClose: false, showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.setState({ shouldPromptClose: false, showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.setState({ shouldPromptClose: true, showCloseModal: false });\n }\n\n /**\n * Closes overwritten tabs\n * @param fileName The name of the file to be overwritten\n */\n handleOverwrite(fileName: string): void {\n const { glEventHub } = this.props;\n\n glEventHub.emit(\n NotebookEvent.CLOSE_FILE,\n {\n id: fileName,\n itemName: fileName,\n },\n { force: true }\n );\n\n this.focus();\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content);\n }\n\n handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void {\n this.editor = innerEditor;\n }\n\n handleEditorWillDestroy(): void {\n this.editor = undefined;\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n updateEditorMinimap() {\n if (this.editor) {\n const { defaultNotebookSettings } = this.props;\n this.editor.updateOptions({\n minimap: { enabled: defaultNotebookSettings.isMinimapEnabled },\n });\n }\n }\n\n handleMinimapChange() {\n const { settings, defaultNotebookSettings, saveSettings } = this.props;\n const newSettings: WorkspaceSettings = {\n ...settings,\n defaultNotebookSettings: {\n isMinimapEnabled: !defaultNotebookSettings.isMinimapEnabled,\n },\n };\n saveSettings(newSettings);\n }\n\n updateEditorWordWrap() {\n if (this.editor) {\n const { settings } = this.state;\n const { wordWrap } = settings;\n this.editor.updateOptions({\n wordWrap,\n });\n }\n }\n\n handleWordWrapChange() {\n if (this.editor) {\n this.setState(prevState => {\n const { settings } = prevState;\n const wordWrap = settings.wordWrap === 'on' ? 'off' : 'on';\n return {\n settings: {\n ...settings,\n wordWrap,\n },\n };\n });\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string, isOverwrite = false): void {\n if (isOverwrite) {\n this.handleOverwrite(name);\n }\n\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string, panelState?: PanelState) {\n const { fileMetadata, panelState: curPanelState } = this.state;\n const { glContainer } = this.props;\n\n if (\n fileMetadata?.itemName === `/${newName}` &&\n panelState &&\n JSON.stringify(curPanelState) !== JSON.stringify(panelState)\n ) {\n glContainer.close();\n return;\n }\n\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (itemName === undefined) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (command === undefined) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n getDropdownOverflowActions(): DropdownAction[] {\n const { defaultNotebookSettings } = this.props;\n const { settings: initialSettings } = this.state;\n return this.getOverflowActions(\n defaultNotebookSettings.isMinimapEnabled,\n this.getSettings(\n initialSettings,\n defaultNotebookSettings.isMinimapEnabled\n ).wordWrap === 'on'\n );\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n defaultNotebookSettings,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const settings = this.getSettings(\n initialSettings,\n defaultNotebookSettings.isMinimapEnabled\n );\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n {\n action: this.handleMinimapChange,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,\n },\n {\n action: this.handleWordWrapChange,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab?.element.find('.lm_title_before').get(0);\n\n return (\n <>\n {portal &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <Button\n kind=\"ghost\"\n className=\"btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n icon={<FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />}\n tooltip={`Run ${SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}`}\n aria-label=\"Run\"\n />\n {disabledRunButtonTooltip != null && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <Button\n kind=\"ghost\"\n className=\"btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n icon={\n <FontAwesomeIcon\n icon={dhRunSelection}\n transform=\"grow-4\"\n />\n }\n tooltip={`Run Selected ${SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}`}\n aria-label=\"Run Selected\"\n />\n {disabledRunSelectedButtonTooltip != null && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <Button\n kind=\"ghost\"\n className=\"mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n icon={vsSave}\n tooltip={`Save ${GLOBAL_SHORTCUTS.SAVE.getDisplayText()}`}\n aria-label=\"Save\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n icon={vsKebabVertical}\n tooltip=\"More Actions...\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu`\n }}\n >\n <DropdownMenu\n actions={this.getDropdownOverflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </Button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const settings = getSettings(state);\n const defaultNotebookSettings = getDefaultNotebookSettings(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n settings,\n defaultNotebookSettings,\n session,\n sessionLanguage,\n };\n};\n\nconst ConnectedNotebookPanel = connect(\n mapStateToProps,\n { saveSettings: saveSettingsAction },\n null,\n { forwardRef: true }\n)(NotebookPanel);\n\nexport default ConnectedNotebookPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"NotebookPanel.js","names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","Button","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","vsCheck","getFileStorage","saveSettings","saveSettingsAction","getSettings","getDefaultNotebookSettings","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","initialSettings","isMinimapEnabled","minimap","enabled","isWordWrapEnabled","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","undefined","handleMinimapChange","medium","MINIMAP","handleWordWrapChange","WORDWRAP","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorInitialized","handleEditorWillDestroy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handleTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","handleOverwrite","handlePreviewPromotion","getDropdownOverflowActions","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","wordWrap","fileMetadata","isPreview","hasFileId","hasPath","itemName","isUnsaved","length","changeCount","state","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","PROMOTE_FROM_PREVIEW","componentDidUpdate","prevProps","prevState","defaultNotebookSettings","setPreviewStatus","updateEditorWordWrap","updateEditorMinimap","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","beforeClose","options","force","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","removePreviewStatus","dehydratedValue","dehydratedSettings","close","focus","copyName","getCopyFileName","createNotebook","innerEditor","editor","e","debug2","isUndoing","isRedoing","toggleFind","updateOptions","newSettings","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","isOverwrite","oldName","newName","curPanelState","JSON","stringify","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","detail","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","getOverflowActions","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","ConnectedNotebookPanel","forwardRef"],"sources":["../../src/panels/NotebookPanel.tsx"],"sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n Button,\n DropdownAction,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n vsCheck,\n} from '@deephaven/icons';\nimport {\n getFileStorage,\n saveSettings as saveSettingsAction,\n RootState,\n getSettings,\n WorkspaceSettings,\n getDefaultNotebookSettings,\n} from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport type {\n Container,\n EventEmitter,\n Tab,\n CloseOptions,\n} from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\ninterface NotebookSetting {\n isMinimapEnabled: boolean;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: editor.IStandaloneEditorConstructionOptions;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n defaultNotebookSettings: NotebookSetting;\n settings: WorkspaceSettings;\n saveSettings: (settings: WorkspaceSettings) => void;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: editor.IStandaloneEditorConstructionOptions;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n defaultNotebookSettings: null,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorWillDestroy = this.handleEditorWillDestroy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleMinimapChange = this.handleMinimapChange.bind(this);\n this.handleWordWrapChange = this.handleWordWrapChange.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handleTabClick = this.handleTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n this.handleOverwrite = this.handleOverwrite.bind(this);\n this.handlePreviewPromotion = this.handlePreviewPromotion.bind(this);\n this.getDropdownOverflowActions = this.getDropdownOverflowActions.bind(\n this\n );\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: editor.IStandaloneEditorConstructionOptions = {\n value: '',\n language: '',\n wordWrap: 'off',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState != null) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata != null && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId === true && settings.value != null) ||\n (!hasFileId && settings.value != null && settings.value.length > 0);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab != null) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on(\n NotebookEvent.PROMOTE_FROM_PREVIEW,\n this.handlePreviewPromotion\n );\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview, settings } = this.state;\n const { wordWrap } = settings;\n const { defaultNotebookSettings } = this.props;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n if (wordWrap !== prevState.settings.wordWrap) {\n this.updateEditorWordWrap();\n this.debouncedSavePanelState();\n }\n if (\n defaultNotebookSettings.isMinimapEnabled !==\n prevProps.defaultNotebookSettings.isMinimapEnabled\n ) {\n this.updateEditorMinimap();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glEventHub, glContainer } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off(\n NotebookEvent.PROMOTE_FROM_PREVIEW,\n this.handlePreviewPromotion\n );\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n editor?: editor.IStandaloneCodeEditor;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n /**\n * Adds a beforeClose handler to check if a notebook needs to be saved\n * Call panel close with force if the check can be skipped\n *\n * Note that firing a close event manually may trigger before state update occurs\n * In those instances, use force\n */\n initTabCloseOverride() {\n const { glContainer } = this.props;\n glContainer.beforeClose((options?: CloseOptions) => {\n if (options?.force === true) {\n return true;\n }\n\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount) {\n this.setState({ showCloseModal: true });\n return false;\n }\n\n return true;\n });\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | undefined {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n if (settings.wordWrap === undefined) {\n settings.wordWrap = 'off';\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content !== undefined) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n handlePreviewPromotion() {\n this.removePreviewStatus();\n }\n\n getSettings = memoize(\n (\n initialSettings: editor.IStandaloneEditorConstructionOptions,\n isMinimapEnabled: boolean\n ): editor.IStandaloneEditorConstructionOptions => ({\n ...initialSettings,\n minimap: { enabled: isMinimapEnabled },\n })\n );\n\n getOverflowActions = memoize(\n (isMinimapEnabled: boolean, isWordWrapEnabled: boolean) => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n {\n title: 'Show Minimap',\n icon: isMinimapEnabled ? vsCheck : undefined,\n action: this.handleMinimapChange,\n group: ContextActions.groups.medium,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,\n order: 20,\n },\n {\n title: 'Word Wrap',\n icon: isWordWrapEnabled ? vsCheck : undefined,\n action: this.handleWordWrapChange,\n group: ContextActions.groups.medium,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,\n order: 30,\n },\n ]\n );\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue =\n changeCount !== savedChangeCount ? value : undefined;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close({ force: true });\n }\n\n handleCloseSave(): void {\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close({ force: true });\n }\n }\n\n handleCloseCancel(): void {\n this.setState({ showCloseModal: false });\n }\n\n /**\n * Closes overwritten tabs\n * @param fileName The name of the file to be overwritten\n */\n handleOverwrite(fileName: string): void {\n const { glEventHub } = this.props;\n\n glEventHub.emit(\n NotebookEvent.CLOSE_FILE,\n {\n id: fileName,\n itemName: fileName,\n },\n { force: true }\n );\n\n this.focus();\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content);\n }\n\n handleEditorInitialized(innerEditor: editor.IStandaloneCodeEditor): void {\n this.editor = innerEditor;\n }\n\n handleEditorWillDestroy(): void {\n this.editor = undefined;\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n updateEditorMinimap() {\n if (this.editor) {\n const { defaultNotebookSettings } = this.props;\n this.editor.updateOptions({\n minimap: { enabled: defaultNotebookSettings.isMinimapEnabled },\n });\n }\n }\n\n handleMinimapChange() {\n const { settings, defaultNotebookSettings, saveSettings } = this.props;\n const newSettings: WorkspaceSettings = {\n ...settings,\n defaultNotebookSettings: {\n isMinimapEnabled: !defaultNotebookSettings.isMinimapEnabled,\n },\n };\n saveSettings(newSettings);\n }\n\n updateEditorWordWrap() {\n if (this.editor) {\n const { settings } = this.state;\n const { wordWrap } = settings;\n this.editor.updateOptions({\n wordWrap,\n });\n }\n }\n\n handleWordWrapChange() {\n if (this.editor) {\n this.setState(prevState => {\n const { settings } = prevState;\n const wordWrap = settings.wordWrap === 'on' ? 'off' : 'on';\n return {\n settings: {\n ...settings,\n wordWrap,\n },\n };\n });\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: React.MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string, isOverwrite = false): void {\n if (isOverwrite) {\n this.handleOverwrite(name);\n }\n\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string, panelState?: PanelState) {\n const { fileMetadata, panelState: curPanelState } = this.state;\n const { glContainer } = this.props;\n\n if (\n fileMetadata?.itemName === `/${newName}` &&\n panelState &&\n JSON.stringify(curPanelState) !== JSON.stringify(panelState)\n ) {\n glContainer.close();\n return;\n }\n\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handleTabClick(e: MouseEvent): void {\n log.debug('handle NotebookPanel tab click');\n this.focus();\n if (e.detail === 2) {\n this.removePreviewStatus();\n }\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (itemName === undefined) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (command === undefined || command === '') {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n getDropdownOverflowActions(): DropdownAction[] {\n const { defaultNotebookSettings } = this.props;\n const { settings: initialSettings } = this.state;\n return this.getOverflowActions(\n defaultNotebookSettings.isMinimapEnabled,\n this.getSettings(\n initialSettings,\n defaultNotebookSettings.isMinimapEnabled\n ).wordWrap === 'on'\n );\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n defaultNotebookSettings,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const settings = this.getSettings(\n initialSettings,\n defaultNotebookSettings.isMinimapEnabled\n );\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n {\n action: this.handleMinimapChange,\n shortcut: SHORTCUTS.NOTEBOOK.MINIMAP,\n },\n {\n action: this.handleWordWrapChange,\n shortcut: SHORTCUTS.NOTEBOOK.WORDWRAP,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab?.element.find('.lm_title_before').get(0);\n\n return (\n <>\n {portal &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabClicked={this.handleTabClick}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <Button\n kind=\"ghost\"\n className=\"btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n icon={<FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />}\n tooltip={`Run ${SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}`}\n aria-label=\"Run\"\n />\n {disabledRunButtonTooltip != null && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <Button\n kind=\"ghost\"\n className=\"btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n icon={\n <FontAwesomeIcon\n icon={dhRunSelection}\n transform=\"grow-4\"\n />\n }\n tooltip={`Run Selected ${SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}`}\n aria-label=\"Run Selected\"\n />\n {disabledRunSelectedButtonTooltip != null && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <Button\n kind=\"ghost\"\n className=\"mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n icon={vsSave}\n tooltip={`Save ${GLOBAL_SHORTCUTS.SAVE.getDisplayText()}`}\n aria-label=\"Save\"\n />\n <Button\n kind=\"ghost\"\n className=\"btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n icon={vsKebabVertical}\n tooltip=\"More Actions...\"\n onClick={() => {\n // no-op: click is handled in `DropdownMenu`\n }}\n >\n <DropdownMenu\n actions={this.getDropdownOverflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </Button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n onEditorInitialized={this.handleEditorInitialized}\n onEditorWillDestroy={this.handleEditorWillDestroy}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const settings = getSettings(state);\n const defaultNotebookSettings = getDefaultNotebookSettings(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n settings,\n defaultNotebookSettings,\n session,\n sessionLanguage,\n };\n};\n\nconst ConnectedNotebookPanel = connect(\n mapStateToProps,\n { saveSettings: saveSettingsAction },\n null,\n { forwardRef: true }\n)(NotebookPanel);\n\nexport default ConnectedNotebookPanel;\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ interface PanelProps {
11
11
  onFocus: FocusEventHandler<HTMLDivElement>;
12
12
  onBlur: FocusEventHandler<HTMLDivElement>;
13
13
  onTab: (tab: Tab) => void;
14
- onTabClicked: (...args: unknown[]) => void;
14
+ onTabClicked: (e: MouseEvent) => void;
15
15
  onClearAllFilters: (...args: unknown[]) => void;
16
16
  onHide: (...args: unknown[]) => void;
17
17
  onResize: (...args: unknown[]) => void;
@@ -69,7 +69,7 @@ declare class Panel extends PureComponent<PanelProps, PanelState> {
69
69
  componentDidMount(): void;
70
70
  componentWillUnmount(): void;
71
71
  handleTab(tab: Tab): void;
72
- handleTabClicked(...args: unknown[]): void;
72
+ handleTabClicked(e: MouseEvent): void;
73
73
  handleClearAllFilters(...args: unknown[]): void;
74
74
  handleFocus(event: FocusEvent<HTMLDivElement>): void;
75
75
  handleBlur(event: FocusEvent<HTMLDivElement>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/panels/Panel.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAIf,OAAO,EACL,aAAa,EAId,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAEZ,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOnD,UAAU,UAAU;IAClB,cAAc,EAAE,SAAS,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC1C,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1B,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,iBAAiB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAChD,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,CACb,OAAO,EAAE,UAAU,EACnB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAC7D,IAAI,CAAC;IACV,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzC,gBAAgB,EAAE,MAAM,SAAS,CAAC;IAClC,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD;;;;GAIG;AACH,cAAM,KAAM,SAAQ,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;IACvD,MAAM,CAAC,YAAY;;qBAEN,IAAI;4BACG,IAAI;iCACC,IAAI;uBACd,IAAI;sBACL,IAAI;sBACJ,IAAI;wBACF,IAAI;8BACE,IAAI;6BACL,IAAI;4BACL,IAAI;sBACV,IAAI;yBACD,IAAI;0BACH,IAAI;;;;;;;;MAQpB;gBAEU,KAAK,EAAE,UAAU;IA4B7B,iBAAiB,IAAI,IAAI;IAqBzB,oBAAoB,IAAI,IAAI;IAqB5B,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAczB,gBAAgB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK1C,qBAAqB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/C,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAQpD,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAKnD,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKtC,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAK9C,mBAAmB,CACjB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC9C,IAAI;IAKP,gBAAgB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK1C,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKpC,aAAa,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKvC,cAAc,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAKxC,kBAAkB,IAAI,IAAI;IAI1B,sBAAsB,IAAI,IAAI;IAI9B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS1C,eAAe,IAAI,IAAI;IAiBvB,cAAc,IAAI,aAAa;IAS/B,eAAe,IAAI,aAAa;IAShC,kBAAkB,YACN,aAAa,EAAE,cAAc,OAAO,eAAe,OAAO,qBAUpE;IAEF,MAAM,IAAI,YAAY;CAiEvB;AAED,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/panels/Panel.tsx"],"names":[],"mappings":"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"}
@@ -108,11 +108,11 @@ class Panel extends PureComponent {
108
108
  } = this.props;
109
109
  onTab(tab);
110
110
  }
111
- handleTabClicked() {
111
+ handleTabClicked(e) {
112
112
  var {
113
113
  onTabClicked
114
114
  } = this.props;
115
- onTabClicked(...arguments);
115
+ onTabClicked(e);
116
116
  }
117
117
  handleClearAllFilters() {
118
118
  var {
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (...args: unknown[]) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(...args: unknown[]): void {\n const { onTabClicked } = this.props;\n onTabClicked(...args);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (e: MouseEvent) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked(e);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.33.1-beta.4+f1f3abff",
3
+ "version": "0.34.0",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,23 +22,23 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.33.1-beta.4+f1f3abff",
26
- "@deephaven/components": "^0.33.1-beta.4+f1f3abff",
27
- "@deephaven/console": "^0.33.1-beta.4+f1f3abff",
28
- "@deephaven/dashboard": "^0.33.1-beta.4+f1f3abff",
29
- "@deephaven/file-explorer": "^0.33.1-beta.4+f1f3abff",
30
- "@deephaven/filters": "^0.33.1-beta.4+f1f3abff",
31
- "@deephaven/golden-layout": "^0.33.1-beta.4+f1f3abff",
32
- "@deephaven/grid": "^0.33.1-beta.4+f1f3abff",
33
- "@deephaven/icons": "^0.33.1-beta.4+f1f3abff",
34
- "@deephaven/iris-grid": "^0.33.1-beta.4+f1f3abff",
35
- "@deephaven/jsapi-shim": "^0.33.1-beta.4+f1f3abff",
36
- "@deephaven/jsapi-utils": "^0.33.1-beta.4+f1f3abff",
37
- "@deephaven/log": "^0.33.1-beta.4+f1f3abff",
38
- "@deephaven/react-hooks": "^0.33.1-beta.4+f1f3abff",
39
- "@deephaven/redux": "^0.33.1-beta.4+f1f3abff",
40
- "@deephaven/storage": "^0.33.1-beta.4+f1f3abff",
41
- "@deephaven/utils": "^0.33.1-beta.4+f1f3abff",
25
+ "@deephaven/chart": "^0.34.0",
26
+ "@deephaven/components": "^0.34.0",
27
+ "@deephaven/console": "^0.34.0",
28
+ "@deephaven/dashboard": "^0.34.0",
29
+ "@deephaven/file-explorer": "^0.34.0",
30
+ "@deephaven/filters": "^0.34.0",
31
+ "@deephaven/golden-layout": "^0.34.0",
32
+ "@deephaven/grid": "^0.34.0",
33
+ "@deephaven/icons": "^0.34.0",
34
+ "@deephaven/iris-grid": "^0.34.0",
35
+ "@deephaven/jsapi-shim": "^0.34.0",
36
+ "@deephaven/jsapi-utils": "^0.34.0",
37
+ "@deephaven/log": "^0.34.0",
38
+ "@deephaven/react-hooks": "^0.34.0",
39
+ "@deephaven/redux": "^0.34.0",
40
+ "@deephaven/storage": "^0.34.0",
41
+ "@deephaven/utils": "^0.34.0",
42
42
  "@fortawesome/react-fontawesome": "^0.2.0",
43
43
  "classnames": "^2.3.1",
44
44
  "deep-equal": "^2.0.5",
@@ -61,8 +61,8 @@
61
61
  "react-redux": "^7.2.4"
62
62
  },
63
63
  "devDependencies": {
64
- "@deephaven/mocks": "^0.33.1-beta.4+f1f3abff",
65
- "@deephaven/tsconfig": "^0.33.1-beta.4+f1f3abff"
64
+ "@deephaven/mocks": "^0.34.0",
65
+ "@deephaven/tsconfig": "^0.34.0"
66
66
  },
67
67
  "files": [
68
68
  "dist"
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "f1f3abffc9df4178477714f06dcc57d40d6942a9"
73
+ "gitHead": "66d8053255a14a60962b7048b93bbf8d0b87ba70"
74
74
  }