@deephaven/dashboard-core-plugins 0.32.1-table-plugins.9 → 0.33.1-auth-plugins.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/ConsolePlugin.d.ts.map +1 -1
  2. package/dist/ConsolePlugin.js +38 -40
  3. package/dist/ConsolePlugin.js.map +1 -1
  4. package/dist/GridPlugin.d.ts +3 -3
  5. package/dist/GridPlugin.d.ts.map +1 -1
  6. package/dist/GridPlugin.js.map +1 -1
  7. package/dist/events/NotebookEvent.d.ts +1 -0
  8. package/dist/events/NotebookEvent.d.ts.map +1 -1
  9. package/dist/events/NotebookEvent.js +1 -0
  10. package/dist/events/NotebookEvent.js.map +1 -1
  11. package/dist/linker/Linker.d.ts +1 -1
  12. package/dist/linker/Linker.d.ts.map +1 -1
  13. package/dist/linker/Linker.js +39 -11
  14. package/dist/linker/Linker.js.map +1 -1
  15. package/dist/linker/LinkerLink.d.ts +2 -0
  16. package/dist/linker/LinkerLink.d.ts.map +1 -1
  17. package/dist/linker/LinkerLink.js +6 -3
  18. package/dist/linker/LinkerLink.js.map +1 -1
  19. package/dist/linker/LinkerOverlayContent.d.ts +2 -1
  20. package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
  21. package/dist/linker/LinkerOverlayContent.js +7 -3
  22. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  23. package/dist/linker/LinkerUtils.d.ts +1 -1
  24. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  25. package/dist/linker/LinkerUtils.js +1 -0
  26. package/dist/linker/LinkerUtils.js.map +1 -1
  27. package/dist/panels/ChartPanel.d.ts +6 -10
  28. package/dist/panels/ChartPanel.d.ts.map +1 -1
  29. package/dist/panels/ChartPanel.js +8 -1
  30. package/dist/panels/ChartPanel.js.map +1 -1
  31. package/dist/panels/ConsolePanel.css +13 -0
  32. package/dist/panels/ConsolePanel.css.map +1 -1
  33. package/dist/panels/ConsolePanel.d.ts +1 -1
  34. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  35. package/dist/panels/ConsolePanel.js +9 -3
  36. package/dist/panels/ConsolePanel.js.map +1 -1
  37. package/dist/panels/IrisGridPanel.d.ts +17 -62
  38. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  39. package/dist/panels/IrisGridPanel.js +4 -4
  40. package/dist/panels/IrisGridPanel.js.map +1 -1
  41. package/dist/panels/NotebookPanel.d.ts +11 -4
  42. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  43. package/dist/panels/NotebookPanel.js +33 -18
  44. package/dist/panels/NotebookPanel.js.map +1 -1
  45. package/dist/panels/Panel.d.ts +2 -2
  46. package/dist/panels/Panel.d.ts.map +1 -1
  47. package/dist/panels/Panel.js +2 -2
  48. package/dist/panels/Panel.js.map +1 -1
  49. package/dist/redux/actions.d.ts +2 -10
  50. package/dist/redux/actions.d.ts.map +1 -1
  51. package/dist/redux/actions.js.map +1 -1
  52. package/dist/redux/selectors.d.ts +1 -1
  53. package/dist/redux/selectors.d.ts.map +1 -1
  54. package/dist/redux/selectors.js.map +1 -1
  55. package/package.json +24 -22
@@ -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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"}
@@ -1,10 +1,10 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { DashboardPluginComponentProps, PanelHydrateFunction } from '@deephaven/dashboard';
3
3
  import { IrisGridThemeType } from '@deephaven/iris-grid';
