@deephaven/dashboard-core-plugins 0.6.1-markdownnotebooks.7 → 0.6.3-bard.1

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 (44) hide show
  1. package/dist/ConsolePlugin.d.ts.map +1 -1
  2. package/dist/ConsolePlugin.js +5 -11
  3. package/dist/ConsolePlugin.js.map +1 -1
  4. package/dist/controls/ControlType.d.ts +0 -1
  5. package/dist/controls/ControlType.d.ts.map +1 -1
  6. package/dist/controls/ControlType.js +0 -2
  7. package/dist/controls/ControlType.js.map +1 -1
  8. package/dist/events/index.d.ts +0 -1
  9. package/dist/events/index.js +0 -1
  10. package/dist/events/index.js.map +1 -1
  11. package/dist/linker/Linker.d.ts +13 -13
  12. package/dist/linker/Linker.d.ts.map +1 -1
  13. package/dist/linker/Linker.js +5 -6
  14. package/dist/linker/Linker.js.map +1 -1
  15. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  16. package/dist/panels/ConsolePanel.js +3 -3
  17. package/dist/panels/ConsolePanel.js.map +1 -1
  18. package/dist/panels/DropdownFilterPanel.d.ts +1 -1
  19. package/dist/panels/FileExplorerPanel.js.map +1 -1
  20. package/dist/panels/IrisGridPanel.d.ts +9 -3
  21. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  22. package/dist/panels/IrisGridPanel.js +40 -11
  23. package/dist/panels/IrisGridPanel.js.map +1 -1
  24. package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +17 -17
  27. package/dist/events/ControlEvent.d.ts +0 -5
  28. package/dist/events/ControlEvent.d.ts.map +0 -1
  29. package/dist/events/ControlEvent.js +0 -8
  30. package/dist/events/ControlEvent.js.map +0 -1
  31. package/dist/panels/MarkdownNotebookContainer.d.ts +0 -21
  32. package/dist/panels/MarkdownNotebookContainer.d.ts.map +0 -1
  33. package/dist/panels/MarkdownNotebookContainer.js +0 -35
  34. package/dist/panels/MarkdownNotebookContainer.js.map +0 -1
  35. package/dist/panels/MarkdownNotebookEditor.d.ts +0 -46
  36. package/dist/panels/MarkdownNotebookEditor.d.ts.map +0 -1
  37. package/dist/panels/MarkdownNotebookEditor.js +0 -257
  38. package/dist/panels/MarkdownNotebookEditor.js.map +0 -1
  39. package/dist/panels/MarkdownNotebookPanel.css +0 -127
  40. package/dist/panels/MarkdownNotebookPanel.css.map +0 -1
  41. package/dist/panels/MarkdownNotebookPanel.d.ts +0 -91
  42. package/dist/panels/MarkdownNotebookPanel.d.ts.map +0 -1
  43. package/dist/panels/MarkdownNotebookPanel.js +0 -446
  44. package/dist/panels/MarkdownNotebookPanel.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,6BAA6B,EAI9B,MAAM,sBAAsB,CAAC;AAoC9B,eAAO,MAAM,aAAa,qDAKvB,6BAA6B,KAAG,WAqclC,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,6BAA6B,EAI9B,MAAM,sBAAsB,CAAC;AAmC9B,eAAO,MAAM,aAAa,qDAKvB,6BAA6B,KAAG,WA2blC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -6,7 +6,6 @@ import { useDispatch } from 'react-redux';
6
6
  import shortid from 'shortid';
7
7
  import { ConsoleEvent, NotebookEvent } from "./events/index.js";
8
8
  import { ConsolePanel, CommandHistoryPanel, FileExplorerPanel, LogPanel, NotebookPanel } from "./panels/index.js";
9
- import MarkdownNotebookPanel from "./panels/MarkdownNotebookPanel.js";
10
9
  import { setDashboardConsoleSettings } from "./redux/index.js";
11
10
  var log = Log.module('ConsolePlugin');