4
- import { IrisGridPanelProps, TablePlugin } from './panels';
4
+ import { IrisGridPanelProps } from './panels';
5
5
  export type GridPluginProps = Partial<DashboardPluginComponentProps> & {
6
6
  getDownloadWorker?: () => Promise<ServiceWorker>;
7
- loadPlugin?: (name: string) => TablePlugin;
7
+ loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;
8
8
  hydrate: PanelHydrateFunction<IrisGridPanelProps>;
9
9
  theme?: Partial<IrisGridThemeType>;
10
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAiB,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQ1E,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACrE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAC3C,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwErE;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AACjE,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAQ7D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACrE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwErE;AAED,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","SUPPORTED_TYPES","dh","VariableType","TABLE","TREETABLE","HIERARCHICALTABLE","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import { DragEvent, useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { Table, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps, TablePlugin } from './panels';\n\nconst SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n];\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => TablePlugin;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport function GridPlugin(props: GridPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!SUPPORTED_TYPES.includes(type)) {\n return;\n }\n\n const metadata = { name, table: name, type: widget.type };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component' as const,\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [getDownloadWorker, id, layout, loadPlugin, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAAoBA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AACzD,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAC7B,SAASC,oBAAoB,QAA2B,sBAAsB;AAE9E,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAEtB,IAAMC,eAAyB,GAAG,CAChCC,EAAE,CAACC,YAAY,CAACC,KAAK,EACrBF,EAAE,CAACC,YAAY,CAACE,SAAS,EACzBH,EAAE,CAACC,YAAY,CAACG,iBAAiB,CAClC;AASD,OAAO,SAASC,UAAU,CAACC,KAAsB,EAAsB;EACrEd,4BAA4B,CAACc,KAAK,CAAC;EACnC,IAAM;IACJC,iBAAiB;IACjBC,UAAU;IACVC,EAAE;IACFC,MAAM;IACNC,iBAAiB;IACjBC,OAAO;IACPC;EACF,CAAC,GAAGP,KAAK;EACT,IAAMQ,eAAe,GAAGxB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCyB,SAAS;MACTC,KAAK;MACLC,OAAO,GAAGpB,OAAO,CAACqB,QAAQ,EAAE;MAC5BC;IAMF,CAAC;IACC,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAI,CAACpB,eAAe,CAACuB,QAAQ,CAACD,IAAI,CAAC,EAAE;MACnC;IACF;IAEA,IAAME,QAAQ,GAAG;MAAEH,IAAI;MAAEI,KAAK,EAAEJ,IAAI;MAAEC,IAAI,EAAEF,MAAM,CAACE;IAAK,CAAC;IACzD,IAAMI,SAAS,GAAG,MAChBT,KAAK,EAAE,CAACU,IAAI,CAAEF,KAAY,IAAK5B,oBAAoB,CAAC6B,SAAS,CAACD,KAAK,CAAC,CAAC;IACvE,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBAA0B;MAChCO,SAAS,EAAE9B,aAAa,CAAC+B,SAAS;MAClCvB,KAAK,EAAE;QACLC,iBAAiB;QACjBC,UAAU;QACVsB,gBAAgB,EAAErB,EAAE;QACpBA,EAAE,EAAEQ,OAAO;QACXM,QAAQ;QACRE,SAAS;QACTZ;MACF,CAAC;MACDkB,KAAK,EAAEX,IAAI;MACXX,EAAE,EAAEQ;IACN,CAAC;IAED,IAAM;MAAEe;IAAK,CAAC,GAAGtB,MAAM;IACvBjB,WAAW,CAACwC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEZ;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACR,iBAAiB,EAAEE,EAAE,EAAEC,MAAM,EAAEF,UAAU,EAAEK,KAAK,CAAC,CACnD;EAEDtB,SAAS,CACP,SAAS2C,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CACfb,aAAa,CAAC+B,SAAS,EACvB/B,aAAa,EACbc,OAAO,CACR,CACF;IACD,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAACzB,OAAO,EAAED,iBAAiB,CAAC,CAC7B;EAEDhB,WAAW,CAACe,MAAM,CAAC4B,QAAQ,EAAE5C,UAAU,CAAC6C,IAAI,EAAEzB,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAeT,UAAU"}
1
+ {"version":3,"file":"GridPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","SUPPORTED_TYPES","dh","VariableType","TABLE","TREETABLE","HIERARCHICALTABLE","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import React, { DragEvent, useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { Table, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps } from './panels';\n\nconst SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n];\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport function GridPlugin(props: GridPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!SUPPORTED_TYPES.includes(type)) {\n return;\n }\n\n const metadata = { name, table: name, type: widget.type };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component' as const,\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [getDownloadWorker, id, layout, loadPlugin, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAA2BA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAChE,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAC7B,SAASC,oBAAoB,QAA2B,sBAAsB;AAE9E,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAEtB,IAAMC,eAAyB,GAAG,CAChCC,EAAE,CAACC,YAAY,CAACC,KAAK,EACrBF,EAAE,CAACC,YAAY,CAACE,SAAS,EACzBH,EAAE,CAACC,YAAY,CAACG,iBAAiB,CAClC;AASD,OAAO,SAASC,UAAU,CAACC,KAAsB,EAAsB;EACrEd,4BAA4B,CAACc,KAAK,CAAC;EACnC,IAAM;IACJC,iBAAiB;IACjBC,UAAU;IACVC,EAAE;IACFC,MAAM;IACNC,iBAAiB;IACjBC,OAAO;IACPC;EACF,CAAC,GAAGP,KAAK;EACT,IAAMQ,eAAe,GAAGxB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCyB,SAAS;MACTC,KAAK;MACLC,OAAO,GAAGpB,OAAO,CAACqB,QAAQ,EAAE;MAC5BC;IAMF,CAAC;IACC,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAI,CAACpB,eAAe,CAACuB,QAAQ,CAACD,IAAI,CAAC,EAAE;MACnC;IACF;IAEA,IAAME,QAAQ,GAAG;MAAEH,IAAI;MAAEI,KAAK,EAAEJ,IAAI;MAAEC,IAAI,EAAEF,MAAM,CAACE;IAAK,CAAC;IACzD,IAAMI,SAAS,GAAG,MAChBT,KAAK,EAAE,CAACU,IAAI,CAAEF,KAAY,IAAK5B,oBAAoB,CAAC6B,SAAS,CAACD,KAAK,CAAC,CAAC;IACvE,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBAA0B;MAChCO,SAAS,EAAE9B,aAAa,CAAC+B,SAAS;MAClCvB,KAAK,EAAE;QACLC,iBAAiB;QACjBC,UAAU;QACVsB,gBAAgB,EAAErB,EAAE;QACpBA,EAAE,EAAEQ,OAAO;QACXM,QAAQ;QACRE,SAAS;QACTZ;MACF,CAAC;MACDkB,KAAK,EAAEX,IAAI;MACXX,EAAE,EAAEQ;IACN,CAAC;IAED,IAAM;MAAEe;IAAK,CAAC,GAAGtB,MAAM;IACvBjB,WAAW,CAACwC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEZ;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACR,iBAAiB,EAAEE,EAAE,EAAEC,MAAM,EAAEF,UAAU,EAAEK,KAAK,CAAC,CACnD;EAEDtB,SAAS,CACP,SAAS2C,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CACfb,aAAa,CAAC+B,SAAS,EACvB/B,aAAa,EACbc,OAAO,CACR,CACF;IACD,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAACzB,OAAO,EAAED,iBAAiB,CAAC,CAC7B;EAEDhB,WAAW,CAACe,MAAM,CAAC4B,QAAQ,EAAE5C,UAAU,CAAC6C,IAAI,EAAEzB,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAeT,UAAU"}
@@ -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"}
@@ -83,7 +83,7 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
83
83
  getCachedLinks: (links: Link[], linkInProgress: Link | undefined, isolateForPanelId: string | undefined) => Link[];
84
84
  isOverlayShown(): boolean;
85
85
  updateSelectionValidators(): void;
86
- updateLinkInProgressType(linkInProgress: Link, type?: LinkType): void;
86
+ updateLinkInProgressType(type?: LinkType): void;
87
87
  isColumnSelectionValid(panel: PanelComponent, tableColumn?: LinkColumn): boolean;
88
88
  render(): JSX.Element | null;
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Linker.d.ts","sourceRoot":"","sources":["../../src/linker/Linker.tsx"],"names":[],"mappings":"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"}
@@ -310,6 +310,26 @@ export class Linker extends Component {
310
310
  this.deleteLinks(linksToDelete);
311
311
  break;
312
312
  }
313
+ case 'chartLink':
314
+ {
315
+ var existingLinkEnd = isReversed === true ? start : end;
316
+ var existingLinkStart = isReversed === true ? end : start;
317
+ log.debug('creating chartlink', {
318
+ existingLinkEnd,
319
+ start,
320
+ end
321
+ });
322
+ // Don't allow linking more than one column per source to each chart column
323
+ var _linksToDelete = links.filter(_ref3 => {
324
+ var {
325
+ end: panelLinkEnd,
326
+ start: panelLinkStart
327
+ } = _ref3;
328
+ return (panelLinkStart === null || panelLinkStart === void 0 ? void 0 : panelLinkStart.panelId) === existingLinkStart.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkEnd.panelId && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnName) === existingLinkEnd.columnName && (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.columnType) === existingLinkEnd.columnType;
329
+ });
330
+ this.deleteLinks(_linksToDelete);
331
+ break;
332
+ }
313
333
  case 'tableLink':