12
11
 
@@ -259,8 +258,6 @@ export var ConsolePlugin = (_ref) => {
259
258
  }
260
259
  }, [panelManager]);
261
260
  var makeConfig = useCallback((_ref3) => {
262
- var _fileMetadata$itemNam;
263
-
264
261
  var {
265
262
  id: panelId,
266
263
  settings,
@@ -272,16 +269,13 @@ export var ConsolePlugin = (_ref) => {
272
269
  var panelState = {
273
270
  settings,
274
271
  fileMetadata
275
- }; // KLUDGE: show a different component type for markdown notebooks
276
-
277
- var component = fileMetadata !== null && fileMetadata !== void 0 && (_fileMetadata$itemNam = fileMetadata.itemName) !== null && _fileMetadata$itemNam !== void 0 && _fileMetadata$itemNam.endsWith('.md') ? MarkdownNotebookPanel.COMPONENT : NotebookPanel.COMPONENT;
272
+ };
278
273
  var title = getNotebookTitle(fileMetadata);
279
274
  return {
280
275
  type: 'react-component',
281
- component,
276
+ component: NotebookPanel.COMPONENT,
282
277
  isFocusOnShow: false,
283
278
  props: {
284
- id: panelId,
285
279
  localDashboardId: id,
286
280
  metadata: {
287
281
  id: panelId
@@ -352,14 +346,14 @@ export var ConsolePlugin = (_ref) => {
352
346
  if (previewTabId != null) {
353
347
  panelId = previewTabId;
354
348
  stack = LayoutUtils.getStackForConfig(layout.root, {
355
- // component: NotebookPanel.COMPONENT,
349
+ component: NotebookPanel.COMPONENT,
356
350
  id: panelId
357
351
  });
358
352
  }
359
353
 
360
354
  if (stack == null) {
361
355
  panelId = getPanelIdForFileMetadata(fileMetadata);
362
- stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT, MarkdownNotebookPanel.COMPONENT]);
356
+ stack = LayoutUtils.getStackForComponentTypes(layout.root, [NotebookPanel.COMPONENT]);
363
357
  }
364
358
 
365
359
  var config = makeConfig({
@@ -393,7 +387,7 @@ export var ConsolePlugin = (_ref) => {
393
387
  }
394
388
  }, [createNotebook, panelManager]);
395
389
  useEffect(() => {
396
- var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel), registerComponent('MarkdownNotebookPanel', MarkdownNotebookPanel)];
390
+ var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel)];
397
391
  return () => {
398
392
  cleanups.forEach(cleanup => cleanup());
399
393
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","MarkdownNotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","ConsolePlugin","id","layout","panelManager","registerComponent","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","component","endsWith","COMPONENT","type","isFocusOnShow","props","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, {\n ComponentType,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport MarkdownNotebookPanel from './panels/MarkdownNotebookPanel';\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 const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\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, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /**\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (!panelId) {\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 // KLUDGE: show a different component type for markdown notebooks\n const component = fileMetadata?.itemName?.endsWith('.md')\n ? MarkdownNotebookPanel.COMPONENT\n : NotebookPanel.COMPONENT;\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component,\n isFocusOnShow: false,\n props: {\n id: panelId,\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId) {\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 (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\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 MarkdownNotebookPanel.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 (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n registerComponent(\n 'MarkdownNotebookPanel',\n (MarkdownNotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
1
+ {"version":3,"sources":["../src/ConsolePlugin.tsx"],"names":["LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","ConsolePlugin","id","layout","panelManager","registerComponent","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","props","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, {\n ComponentType,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\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, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /**\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (!panelId) {\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',\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 },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId) {\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 (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\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 (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
@@ -4,6 +4,5 @@ declare class ControlType {
4
4
  static INPUT_FILTER: string;
5
5
  static MARKDOWN: string;
6
6
  static FILTER_SET_MANAGER: string;
7
- static MARKDOWN_NOTEBOOK: string;
8
7
  }
9
8
  //# sourceMappingURL=ControlType.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ControlType.d.ts","sourceRoot":"","sources":["../../src/controls/ControlType.js"],"names":[],"mappings":";AAAA;IACE,+BAAuD;IAEvD,4BAAiD;IAEjD,wBAAyC;IAEzC,kCAA6D;IAE7D,iCAA2D;CAC5D"}
1
+ {"version":3,"file":"ControlType.d.ts","sourceRoot":"","sources":["../../src/controls/ControlType.js"],"names":[],"mappings":";AAAA;IACE,+BAAuD;IAEvD,4BAAiD;IAEjD,wBAAyC;IAEzC,kCAA6D;CAC9D"}
@@ -10,7 +10,5 @@ _defineProperty(ControlType, "MARKDOWN", 'ControlType.MARKDOWN');
10
10
 
11
11
  _defineProperty(ControlType, "FILTER_SET_MANAGER", 'ControlType.FILTER_SET_MANAGER');
12
12
 
13
- _defineProperty(ControlType, "MARKDOWN_NOTEBOOK", 'ControlType.MARKDOWN_NOTEBOOK');
14
-
15
13
  export default ControlType;
16
14
  //# sourceMappingURL=ControlType.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/controls/ControlType.js"],"names":["ControlType"],"mappings":";;AAAA,MAAMA,WAAN,CAAkB;;gBAAZA,W,qBACqB,6B;;gBADrBA,W,kBAGkB,0B;;gBAHlBA,W,cAKc,sB;;gBALdA,W,wBAOwB,gC;;gBAPxBA,W,uBASuB,+B;;AAG7B,eAAeA,WAAf","sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n\n static MARKDOWN_NOTEBOOK = 'ControlType.MARKDOWN_NOTEBOOK';\n}\n\nexport default ControlType;\n"],"file":"ControlType.js"}
1
+ {"version":3,"sources":["../../src/controls/ControlType.js"],"names":["ControlType"],"mappings":";;AAAA,MAAMA,WAAN,CAAkB;;gBAAZA,W,qBACqB,6B;;gBADrBA,W,kBAGkB,0B;;gBAHlBA,W,cAKc,sB;;gBALdA,W,wBAOwB,gC;;AAG9B,eAAeA,WAAf","sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n}\n\nexport default ControlType;\n"],"file":"ControlType.js"}
@@ -1,6 +1,5 @@
1
1
  export { default as ChartEvent } from "./ChartEvent";
2
2
  export { default as ConsoleEvent } from "./ConsoleEvent";
3
- export { default as ControlEvent } from "./ControlEvent";
4
3
  export { default as InputFilterEvent } from "./InputFilterEvent";
5
4
  export { default as IrisGridEvent } from "./IrisGridEvent";
6
5
  export { default as MarkdownEvent } from "./MarkdownEvent";
@@ -1,6 +1,5 @@
1
1
  export { default as ChartEvent } from "./ChartEvent.js";
2
2
  export { default as ConsoleEvent } from "./ConsoleEvent.js";
3
- export { default as ControlEvent } from "./ControlEvent.js";
4
3
  export { default as InputFilterEvent } from "./InputFilterEvent.js";
5
4
  export { default as IrisGridEvent } from "./IrisGridEvent.js";
6
5
  export { default as MarkdownEvent } from "./MarkdownEvent.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/events/index.js"],"names":["default","ChartEvent","ConsoleEvent","ControlEvent","InputFilterEvent","IrisGridEvent","MarkdownEvent","NotebookEvent","PandasEvent","TabEvent"],"mappings":"SAASA,OAAO,IAAIC,U;SACXD,OAAO,IAAIE,Y;SACXF,OAAO,IAAIG,Y;SACXH,OAAO,IAAII,gB;SACXJ,OAAO,IAAIK,a;SACXL,OAAO,IAAIM,a;SACXN,OAAO,IAAIO,a;SACXP,OAAO,IAAIQ,W;SACXR,OAAO,IAAIS,Q","sourcesContent":["export { default as ChartEvent } from './ChartEvent';\nexport { default as ConsoleEvent } from './ConsoleEvent';\nexport { default as ControlEvent } from './ControlEvent';\nexport { default as InputFilterEvent } from './InputFilterEvent';\nexport { default as IrisGridEvent } from './IrisGridEvent';\nexport { default as MarkdownEvent } from './MarkdownEvent';\nexport { default as NotebookEvent } from './NotebookEvent';\nexport { default as PandasEvent } from './PandasEvent';\nexport { default as TabEvent } from './TabEvent';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/events/index.js"],"names":["default","ChartEvent","ConsoleEvent","InputFilterEvent","IrisGridEvent","MarkdownEvent","NotebookEvent","PandasEvent","TabEvent"],"mappings":"SAASA,OAAO,IAAIC,U;SACXD,OAAO,IAAIE,Y;SACXF,OAAO,IAAIG,gB;SACXH,OAAO,IAAII,a;SACXJ,OAAO,IAAIK,a;SACXL,OAAO,IAAIM,a;SACXN,OAAO,IAAIO,W;SACXP,OAAO,IAAIQ,Q","sourcesContent":["export { default as ChartEvent } from './ChartEvent';\nexport { default as ConsoleEvent } from './ConsoleEvent';\nexport { default as InputFilterEvent } from './InputFilterEvent';\nexport { default as IrisGridEvent } from './IrisGridEvent';\nexport { default as MarkdownEvent } from './MarkdownEvent';\nexport { default as NotebookEvent } from './NotebookEvent';\nexport { default as PandasEvent } from './PandasEvent';\nexport { default as TabEvent } from './TabEvent';\n"],"file":"index.js"}
@@ -15,12 +15,12 @@ interface OwnProps {
15
15
  localDashboardId: string;
16
16
  }
17
17
  declare const connector: import("react-redux").InferableComponentEnhancerWithProps<StateProps & {
18
- setActiveTool: (activeTool: string) => void;
19
- setDashboardLinks: (dashboardId: string, links: Link[]) => void;
20
- addDashboardLinks: (dashboardId: string, links: Link[]) => void;
21
- deleteDashboardLinks: (dashboardId: string, linkIds: string[]) => void;
22
- setDashboardIsolatedLinkerPanelId: (dashboardId: string, panelId: string | undefined) => void;
23
- setDashboardColumnSelectionValidator: (dashboardId: string, columnValidator: ((panel: PanelComponent, column?: LinkColumn | undefined) => boolean) | undefined) => void;
18
+ setActiveTool: import("@deephaven/redux").PayloadActionCreator<string>;
19
+ setDashboardLinks: (id: string, links: any[]) => any;
20
+ addDashboardLinks: (id: string, newLinks: any[]) => any;
21
+ deleteDashboardLinks: (id: string, linkIds: string[]) => any;
22
+ setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | undefined) => any;
23
+ setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: any) => any;
24
24
  }, OwnProps>;
25
25
  export declare type LinkerProps = OwnProps & StateProps & ConnectedProps<typeof connector>;
26
26
  export declare type LinkerState = {
@@ -80,12 +80,12 @@ export declare class Linker extends Component<LinkerProps, LinkerState> {
80
80
  render(): JSX.Element;
81
81
  }
82
82
  declare const _default: import("react-redux").ConnectedComponent<typeof Linker, import("react-redux").Omit<React.ClassAttributes<Linker> & OwnProps & StateProps & {
83
- setActiveTool: (activeTool: string) => void;
84
- setDashboardLinks: (dashboardId: string, links: Link[]) => void;
85
- addDashboardLinks: (dashboardId: string, links: Link[]) => void;
86
- deleteDashboardLinks: (dashboardId: string, linkIds: string[]) => void;
87
- setDashboardIsolatedLinkerPanelId: (dashboardId: string, panelId: string | undefined) => void;
88
- setDashboardColumnSelectionValidator: (dashboardId: string, columnValidator: ((panel: PanelComponent<import("@deephaven/dashboard").PanelProps>, column?: LinkColumn | undefined) => boolean) | undefined) => void;
89
- }, "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "links" | "timeZone" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator" | "activeTool" | "isolatedLinkerPanelId"> & OwnProps>;
83
+ setActiveTool: import("@deephaven/redux").PayloadActionCreator<string>;
84
+ setDashboardLinks: (id: string, links: any[]) => any;
85
+ addDashboardLinks: (id: string, newLinks: any[]) => any;
86
+ deleteDashboardLinks: (id: string, linkIds: string[]) => any;
87
+ setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | undefined) => any;
88
+ setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: any) => any;
89
+ }, "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "links" | "timeZone" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator" | "isolatedLinkerPanelId"> & OwnProps>;
90
90
  export default _default;
91
91
  //# sourceMappingURL=Linker.d.ts.map
@@ -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":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AAKtD,OAAO,EAEL,cAAc,EAEd,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AAsBzD,OAAoB,EAElB,IAAI,EACJ,UAAU,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACT,MAAM,eAAe,CAAC;AAIvB,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAYD,QAAA,MAAM,SAAS;;;;;;;YAOb,CAAC;AAEH,oBAAY,WAAW,GAAG,QAAQ,GAChC,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,oBAAY,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB,CAAC;AAEF,qBAAa,MAAO,SAAQ,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;gBACjD,KAAK,EAAE,WAAW;IAsB9B,iBAAiB,IAAI,IAAI;IAMzB,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAWhD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAItD,oBAAoB,IAAI,IAAI;IAK5B,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAiB1C,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAiBzC,YAAY,IAAI,IAAI;IASpB,UAAU,IAAI,IAAI;IAMlB,uBAAuB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxE,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAiCzE,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAoBxE,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvE;;;;;;OAMG;IACH,cAAc,CACZ,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,UAAU,EAClB,gBAAgB,UAAQ,EACxB,6BAA6B,CAAC,EAAE,MAAM,GACrC,IAAI;IAqFP,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAmBzC;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI;IAalE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAK7B,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAelD,qBAAqB,IAAI,IAAI;IAe7B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUvC,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAyCrE,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAc3E,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOxC,wBAAwB,IAAI,IAAI;IAIhC,iBAAiB,IAAI,IAAI;IAIzB,YAAY,IAAI,IAAI;IAMpB;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW5C,cAAc,gFAiBX;IAEH,cAAc,IAAI,OAAO;IAKzB,yBAAyB,IAAI,IAAI;IAmBjC,wBAAwB,CACtB,cAAc,EAAE,IAAI,EACpB,IAAI,GAAE,QAAoB,GACzB,IAAI;IASP,sBAAsB,CACpB,KAAK,EAAE,cAAc,EACrB,WAAW,CAAC,EAAE,UAAU,GACvB,OAAO;IAqCV,MAAM,IAAI,GAAG,CAAC,OAAO;CAsCtB;;;;;;;;;AAED,wBAAiC"}
@@ -313,18 +313,17 @@ export class Linker extends Component {
313
313
  // filterSource links have a limit of 1 link per target
314
314
  // New link validation passed, delete existing links before adding the new one
315
315
  var {
316
- links: _links
316
+ links
317
317
  } = this.props;
318
318
  var existingLinkPanelId = isReversed ? start.panelId : end.panelId; // In cases with multiple targets per panel (i.e. chart filters)
319
319
  // links would have to be filtered by panelId and columnName and columnType
320
320
 
321
- var linksToDelete = _links.filter((_ref2) => {
321
+ var linksToDelete = links.filter((_ref2) => {
322
322
  var {
323
323
  end: panelLinkEnd
324
324
  } = _ref2;
325
325
  return (panelLinkEnd === null || panelLinkEnd === void 0 ? void 0 : panelLinkEnd.panelId) === existingLinkPanelId;
326
326
  });
327
-
328
327
  this.deleteLinks(linksToDelete);
329
328
  break;
330
329
  }
@@ -363,14 +362,14 @@ export class Linker extends Component {
363
362
  end
364
363
  } = link;
365
364
  var {
366
- panelId: _panelId,
365
+ panelId,
367
366
  columnName,
368
367
  columnType
369
368
  } = end;
370
- var endPanel = panelManager.getOpenedPanelById(_panelId);
369
+ var endPanel = panelManager.getOpenedPanelById(panelId);
371
370
 
372
371
  if (!endPanel) {
373
- log.debug('endPanel no longer exists, ignoring unsetFilterValue', _panelId);
372
+ log.debug('endPanel no longer exists, ignoring unsetFilterValue', panelId);
374
373
  } else if (isLinkablePanel(endPanel)) {
375
374
  endPanel.unsetFilterValue(columnName, columnType);
376
375
  } else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateUtils","TableUtils","DateTimeColumnFormatter","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","undefined","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport { DateUtils, TableUtils } from '@deephaven/iris-grid';\nimport { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: LinkerState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\ntype DispatchProps = {\n setActiveTool: (activeTool: string) => void;\n setDashboardLinks: (dashboardId: string, links: Link[]) => void;\n addDashboardLinks: (dashboardId: string, links: Link[]) => void;\n deleteDashboardLinks: (dashboardId: string, linkIds: string[]) => void;\n setDashboardIsolatedLinkerPanelId: (\n dashboardId: string,\n panelId: string | undefined\n ) => void;\n setDashboardColumnSelectionValidator: (\n dashboardId: string,\n columnValidator:\n | ((panel: PanelComponent, column?: LinkColumn) => boolean)\n | undefined\n ) => void;\n};\n\nconst connector = connect<StateProps, DispatchProps, OwnProps>(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId == null) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n text = dateFilterFormatter.format(value);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId != null) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === null\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
1
+ {"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateUtils","TableUtils","DateTimeColumnFormatter","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","undefined","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport { DateUtils, TableUtils } from '@deephaven/iris-grid';\nimport { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n RootState,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: RootState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\nconst connector = connect(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId == null) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n text = dateFilterFormatter.format(value);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId != null) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === null\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePanel.d.ts","sourceRoot":"","sources":["../../src/panels/ConsolePanel.jsx"],"names":[],"mappings":";;AAoCA;IACE,yBAAkC;IAElC,qBAAyB;IAEzB,wBAkCC;IAsED,kCAGC;IAUD,oCAaC;IAED,qCAKC;IA5BD,qBAEC;IA4BD,iDAOC;IAjCD,mBAEC;IArCD,sBAIC;IAED,uBAIC;IAED,mCAYC;IA+GD,uBASC;IA5MC,iCAAmC;IA0CrC,oCAMC;IAED,uDAQC;IAwED,2CAaC;IAED,4CASC;IAED,4CAaC;IAED,mEAEC;IAED;;;OAGG;IACH,gCAFW,OAAO,QAgBjB;IAaD,yBAEC;CA4DF"}
1
+ {"version":3,"file":"ConsolePanel.d.ts","sourceRoot":"","sources":["../../src/panels/ConsolePanel.jsx"],"names":[],"mappings":";;AAmCA;IACE,yBAAkC;IAElC,qBAAyB;IAEzB,wBAkCC;IAsED,kCAGC;IAUD,oCAaC;IAED,qCAKC;IA5BD,qBAEC;IA4BD,iDAOC;IAjCD,mBAEC;IArCD,sBAIC;IAED,uBAIC;IAED,mCAYC;IA+GD,uBASC;IA5MC,iCAAmC;IA0CrC,oCAMC;IAED,uDAQC;IAwED,2CAaC;IAED,4CASC;IAED,4CAaC;IAED,mEAEC;IAED;;;OAGG;IACH,gCAFW,OAAO,QAgBjB;IAaD,yBAEC;CA4DF"}