314
334
  // No-op
315
335
  break;
@@ -400,10 +420,10 @@ export class Linker extends Component {
400
420
  var {
401
421
  deleteDashboardLinks
402
422
  } = this.props;
403
- deleteDashboardLinks(localDashboardId, links.map(_ref3 => {
423
+ deleteDashboardLinks(localDashboardId, links.map(_ref4 => {
404
424
  var {
405
425
  id
406
- } = _ref3;
426
+ } = _ref4;
407
427
  return id;
408
428
  }));
409
429
  }
@@ -611,12 +631,20 @@ export class Linker extends Component {
611
631
  break;
612
632
  }
613
633
  }
614
- updateLinkInProgressType(linkInProgress) {
615
- var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'invalid';
616
- this.setState({
617
- linkInProgress: _objectSpread(_objectSpread({}, linkInProgress), {}, {
618
- type
619
- })
634
+ updateLinkInProgressType() {
635
+ var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'invalid';
636
+ this.setState(_ref5 => {
637
+ var {
638
+ linkInProgress
639
+ } = _ref5;
640
+ if (linkInProgress !== undefined) {
641
+ return {
642
+ linkInProgress: _objectSpread(_objectSpread({}, linkInProgress), {}, {
643
+ type
644
+ })
645
+ };
646
+ }
647
+ return null;
620
648
  });
621
649
  }
622
650
  isColumnSelectionValid(panel, tableColumn) {
@@ -629,7 +657,7 @@ export class Linker extends Component {
629
657
  if (tableColumn == null) {
630
658
  if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {
631
659
  // Link started, end point is not a valid target
632
- this.updateLinkInProgressType(linkInProgress);
660
+ this.updateLinkInProgressType();
633
661
  }
634
662
  return false;
635
663
  }
@@ -638,7 +666,7 @@ export class Linker extends Component {
638
666
  if (!isLinkableColumn(tableColumn)) {
639
667
  log.debug2('Column is not filterable', tableColumn.description);
640
668
  if ((linkInProgress === null || linkInProgress === void 0 ? void 0 : linkInProgress.start) != null) {
641
- this.updateLinkInProgressType(linkInProgress, 'invalid');
669
+ this.updateLinkInProgressType('invalid');
642
670
  }
643
671
  return false;
644
672
  }
@@ -662,7 +690,7 @@ export class Linker extends Component {
662
690
  columnType: tableColumn.type
663
691
  };
664
692
  var type = isReversed !== undefined && isReversed ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId) : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);
665
- this.updateLinkInProgressType(linkInProgress, type);
693
+ this.updateLinkInProgressType(type);
666
694
  return type !== 'invalid';
667
695
  }
668
696
  render() {