@deephaven/dashboard-core-plugins 0.5.2-matplotlib.2 → 0.6.1-fixed-deps.2

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 (176) hide show
  1. package/dist/ChartPlugin.js +25 -22
  2. package/dist/ChartPlugin.js.map +1 -1
  3. package/dist/ConsolePlugin.d.ts.map +1 -1
  4. package/dist/ConsolePlugin.js +130 -134
  5. package/dist/ConsolePlugin.js.map +1 -1
  6. package/dist/FilterPlugin.d.ts.map +1 -1
  7. package/dist/FilterPlugin.js +114 -116
  8. package/dist/FilterPlugin.js.map +1 -1
  9. package/dist/GridPlugin.js +29 -26
  10. package/dist/GridPlugin.js.map +1 -1
  11. package/dist/LinkerPlugin.js +7 -5
  12. package/dist/LinkerPlugin.js.map +1 -1
  13. package/dist/MarkdownPlugin.js +44 -45
  14. package/dist/MarkdownPlugin.js.map +1 -1
  15. package/dist/PandasPlugin.d.ts +5 -2
  16. package/dist/PandasPlugin.d.ts.map +1 -1
  17. package/dist/PandasPlugin.js +12 -12
  18. package/dist/PandasPlugin.js.map +1 -1
  19. package/dist/controls/ControlType.d.ts +1 -0
  20. package/dist/controls/ControlType.d.ts.map +1 -1
  21. package/dist/controls/ControlType.js +3 -5
  22. package/dist/controls/ControlType.js.map +1 -1
  23. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +6 -0
  24. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  25. package/dist/controls/dropdown-filter/DropdownFilter.js +356 -394
  26. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  27. package/dist/controls/input-filter/InputFilter.d.ts +6 -0
  28. package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
  29. package/dist/controls/input-filter/InputFilter.js +256 -270
  30. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  31. package/dist/controls/markdown/MarkdownContainer.js +18 -56
  32. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownEditor.js +36 -75
  34. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownStartPage.js +93 -133
  36. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  37. package/dist/controls/markdown/MarkdownUtils.js +17 -32
  38. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  39. package/dist/events/ChartEvent.js +1 -5
  40. package/dist/events/ChartEvent.js.map +1 -1
  41. package/dist/events/ConsoleEvent.js +1 -5
  42. package/dist/events/ConsoleEvent.js.map +1 -1
  43. package/dist/events/ControlEvent.js +1 -5
  44. package/dist/events/ControlEvent.js.map +1 -1
  45. package/dist/events/InputFilterEvent.d.ts +2 -0
  46. package/dist/events/InputFilterEvent.d.ts.map +1 -1
  47. package/dist/events/InputFilterEvent.js +3 -5
  48. package/dist/events/InputFilterEvent.js.map +1 -1
  49. package/dist/events/IrisGridEvent.js +1 -5
  50. package/dist/events/IrisGridEvent.js.map +1 -1
  51. package/dist/events/NotebookEvent.js +1 -5
  52. package/dist/events/NotebookEvent.js.map +1 -1
  53. package/dist/events/PQEvent.js +1 -5
  54. package/dist/events/PQEvent.js.map +1 -1
  55. package/dist/events/PandasEvent.js +1 -5
  56. package/dist/events/PandasEvent.js.map +1 -1
  57. package/dist/events/TabEvent.js +1 -5
  58. package/dist/events/TabEvent.js.map +1 -1
  59. package/dist/events/index.d.ts +0 -1
  60. package/dist/events/index.js +9 -10
  61. package/dist/events/index.js.map +1 -1
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +10 -11
  65. package/dist/index.js.map +1 -1
  66. package/dist/linker/Linker.d.ts +1 -1
  67. package/dist/linker/Linker.js +594 -606
  68. package/dist/linker/Linker.js.map +1 -1
  69. package/dist/linker/LinkerLink.js +92 -126
  70. package/dist/linker/LinkerLink.js.map +1 -1
  71. package/dist/linker/LinkerOverlayContent.js +162 -220
  72. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  73. package/dist/linker/LinkerUtils.js +105 -114
  74. package/dist/linker/LinkerUtils.js.map +1 -1
  75. package/dist/panels/ChartColumnSelectorOverlay.js +19 -25
  76. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  77. package/dist/panels/ChartFilterOverlay.js +18 -24
  78. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  79. package/dist/panels/ChartPanel.d.ts +3 -0
  80. package/dist/panels/ChartPanel.d.ts.map +1 -1
  81. package/dist/panels/ChartPanel.js +839 -873
  82. package/dist/panels/ChartPanel.js.map +1 -1
  83. package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
  84. package/dist/panels/CommandHistoryPanel.js +160 -186
  85. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  86. package/dist/panels/ConsolePanel.d.ts +1 -1
  87. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  88. package/dist/panels/ConsolePanel.js +327 -374
  89. package/dist/panels/ConsolePanel.js.map +1 -1
  90. package/dist/panels/DropdownFilterPanel.d.ts +6 -0
  91. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  92. package/dist/panels/DropdownFilterPanel.js +537 -566
  93. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  94. package/dist/panels/FileExplorerPanel.d.ts +6 -1
  95. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  96. package/dist/panels/FileExplorerPanel.js +208 -210
  97. package/dist/panels/FileExplorerPanel.js.map +1 -1
  98. package/dist/panels/FilterSetManager.css +111 -0
  99. package/dist/panels/FilterSetManager.css.map +1 -0
  100. package/dist/panels/FilterSetManager.d.ts +66 -0
  101. package/dist/panels/FilterSetManager.d.ts.map +1 -0
  102. package/dist/panels/FilterSetManager.js +732 -0
  103. package/dist/panels/FilterSetManager.js.map +1 -0
  104. package/dist/panels/FilterSetManagerPanel.css +33 -0
  105. package/dist/panels/FilterSetManagerPanel.css.map +1 -0
  106. package/dist/panels/FilterSetManagerPanel.d.ts +69 -0
  107. package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -0
  108. package/dist/panels/FilterSetManagerPanel.js +383 -0
  109. package/dist/panels/FilterSetManagerPanel.js.map +1 -0
  110. package/dist/panels/InputFilterPanel.d.ts +7 -0
  111. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  112. package/dist/panels/InputFilterPanel.js +198 -206
  113. package/dist/panels/InputFilterPanel.js.map +1 -1
  114. package/dist/panels/IrisGridPanel.d.ts +11 -3
  115. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  116. package/dist/panels/IrisGridPanel.js +779 -771
  117. package/dist/panels/IrisGridPanel.js.map +1 -1
  118. package/dist/panels/LogPanel.js +80 -116
  119. package/dist/panels/LogPanel.js.map +1 -1
  120. package/dist/panels/MarkdownPanel.js +165 -199
  121. package/dist/panels/MarkdownPanel.js.map +1 -1
  122. package/dist/panels/NotebookPanel.d.ts +3 -1
  123. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  124. package/dist/panels/NotebookPanel.js +870 -862
  125. package/dist/panels/NotebookPanel.js.map +1 -1
  126. package/dist/panels/PandasPanel.js +56 -90
  127. package/dist/panels/PandasPanel.js.map +1 -1
  128. package/dist/panels/Panel.js +282 -313
  129. package/dist/panels/Panel.js.map +1 -1
  130. package/dist/panels/PanelContextMenu.js +107 -158
  131. package/dist/panels/PanelContextMenu.js.map +1 -1
  132. package/dist/panels/RenameDialog.js +144 -172
  133. package/dist/panels/RenameDialog.js.map +1 -1
  134. package/dist/panels/Shortcuts.js +1 -1
  135. package/dist/panels/Shortcuts.js.map +1 -1
  136. package/dist/panels/WidgetPanel.js +133 -163
  137. package/dist/panels/WidgetPanel.js.map +1 -1
  138. package/dist/panels/WidgetPanelTooltip.js +7 -5
  139. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  140. package/dist/panels/index.d.ts +1 -1
  141. package/dist/panels/index.js +16 -16
  142. package/dist/panels/index.js.map +1 -1
  143. package/dist/prop-types/CommonPropTypes.js +4 -8
  144. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  145. package/dist/prop-types/UIPropTypes.js +6 -6
  146. package/dist/prop-types/UIPropTypes.js.map +1 -1
  147. package/dist/prop-types/index.js +2 -2
  148. package/dist/prop-types/index.js.map +1 -1
  149. package/dist/redux/actions.d.ts +1 -0
  150. package/dist/redux/actions.d.ts.map +1 -1
  151. package/dist/redux/actions.js +33 -54
  152. package/dist/redux/actions.js.map +1 -1
  153. package/dist/redux/index.js +6 -21
  154. package/dist/redux/index.js.map +1 -1
  155. package/dist/redux/reducers/index.js +2 -2
  156. package/dist/redux/reducers/index.js.map +1 -1
  157. package/dist/redux/reducers/sessionWrapper.js +1 -1
  158. package/dist/redux/reducers/sessionWrapper.js.map +1 -1
  159. package/dist/redux/selectors.d.ts +1 -0
  160. package/dist/redux/selectors.d.ts.map +1 -1
  161. package/dist/redux/selectors.js +22 -18
  162. package/dist/redux/selectors.js.map +1 -1
  163. package/dist/tsconfig.tsbuildinfo +1 -1
  164. package/package.json +27 -54
  165. package/dist/MatPlotLibPlugin.d.ts +0 -5
  166. package/dist/MatPlotLibPlugin.d.ts.map +0 -1
  167. package/dist/MatPlotLibPlugin.js +0 -45
  168. package/dist/MatPlotLibPlugin.js.map +0 -1
  169. package/dist/events/MatPlotLibEvent.d.ts +0 -5
  170. package/dist/events/MatPlotLibEvent.d.ts.map +0 -1
  171. package/dist/events/MatPlotLibEvent.js +0 -12
  172. package/dist/events/MatPlotLibEvent.js.map +0 -1
  173. package/dist/panels/MatPlotLibPanel.d.ts +0 -22
  174. package/dist/panels/MatPlotLibPanel.d.ts.map +0 -1
  175. package/dist/panels/MatPlotLibPanel.js +0 -123
  176. package/dist/panels/MatPlotLibPanel.js.map +0 -1
@@ -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","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","ConsolePlugin","id","layout","panelManager","registerComponent","notebookIndex","Map","openFileMap","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","WrappedComponent","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","set","debug2","getBaseName","activateFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","fileIsActive","isActiveTab","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","props","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","previewTabId","isFileOpen","isFileOpenAsPreview","size","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"mappings":"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","sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, {\n ComponentType,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport const ConsolePlugin = ({\n id,\n layout,\n panelManager,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel.WrappedComponent),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n const activateFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n const fileIsActive = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n return (\n panelId != null && LayoutUtils.isActiveTab(layout.root, { id: panelId })\n );\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata)) {\n log.debug('File is already open, focus tab');\n LayoutUtils.activateTab(layout.root, { id: panelId });\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n ]\n );\n\n const selectNotebook = useCallback(\n (session, sessionLanguage, settings, fileMetadata) => {\n log.debug('selectNotebook', fileMetadata);\n let previewTabId = null;\n let isPreview = true;\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n if (!isFileOpen && !isFileOpenAsPreview) {\n log.debug('selectNotebook, file not open');\n if (previewFileMap.size > 0) {\n log.debug('selectNotebook, file not open, previewFileMap not empty');\n // Existing preview tab id to reuse\n [previewTabId] = Array.from(previewFileMap.values());\n }\n } else {\n // File already open in background\n if (!fileIsActive(fileMetadata)) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground, not in preview mode\n if (!isFileOpenAsPreview) {\n activateFilePanel(fileMetadata);\n return;\n }\n // File already open in foreground in preview mode\n [previewTabId] = Array.from(previewFileMap.values());\n isPreview = false;\n }\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview,\n });\n LayoutUtils.openComponentInStack(stack, config);\n // openComponentInStack attempts to maintain the focus\n // Focus open tab if it's editable\n if (!isPreview) {\n LayoutUtils.activateTab(layout.root, { id: panelId });\n }\n },\n [\n activateFilePanel,\n fileIsActive,\n fileIsOpen,\n fileIsOpenAsPreview,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n ConsolePanel.COMPONENT,\n (ConsolePanel as unknown) as ComponentType\n ),\n registerComponent(\n CommandHistoryPanel.COMPONENT,\n (CommandHistoryPanel as unknown) as ComponentType\n ),\n registerComponent(\n FileExplorerPanel.COMPONENT,\n (FileExplorerPanel as unknown) as ComponentType\n ),\n registerComponent(\n LogPanel.COMPONENT,\n (LogPanel as unknown) as ComponentType\n ),\n registerComponent(\n NotebookPanel.COMPONENT,\n (NotebookPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"file":"ConsolePlugin.js"}
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":"AACA,SAEEA,WAFF,EAIEC,WAJF,QAKO,sBALP;AAMA,SAASC,SAAT,QAA0B,0BAA1B;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,OAAOC,KAAP,IAEEC,WAFF,EAGEC,SAHF,EAIEC,MAJF,EAKEC,QALF,QAMO,OANP;AAOA,SAASC,WAAT,QAA4B,aAA5B;AACA,OAAOC,OAAP,MAAoB,SAApB;SACSC,Y,EAAcC,a;SAErBC,Y,EACAC,mB,EACAC,iB,EACAC,Q,EACAC,a;SAEOC,2B;AAET,IAAMC,GAAG,GAAGhB,GAAG,CAACiB,MAAJ,CAAW,eAAX,CAAZ;;AAOA,SAASC,eAAT,CACEC,KADF,EAEmC;AACjC,SAAQA,KAAD,CAAkCC,QAAlC,KAA+CC,SAAtD;AACD;;AAED,OAAO,IAAMC,aAAa,GAAG,UAKqB;AAAA,MALpB;AAC5BC,IAAAA,EAD4B;AAE5BC,IAAAA,MAF4B;AAG5BC,IAAAA,YAH4B;AAI5BC,IAAAA;AAJ4B,GAKoB;AAChD,MAAMC,aAAa,GAAGvB,MAAM,CAAC,CAAD,CAA5B,CADgD,CAEhD;;AACA,MAAM,CAACwB,WAAD,IAAgBvB,QAAQ,CAAC,IAAIwB,GAAJ,EAAD,CAA9B;AACA,MAAM,CAACC,cAAD,IAAmBzB,QAAQ,CAAC,IAAIwB,GAAJ,EAAD,CAAjC;AAEA,MAAME,QAAQ,GAAGzB,WAAW,EAA5B;AAEA,MAAM0B,eAAe,GAAG9B,WAAW,CACjC,MAAMuB,YAAY,CAACQ,sBAAb,CAAoCvB,YAAY,CAACwB,gBAAjD,CAD2B,EAEjC,CAACT,YAAD,CAFiC,CAAnC;AAKA,MAAMU,iBAAiB,GAAGjC,WAAW,CACnC,UAACkC,OAAD,EAAmD;AAAA,QAAjCC,KAAiC,uEAAzB,IAAyB;AAAA,QAAnBC,OAAmB,uEAAT,IAAS;AACjD,QAAMC,cAAc,GAAGH,OAAO,IAAIA,OAAO,CAACI,IAAR,EAAlC;;AACA,QAAI,CAACD,cAAL,EAAqB;AACnBvB,MAAAA,GAAG,CAACyB,IAAJ,CAAS,qBAAT;AACD,KAFD,MAEO;AACL,UAAMC,YAAY,GAAGV,eAAe,EAApC;;AACA,UACE,CAACU,YAAD,IACA,EAAEA,YAAY,YAAYhC,YAAY,CAACwB,gBAAvC,CAFF,EAGE;AACAlB,QAAAA,GAAG,CAAC2B,KAAJ,CAAU,yBAAV;AACA;AACD;;AACD3B,MAAAA,GAAG,CAAC4B,KAAJ,CAAU,gBAAV,EAA4BR,OAA5B,EAAqCC,KAArC,EAA4CC,OAA5C;AACAI,MAAAA,YAAY,CAACG,UAAb,CAAwBT,OAAxB,EAAiCC,KAAjC,EAAwCC,OAAxC;AACD;AACF,GAjBkC,EAkBnC,CAACN,eAAD,CAlBmC,CAArC;AAqBA,MAAMc,qBAAqB,GAAG5C,WAAW,CACvC6C,eAAe,IAAI;AACjBhB,IAAAA,QAAQ,CAAChB,2BAA2B,CAACQ,EAAD,EAAKwB,eAAL,CAA5B,CAAR;AACD,GAHsC,EAIvC,CAAChB,QAAD,EAAWR,EAAX,CAJuC,CAAzC;AAOA,MAAMyB,mBAAmB,GAAG9C,WAAW,CAAC,WAAkB;AAAA,QAAjB;AAAE+C,MAAAA;AAAF,KAAiB;AACxD,QAAMC,SAAS,GAAGD,QAAQ,KAAK,QAAb,GAAwB,IAAxB,GAA+BA,QAAjD;AACA,QAAIE,KAAK,GAAG,IAAZ;;AACA,QAAI,CAACD,SAAL,EAAgB;AACdlC,MAAAA,GAAG,CAAC4B,KAAJ,CAAU,2BAAV,EAAuCK,QAAvC;AACAE,MAAAA,KAAK,sBAAexB,aAAa,CAACyB,OAA7B,CAAL;AACD,KAHD,MAGO;AACLD,MAAAA,KAAK,sBAAexB,aAAa,CAACyB,OAA7B,cAAwCF,SAAxC,CAAL;AACD;;AACDvB,IAAAA,aAAa,CAACyB,OAAd,IAAyB,CAAzB;AACA,WAAOD,KAAP;AACD,GAXsC,EAWpC,EAXoC,CAAvC;AAaA,MAAME,yBAAyB,GAAGnD,WAAW,CAC3C,UAACoD,YAAD,EAA4C;AAAA,QAA7BC,iBAA6B,uEAAT,IAAS;AAC1C,QAAM;AAAEhC,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;;AACA,QAAIE,MAAM,IAAI5B,WAAW,CAAC6B,GAAZ,CAAgBD,MAAhB,CAAd,EAAuC;AACrC,aAAO5B,WAAW,CAAC8B,GAAZ,CAAgBF,MAAhB,CAAP;AACD;;AACD,QAAIA,MAAM,IAAI1B,cAAc,CAAC2B,GAAf,CAAmBD,MAAnB,CAAd,EAA0C;AACxC,aAAO1B,cAAc,CAAC4B,GAAf,CAAmBF,MAAnB,CAAP;AACD;;AACD,QAAID,iBAAJ,EAAuB;AACrB,aAAOhD,OAAO,CAACoD,QAAR,EAAP;AACD;;AACD,WAAO,IAAP;AACD,GAb0C,EAc3C,CAAC/B,WAAD,EAAcE,cAAd,CAd2C,CAA7C;AAiBA,MAAM8B,WAAW,GAAG1D,WAAW,CAC7B,CAAC2D,OAAD,EAAUC,QAAV,KAAuB;AACrBjE,IAAAA,WAAW,CAACkE,eAAZ,CAA4BvC,MAAM,CAACwC,IAAnC,EAAyC;AAAEzC,MAAAA,EAAE,EAAEsC;AAAN,KAAzC,EAA0DC,QAA1D;AACD,GAH4B,EAI7B,CAACtC,MAAM,CAACwC,IAAR,CAJ6B,CAA/B;AAOA,MAAMC,eAAe,GAAG/D,WAAW,CACjC,CAACgE,OAAD,EAAUC,OAAV,KAAsB;AACpBnD,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,mBAAV,EAA+BsB,OAA/B,EAAwCC,OAAxC;AACA,QAAIN,OAAJ;;AACA,QAAIjC,WAAW,CAAC6B,GAAZ,CAAgBS,OAAhB,CAAJ,EAA8B;AAC5BL,MAAAA,OAAO,GAAGjC,WAAW,CAAC8B,GAAZ,CAAgBQ,OAAhB,CAAV;AACAtC,MAAAA,WAAW,CAACwC,MAAZ,CAAmBF,OAAnB;;AACA,UAAIL,OAAO,IAAI,IAAf,EAAqB;AACnBjC,QAAAA,WAAW,CAACyC,GAAZ,CAAgBF,OAAhB,EAAyBN,OAAzB;AACD;AACF;;AACD,QAAI/B,cAAc,CAAC2B,GAAf,CAAmBS,OAAnB,CAAJ,EAAiC;AAC/BL,MAAAA,OAAO,GAAG/B,cAAc,CAAC4B,GAAf,CAAmBQ,OAAnB,CAAV;AACApC,MAAAA,cAAc,CAACsC,MAAf,CAAsBF,OAAtB;;AACA,UAAIL,OAAO,IAAI,IAAf,EAAqB;AACnB/B,QAAAA,cAAc,CAACuC,GAAf,CAAmBF,OAAnB,EAA4BN,OAA5B;AACD;AACF;;AAED,QAAI,CAACA,OAAL,EAAc;AACZ7C,MAAAA,GAAG,CAACsD,MAAJ,gBAAmBJ,OAAnB;AACA;AACD;;AAEDN,IAAAA,WAAW,CAACC,OAAD,EAAU9D,SAAS,CAACwE,WAAV,CAAsBJ,OAAtB,CAAV,CAAX;AACD,GAzBgC,EA0BjC,CAACvC,WAAD,EAAcE,cAAd,EAA8B8B,WAA9B,CA1BiC,CAAnC;AA6BA;AACF;AACA;AACA;;AACE,MAAMY,aAAa,GAAGtE,WAAW,CAC/BoD,YAAY,IAAI;AACd,QAAMO,OAAO,GAAGR,yBAAyB,CAACC,YAAD,EAAe,KAAf,CAAzC;;AACA,QAAIO,OAAO,IAAI,IAAf,EAAqB;AACnB7C,MAAAA,GAAG,CAAC2B,KAAJ,CAAU,2CAAV,EAAuDW,YAAvD;AACA;AACD;;AACDzD,IAAAA,WAAW,CAAC4E,WAAZ,CAAwBjD,MAAM,CAACwC,IAA/B,EAAqC;AAAEzC,MAAAA,EAAE,EAAEsC;AAAN,KAArC;AACD,GAR8B,EAS/B,CAACR,yBAAD,EAA4B7B,MAAM,CAACwC,IAAnC,CAT+B,CAAjC;AAYA,MAAMU,iBAAiB,GAAGxE,WAAW,CACnC,CAAC2D,OAAD,EAAUP,YAAV,EAAwBqB,SAAxB,KAAsC;AACpC3D,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,mBAAV,EAA+BiB,OAA/B,EAAwCP,YAAxC,EAAsDqB,SAAtD;;AACA,QAAI,CAACrB,YAAD,IAAiB,CAACA,YAAY,CAAC/B,EAAnC,EAAuC;AACrCP,MAAAA,GAAG,CAAC4B,KAAJ,CAAU,sBAAV,EAAkCU,YAAlC;AACA;AACD;;AACD,QAAM;AAAE/B,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;;AACA,QAAIqB,SAAJ,EAAe;AACb7C,MAAAA,cAAc,CAACuC,GAAf,CAAmBb,MAAnB,EAA2BK,OAA3B;AACA;AACD;;AACD,QAAIjC,WAAW,CAAC6B,GAAZ,CAAgBD,MAAhB,CAAJ,EAA6B;AAC3B,UAAMoB,eAAe,GAAGhD,WAAW,CAAC8B,GAAZ,CAAgBF,MAAhB,CAAxB;;AACA,UAAIK,OAAO,KAAKe,eAAhB,EAAiC;AAC/B5D,QAAAA,GAAG,CAAC4B,KAAJ,qCAAuCY,MAAvC;AACA,YAAM;AAAEqB,UAAAA;AAAF,YAAevB,YAArB;AACAW,QAAAA,eAAe,CAACT,MAAD,EAASzD,SAAS,CAACwE,WAAV,CAAsBM,QAAtB,CAAT,CAAf;AACD,OAJD,MAIO;AACL7D,QAAAA,GAAG,CAAC2B,KAAJ,gBACUa,MADV,sDAC4DoB,eAD5D;AAGD;;AACD;AACD;;AAEDhD,IAAAA,WAAW,CAACyC,GAAZ,CAAgBb,MAAhB,EAAwBK,OAAxB,EAzBoC,CA2BpC;;AACA,QAAI/B,cAAc,CAAC2B,GAAf,CAAmBD,MAAnB,CAAJ,EAAgC;AAC9B1B,MAAAA,cAAc,CAACsC,MAAf,CAAsBZ,MAAtB;AACD;AACF,GAhCkC,EAiCnC,CAAC5B,WAAD,EAAcE,cAAd,EAA8BmC,eAA9B,CAjCmC,CAArC;AAoCA,MAAMa,mBAAmB,GAAG5E,WAAW,CACrC,CAACoD,YAAD,EAAeqB,SAAf,KAA6B;AAC3B;AACA;AACA;AACA;AACA;AACA3D,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,mBAAV,EAA+BU,YAA/B,EAA6CqB,SAA7C;;AACA,QAAI,CAACrB,YAAD,IAAiB,CAACA,YAAY,CAAC/B,EAAnC,EAAuC;AACrCP,MAAAA,GAAG,CAAC4B,KAAJ,CAAU,sBAAV,EAAkCU,YAAlC;AACA;AACD;;AACD,QAAM;AAAE/B,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;;AACA,QAAIqB,SAAJ,EAAe;AACb7C,MAAAA,cAAc,CAACsC,MAAf,CAAsBZ,MAAtB;AACA;AACD;;AACD5B,IAAAA,WAAW,CAACwC,MAAZ,CAAmBZ,MAAnB;AACD,GAlBoC,EAmBrC,CAAC5B,WAAD,EAAcE,cAAd,CAnBqC,CAAvC;AAsBA,MAAMiD,cAAc,GAAG7E,WAAW,CAChCoD,YAAY,IAAI;AACdtC,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,gBAAV,EAA4BU,YAA5B;AACA,QAAM;AAAE/B,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;AACA,QAAIO,OAAO,GAAG,IAAd;AACA,QAAIc,SAAS,GAAG,KAAhB;;AACA,QAAI/C,WAAW,CAAC6B,GAAZ,CAAgBD,MAAhB,CAAJ,EAA6B;AAC3BK,MAAAA,OAAO,GAAGjC,WAAW,CAAC8B,GAAZ,CAAgBF,MAAhB,CAAV;AACD,KAFD,MAEO,IAAI1B,cAAc,CAAC2B,GAAf,CAAmBD,MAAnB,CAAJ,EAAgC;AACrCK,MAAAA,OAAO,GAAG/B,cAAc,CAAC4B,GAAf,CAAmBF,MAAnB,CAAV;AACAmB,MAAAA,SAAS,GAAG,IAAZ;AACD,KAHM,MAGA;AACL3D,MAAAA,GAAG,CAAC4B,KAAJ,gBAAkBY,MAAlB;AACA;AACD;;AACDsB,IAAAA,mBAAmB,CAACxB,YAAD,EAAeqB,SAAf,CAAnB;AACA9E,IAAAA,WAAW,CAACmF,cAAZ,CAA2BxD,MAAM,CAACwC,IAAlC,EAAwC;AAAEzC,MAAAA,EAAE,EAAEsC;AAAN,KAAxC;AACD,GAjB+B,EAkBhC,CAACrC,MAAM,CAACwC,IAAR,EAAcpC,WAAd,EAA2BE,cAA3B,EAA2CgD,mBAA3C,CAlBgC,CAAlC;AAqBA,MAAMG,gBAAgB,GAAG/E,WAAW,CAACoD,YAAY,IAAI;AACnD,QAAM;AAAEuB,MAAAA;AAAF,QAAevB,YAArB;AACA,WAAOvD,SAAS,CAACwE,WAAV,CAAsBM,QAAtB,CAAP;AACD,GAHmC,EAGjC,EAHiC,CAApC;AAKA,MAAMK,UAAU,GAAGhF,WAAW,CAC5BoD,YAAY,IAAI;AACd,QAAM;AAAE/B,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;AACAtC,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,YAAV,EAAwBU,YAAxB,EAAsCE,MAAtC,EAA8C5B,WAA9C;AACA,WAAO4B,MAAM,IAAI5B,WAAW,CAAC6B,GAAZ,CAAgBD,MAAhB,CAAjB;AACD,GAL2B,EAM5B,CAAC5B,WAAD,CAN4B,CAA9B;AASA,MAAMuD,mBAAmB,GAAGjF,WAAW,CACrCoD,YAAY,IAAI;AACd,QAAM;AAAE/B,MAAAA,EAAE,EAAEiC;AAAN,QAAiBF,YAAvB;AACAtC,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,qBAAV,EAAiCU,YAAjC,EAA+CE,MAA/C,EAAuD1B,cAAvD;AACA,WAAO0B,MAAM,IAAI1B,cAAc,CAAC2B,GAAf,CAAmBD,MAAnB,CAAjB;AACD,GALoC,EAMrC,CAAC1B,cAAD,CANqC,CAAvC;AASA;AACF;AACA;;AACE,MAAMsD,cAAc,GAAGlF,WAAW,CAChC2D,OAAO,IAAI;AACT,QAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAM1C,KAAK,GAAGM,YAAY,CAAC4D,kBAAb,CAAgCxB,OAAhC,CAAd;;AACA,QAAI1C,KAAK,IAAID,eAAe,CAACC,KAAD,CAA5B,EAAqC;AACnCA,MAAAA,KAAK,CAACkB,KAAN;AACD;AACF,GAV+B,EAWhC,CAACZ,YAAD,CAXgC,CAAlC;AAcA,MAAM6D,UAAU,GAAGpF,WAAW,CAC5B,WAOM;AAAA,QAPL;AACCqB,MAAAA,EAAE,EAAEsC,OADL;AAEC0B,MAAAA,QAFD;AAGCjC,MAAAA,YAHD;AAICkC,MAAAA,OAJD;AAKCC,MAAAA,eALD;AAMCd,MAAAA,SAAS,GAAG;AANb,KAOK;AACJ,QAAMe,UAAU,GAAG;AACjBH,MAAAA,QADiB;AAEjBjC,MAAAA;AAFiB,KAAnB;AAIA,QAAMH,KAAK,GAAG8B,gBAAgB,CAAC3B,YAAD,CAA9B;AACA,WAAO;AACLqC,MAAAA,IAAI,EAAE,iBADD;AAELC,MAAAA,SAAS,EAAE9E,aAAa,CAAC+E,SAFpB;AAGLC,MAAAA,aAAa,EAAE,KAHV;AAILC,MAAAA,KAAK,EAAE;AACLC,QAAAA,gBAAgB,EAAEzE,EADb;AAEL0E,QAAAA,QAAQ,EAAE;AAAE1E,UAAAA,EAAE,EAAEsC;AAAN,SAFL;AAGL2B,QAAAA,OAHK;AAILC,QAAAA,eAJK;AAKLC,QAAAA,UALK;AAMLf,QAAAA;AANK,OAJF;AAYLxB,MAAAA,KAZK;AAaL5B,MAAAA,EAAE,EAAEsC;AAbC,KAAP;AAeD,GA7B2B,EA8B5B,CAACoB,gBAAD,EAAmB1D,EAAnB,CA9B4B,CAA9B;AAiCA,MAAM2E,cAAc,GAAGhG,WAAW,CAChC,UACEsF,OADF,EAEEC,eAFF,EAGEF,QAHF,EAKK;AAAA,QADHjC,YACG,uEADY;AAAE/B,MAAAA,EAAE,EAAE,IAAN;AAAYsD,MAAAA,QAAQ,EAAE7B,mBAAmB,CAACuC,QAAD;AAAzC,KACZ;AACH,QAAM1B,OAAO,GAAGR,yBAAyB,CAACC,YAAD,CAAzC;;AACA,QAAI4B,UAAU,CAAC5B,YAAD,CAAV,IAA4BO,OAAhC,EAAyC;AACvC7C,MAAAA,GAAG,CAAC4B,KAAJ,CAAU,mCAAV;AACA4B,MAAAA,aAAa,CAAClB,YAAD,CAAb;AACA8B,MAAAA,cAAc,CAACvB,OAAD,CAAd;AACA;AACD;;AACD,QAAMsC,KAAK,GAAGtG,WAAW,CAACuG,yBAAZ,CAAsC5E,MAAM,CAACwC,IAA7C,EAAmD,CAC/DlD,aAAa,CAAC+E,SADiD,CAAnD,CAAd;AAGA,QAAMQ,MAAM,GAAGf,UAAU,CAAC;AACxB/D,MAAAA,EAAE,EAAEsC,OADoB;AAExB0B,MAAAA,QAFwB;AAGxBjC,MAAAA,YAHwB;AAIxBkC,MAAAA,OAJwB;AAKxBC,MAAAA;AALwB,KAAD,CAAzB;AAOAzE,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,gBAAV,EAA4ByD,MAA5B,EAAoCzE,WAApC;AACA/B,IAAAA,WAAW,CAACyG,oBAAZ,CAAiCH,KAAjC,EAAwCE,MAAxC;AACD,GA1B+B,EA2BhC,CACEnB,UADF,EAEEE,cAFF,EAGEpC,mBAHF,EAIEK,yBAJF,EAKE7B,MAAM,CAACwC,IALT,EAMEsB,UANF,EAOE1D,WAPF,EAQE4C,aARF,CA3BgC,CAAlC;AAuCA,MAAM+B,cAAc,GAAGrG,WAAW,CAChC,UAACsF,OAAD,EAAUC,eAAV,EAA2BF,QAA3B,EAAqCjC,YAArC,EAA2E;AAAA,QAAxBkD,WAAwB,uEAAV,KAAU;AACzExF,IAAAA,GAAG,CAAC4B,KAAJ,CAAU,gBAAV,EAA4BU,YAA5B,EAA0CkD,WAA1C;AACA,QAAMC,UAAU,GAAGvB,UAAU,CAAC5B,YAAD,CAA7B;AACA,QAAMoD,mBAAmB,GAAGvB,mBAAmB,CAAC7B,YAAD,CAA/C,CAHyE,CAKzE;;AACA,QAAImD,UAAJ,EAAgB;AACdjC,MAAAA,aAAa,CAAClB,YAAD,CAAb;;AACA,UAAIkD,WAAJ,EAAiB;AACf,YAAM3C,QAAO,GAAGR,yBAAyB,CAACC,YAAD,CAAzC;;AACA8B,QAAAA,cAAc,CAACvB,QAAD,CAAd;AACD;;AACD;AACD,KAbwE,CAezE;AACA;;;AACA,QAAI6C,mBAAmB,IAAI,CAACF,WAA5B,EAAyC;AACvChC,MAAAA,aAAa,CAAClB,YAAD,CAAb;AACA;AACD;;AAED,QAAM,CAACqD,YAAD,IAAiBC,KAAK,CAACC,IAAN,CAAW/E,cAAc,CAACgF,MAAf,EAAX,CAAvB;AACA,QAAIjD,OAAO,GAAG,IAAd;AACA,QAAIsC,KAAK,GAAG,IAAZ;;AACA,QAAIQ,YAAY,IAAI,IAApB,EAA0B;AACxB9C,MAAAA,OAAO,GAAG8C,YAAV;AACAR,MAAAA,KAAK,GAAGtG,WAAW,CAACkH,iBAAZ,CAA8BvF,MAAM,CAACwC,IAArC,EAA2C;AACjD4B,QAAAA,SAAS,EAAE9E,aAAa,CAAC+E,SADwB;AAEjDtE,QAAAA,EAAE,EAAEsC;AAF6C,OAA3C,CAAR;AAID;;AACD,QAAIsC,KAAK,IAAI,IAAb,EAAmB;AACjBtC,MAAAA,OAAO,GAAGR,yBAAyB,CAACC,YAAD,CAAnC;AACA6C,MAAAA,KAAK,GAAGtG,WAAW,CAACuG,yBAAZ,CAAsC5E,MAAM,CAACwC,IAA7C,EAAmD,CACzDlD,aAAa,CAAC+E,SAD2C,CAAnD,CAAR;AAGD;;AACD,QAAMQ,MAAM,GAAGf,UAAU,CAAC;AACxB/D,MAAAA,EAAE,EAAEsC,OADoB;AAExB0B,MAAAA,QAFwB;AAGxBjC,MAAAA,YAHwB;AAIxBkC,MAAAA,OAJwB;AAKxBC,MAAAA,eALwB;AAMxBd,MAAAA,SAAS,EAAE,CAAC6B;AANY,KAAD,CAAzB;AAQA3G,IAAAA,WAAW,CAACyG,oBAAZ,CAAiCH,KAAjC,EAAwCE,MAAxC;;AACA,QAAIG,WAAJ,EAAiB;AACf;AACApB,MAAAA,cAAc,CAACvB,OAAD,CAAd;AACD;AACF,GApD+B,EAqDhC,CACEW,aADF,EAEEU,UAFF,EAGEC,mBAHF,EAIEC,cAJF,EAKE/B,yBALF,EAME7B,MAAM,CAACwC,IANT,EAOEsB,UAPF,EAQExD,cARF,CArDgC,CAAlC;AAiEA;;AACA,MAAMkF,cAAc,GAAG9G,WAAW,CAChC,UAACsF,OAAD,EAAUC,eAAV,EAAuE;AAAA,QAA5CF,QAA4C,uEAAjC,EAAiC;AAAA,QAA7BhC,iBAA6B,uEAAT,IAAS;AACrE,QAAM0D,aAAa,GAAGxF,YAAY,CAACQ,sBAAb,CAAoCnB,aAApC,CAAtB;;AACA,QAAImG,aAAa,IAAI/F,eAAe,CAAC+F,aAAD,CAApC,EAAqD;AACnD,UAAI1B,QAAQ,IAAIA,QAAQ,CAAC2B,KAArB,IAA8BD,aAAa,CAAC7F,QAAhD,EAA0D;AACxD6F,QAAAA,aAAa,CAAC7F,QAAd,CAAuB+F,MAAvB,CAA8B5B,QAAQ,CAAC2B,KAAvC;AACD;AACF,KAJD,MAIO,IAAI3D,iBAAJ,EAAuB;AAC5B2C,MAAAA,cAAc,CAACV,OAAD,EAAUC,eAAV,EAA2BF,QAA3B,CAAd;AACD;AACF,GAV+B,EAWhC,CAACW,cAAD,EAAiBzE,YAAjB,CAXgC,CAAlC;AAcAtB,EAAAA,SAAS,CAAC,MAAM;AACd,QAAMiH,QAAQ,GAAG,CACf1F,iBAAiB,CACfhB,YAAY,CAACmF,SADE,EAEdnF,YAFc,CADF,EAKfgB,iBAAiB,CACff,mBAAmB,CAACkF,SADL,EAEdlF,mBAFc,CALF,EASfe,iBAAiB,CACfd,iBAAiB,CAACiF,SADH,EAEdjF,iBAFc,CATF,EAafc,iBAAiB,CACfb,QAAQ,CAACgF,SADM,EAEdhF,QAFc,CAbF,EAiBfa,iBAAiB,CACfZ,aAAa,CAAC+E,SADC,EAEd/E,aAFc,CAjBF,CAAjB;AAuBA,WAAO,MAAM;AACXsG,MAAAA,QAAQ,CAACC,OAAT,CAAiBC,OAAO,IAAIA,OAAO,EAAnC;AACD,KAFD;AAGD,GA3BQ,EA2BN,CAAC5F,iBAAD,CA3BM,CAAT;AA6BA5B,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB/G,YAAY,CAACgH,YAA/B,EAA6CrF,iBAA7C,CAAX;AACArC,EAAAA,WAAW,CACT0B,MAAM,CAAC+F,QADE,EAET/G,YAAY,CAACiH,gBAFJ,EAGT3E,qBAHS,CAAX;AAKAhD,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACiH,UAAhC,EAA4C3C,cAA5C,CAAX;AACAjF,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACkH,eAAhC,EAAiDzB,cAAjD,CAAX;AACApG,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACmH,eAAhC,EAAiDrB,cAAjD,CAAX;AACAzG,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACoH,MAAhC,EAAwCjE,WAAxC,CAAX;AACA9D,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACqH,WAAhC,EAA6C7D,eAA7C,CAAX;AACAnE,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACsH,gBAAhC,EAAkDf,cAAlD,CAAX;AACAlH,EAAAA,WAAW,CAAC0B,MAAM,CAAC+F,QAAR,EAAkB9G,aAAa,CAACuH,aAAhC,EAA+CtD,iBAA/C,CAAX;AACA5E,EAAAA,WAAW,CACT0B,MAAM,CAAC+F,QADE,EAET9G,aAAa,CAACwH,eAFL,EAGTnD,mBAHS,CAAX;AAMA,sBAAO,yCAAP;AACD,CAhcM;AAkcP,eAAexD,aAAf","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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAQ9B,aAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,iBAAiB,GAAG,MAAM,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAMF,eAAO,MAAM,YAAY,yDAItB,6BAA6B,KAAG,WAwMlC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AASA,OAAO,EACL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAY9B,aAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,iBAAiB,GAAG,MAAM,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAMF,eAAO,MAAM,YAAY,yDAItB,6BAA6B,KAAG,WA+OlC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,55 +1,29 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
-
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
-
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
-
9
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
-
11
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
-
13
1
  import React, { useCallback, useEffect, useState } from 'react';
14
2
  import { useDispatch } from 'react-redux';
15
3
  import shortid from 'shortid';
16
4
  import { LayoutUtils, PanelEvent, updateDashboardData, useListener } from '@deephaven/dashboard';
17
5
  import Log from '@deephaven/log';
18
6
  import { TextUtils } from '@deephaven/utils';
19
- import { InputFilterEvent } from './events';
20
- import { DropdownFilterPanel, InputFilterPanel } from './panels';
7
+ import { InputFilterEvent } from "./events/index.js";
8
+ import { DropdownFilterPanel, FilterSetManagerPanel, InputFilterPanel } from "./panels/index.js";
21
9
  var log = Log.module('FilterPlugin');
22
10
 
23
11
  function flattenArray(accumulator, currentValue) {
24
12
  return accumulator.concat(currentValue);
25
13
  }
26
14
 
27
- export var FilterPlugin = function FilterPlugin(_ref) {
28
- var localDashboardId = _ref.id,
29
- layout = _ref.layout,
30
- registerComponent = _ref.registerComponent;
15
+ export var FilterPlugin = (_ref) => {
16
+ var {
17
+ id: localDashboardId,
18
+ layout,
19
+ registerComponent
20
+ } = _ref;
31
21
  var dispatch = useDispatch();
32
-
33
- var _useState = useState(function () {
34
- return new Map();
35
- }),
36
- _useState2 = _slicedToArray(_useState, 1),
37
- panelColumns = _useState2[0];
38
-
39
- var _useState3 = useState(function () {
40
- return new Map();
41
- }),
42
- _useState4 = _slicedToArray(_useState3, 1),
43
- panelFilters = _useState4[0];
44
-
45
- var _useState5 = useState(function () {
46
- return new Map();
47
- }),
48
- _useState6 = _slicedToArray(_useState5, 1),
49
- panelTables = _useState6[0];
50
-
51
- var sendUpdate = useCallback(function () {
52
- var columns = Array.from(panelColumns.values()).reduce(flattenArray, []).sort(function (a, b) {
22
+ var [panelColumns] = useState(() => new Map());
23
+ var [panelFilters] = useState(() => new Map());
24
+ var [panelTables] = useState(() => new Map());
25
+ var sendUpdate = useCallback(() => {
26
+ var columns = Array.from(panelColumns.values()).reduce(flattenArray, []).sort((a, b) => {
53
27
  var aName = TextUtils.toLower(a.name);
54
28
  var bName = TextUtils.toLower(b.name);
55
29
 
@@ -65,26 +39,24 @@ export var FilterPlugin = function FilterPlugin(_ref) {
65
39
  }
66
40
 
67
41
  return 0;
68
- }).reduce(function (array, column) {
42
+ }).reduce((array, column) => {
69
43
  if (array.length === 0 || TextUtils.toLower(array[array.length - 1].name) !== TextUtils.toLower(column.name) || TextUtils.toLower(array[array.length - 1].type) !== TextUtils.toLower(column.type)) {
70
44
  array.push(column);
71
45
  }
72
46
 
73
47
  return array;
74
48
  }, []);
75
- var filters = Array.from(panelFilters.values()).reduce(flattenArray, []).sort(function (a, b) {
76
- return a.timestamp - b.timestamp;
77
- });
49
+ var filters = Array.from(panelFilters.values()).reduce(flattenArray, []).sort((a, b) => a.timestamp - b.timestamp);
78
50
  var tableMap = new Map(panelTables);
79
51
  log.debug('sendUpdate', {
80
- columns: columns,
81
- filters: filters,
82
- tableMap: tableMap
52
+ columns,
53
+ filters,
54
+ tableMap
83
55
  });
84
56
  dispatch(updateDashboardData(localDashboardId, {
85
- columns: columns,
86
- filters: filters,
87
- tableMap: tableMap
57
+ columns,
58
+ filters,
59
+ tableMap
88
60
  }));
89
61
  }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);
90
62
  /**
@@ -93,7 +65,7 @@ export var FilterPlugin = function FilterPlugin(_ref) {
93
65
  * @param {Column|Array<Column>} columns The columns in this panel
94
66
  */
95
67
 
96
- var handleColumnsChanged = useCallback(function (panel, columns) {
68
+ var handleColumnsChanged = useCallback((panel, columns) => {
97
69
  log.debug2('handleColumnsChanged', panel, columns);
98
70
  panelColumns.set(panel, [].concat(columns));
99
71
  sendUpdate();
@@ -104,101 +76,126 @@ export var FilterPlugin = function FilterPlugin(_ref) {
104
76
  * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel
105
77
  */
106
78
 
107
- var handleFiltersChanged = useCallback(function (panel, filters) {
79
+ var handleFiltersChanged = useCallback((panel, filters) => {
108
80
  log.debug2('handleFiltersChanged', panel, filters);
109
81
  panelFilters.set(panel, [].concat(filters));
110
82
  sendUpdate();
111
83
  }, [panelFilters, sendUpdate]);
112
- var handleTableChanged = useCallback(function (panel, table) {
84
+ var handleTableChanged = useCallback((panel, table) => {
113
85
  log.debug2('handleTableChanged', panel, table);
114
86
  panelTables.set(LayoutUtils.getIdFromPanel(panel), table);
115
87
  sendUpdate();
116
88
  }, [panelTables, sendUpdate]);
117
- var handlePanelUnmount = useCallback(function (panel) {
89
+ var handlePanelUnmount = useCallback(panel => {
118
90
  log.debug2('handlePanelUnmount', panel);
119
- panelColumns["delete"](panel);
120
- panelFilters["delete"](panel);
121
- panelTables["delete"](LayoutUtils.getIdFromPanel(panel));
91
+ panelColumns.delete(panel);
92
+ panelFilters.delete(panel);
93
+ panelTables.delete(LayoutUtils.getIdFromPanel(panel));
122
94
  sendUpdate();
123
95
  }, [panelColumns, panelFilters, panelTables, sendUpdate]);
124
- var handleOpenDropdown = useCallback(function (_ref2) {
125
- var _ref2$title = _ref2.title,
126
- title = _ref2$title === void 0 ? 'DropdownFilter' : _ref2$title,
127
- _ref2$metadata = _ref2.metadata,
128
- metadata = _ref2$metadata === void 0 ? {} : _ref2$metadata,
129
- _ref2$panelState = _ref2.panelState,
130
- panelState = _ref2$panelState === void 0 ? null : _ref2$panelState,
131
- _ref2$id = _ref2.id,
132
- id = _ref2$id === void 0 ? shortid.generate() : _ref2$id,
133
- _ref2$focusElement = _ref2.focusElement,
134
- focusElement = _ref2$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref2$focusElement,
135
- _ref2$createNewStack = _ref2.createNewStack,
136
- createNewStack = _ref2$createNewStack === void 0 ? false : _ref2$createNewStack,
137
- _ref2$dragEvent = _ref2.dragEvent,
138
- dragEvent = _ref2$dragEvent === void 0 ? null : _ref2$dragEvent;
96
+ var handleOpenDropdown = useCallback((_ref2) => {
97
+ var {
98
+ title = 'DropdownFilter',
99
+ metadata = {},
100
+ panelState = null,
101
+ id = shortid.generate(),
102
+ focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
103
+ createNewStack = false,
104
+ dragEvent = null
105
+ } = _ref2;
139
106
  var config = {
140
107
  type: 'react-component',
141
108
  component: DropdownFilterPanel.COMPONENT,
142
109
  props: {
143
- id: id,
144
- metadata: metadata,
145
- panelState: panelState,
146
- localDashboardId: localDashboardId
110
+ id,
111
+ metadata,
112
+ panelState,
113
+ localDashboardId
147
114
  },
148
- title: title,
149
- id: id
115
+ title,
116
+ id
150
117
  };
151
- var root = layout.root;
118
+ var {
119
+ root
120
+ } = layout;
152
121
  LayoutUtils.openComponent({
153
- root: root,
154
- config: config,
155
- focusElement: focusElement,
156
- createNewStack: createNewStack,
157
- dragEvent: dragEvent
122
+ root,
123
+ config,
124
+ focusElement,
125
+ createNewStack,
126
+ dragEvent
158
127
  });
159
128
  }, [layout, localDashboardId]);
160
- var handleOpenInput = useCallback(function (_ref3) {
161
- var _ref3$title = _ref3.title,
162
- title = _ref3$title === void 0 ? 'InputFilter' : _ref3$title,
163
- _ref3$metadata = _ref3.metadata,
164
- metadata = _ref3$metadata === void 0 ? {} : _ref3$metadata,
165
- _ref3$panelState = _ref3.panelState,
166
- panelState = _ref3$panelState === void 0 ? null : _ref3$panelState,
167
- _ref3$id = _ref3.id,
168
- id = _ref3$id === void 0 ? shortid.generate() : _ref3$id,
169
- _ref3$focusElement = _ref3.focusElement,
170
- focusElement = _ref3$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref3$focusElement,
171
- _ref3$createNewStack = _ref3.createNewStack,
172
- createNewStack = _ref3$createNewStack === void 0 ? false : _ref3$createNewStack,
173
- _ref3$dragEvent = _ref3.dragEvent,
174
- dragEvent = _ref3$dragEvent === void 0 ? null : _ref3$dragEvent;
129
+ var handleOpenInput = useCallback((_ref3) => {
130
+ var {
131
+ title = 'InputFilter',
132
+ metadata = {},
133
+ panelState = null,
134
+ id = shortid.generate(),
135
+ focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
136
+ createNewStack = false,
137
+ dragEvent = null
138
+ } = _ref3;
175
139
  var config = {
176
140
  type: 'react-component',
177
141
  component: InputFilterPanel.COMPONENT,
178
142
  props: {
179
- id: id,
180
- metadata: metadata,
181
- panelState: panelState,
182
- localDashboardId: localDashboardId
143
+ id,
144
+ metadata,
145
+ panelState,
146
+ localDashboardId
147
+ },
148
+ title,
149
+ id
150
+ };
151
+ var {
152
+ root
153
+ } = layout;
154
+ LayoutUtils.openComponent({
155
+ root,
156
+ config,
157
+ focusElement,
158
+ createNewStack,
159
+ dragEvent
160
+ });
161
+ }, [layout, localDashboardId]);
162
+ var handleOpenFilterSetManager = useCallback((_ref4) => {
163
+ var {
164
+ title = 'FilterSets',
165
+ metadata = {},
166
+ panelState = null,
167
+ id = shortid.generate(),
168
+ focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
169
+ createNewStack = false,
170
+ dragEvent = null
171
+ } = _ref4;
172
+ var config = {
173
+ type: 'react-component',
174
+ component: FilterSetManagerPanel.COMPONENT,
175
+ props: {
176
+ id,
177
+ metadata,
178
+ panelState,
179
+ localDashboardId
183
180
  },
184
- title: title,
185
- id: id
181
+ title,
182
+ id
186
183
  };
187
- var root = layout.root;
184
+ var {
185
+ root
186
+ } = layout;
188
187
  LayoutUtils.openComponent({
189
- root: root,
190
- config: config,
191
- focusElement: focusElement,
192
- createNewStack: createNewStack,
193
- dragEvent: dragEvent
188
+ root,
189
+ config,
190
+ focusElement,
191
+ createNewStack,
192
+ dragEvent
194
193
  });
195
194
  }, [layout, localDashboardId]);
196
- useEffect(function () {
197
- var cleanups = [registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel), registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel)];
198
- return function () {
199
- cleanups.forEach(function (cleanup) {
200
- return cleanup();
201
- });
195
+ useEffect(() => {
196
+ var cleanups = [registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel), registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel), registerComponent(FilterSetManagerPanel.COMPONENT, FilterSetManagerPanel)];
197
+ return () => {
198
+ cleanups.forEach(cleanup => cleanup());
202
199
  };
203
200
  }, [registerComponent]);
204
201
  useListener(layout.eventHub, InputFilterEvent.COLUMNS_CHANGED, handleColumnsChanged);
@@ -206,6 +203,7 @@ export var FilterPlugin = function FilterPlugin(_ref) {
206
203
  useListener(layout.eventHub, InputFilterEvent.TABLE_CHANGED, handleTableChanged);
207
204
  useListener(layout.eventHub, InputFilterEvent.OPEN_DROPDOWN, handleOpenDropdown);
208
205
  useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);
206
+ useListener(layout.eventHub, InputFilterEvent.OPEN_FILTER_SET_MANAGER, handleOpenFilterSetManager);
209
207
  useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);
210
208
  return /*#__PURE__*/React.createElement(React.Fragment, null);
211
209
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/FilterPlugin.tsx"],"names":["React","useCallback","useEffect","useState","useDispatch","shortid","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","localDashboardId","id","layout","registerComponent","dispatch","Map","panelColumns","panelFilters","panelTables","sendUpdate","columns","Array","from","values","reduce","sort","a","b","aName","toLower","name","bName","aType","type","bType","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","panel","debug2","set","handleFiltersChanged","handleTableChanged","table","getIdFromPanel","handlePanelUnmount","handleOpenDropdown","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","props","root","openComponent","handleOpenInput","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","UNMOUNT"],"mappings":"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","sourcesContent":["import React, {\n Component,\n ComponentType,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport { DropdownFilterPanel, InputFilterPanel } from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = ({\n id: localDashboardId,\n layout,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param {Column|Array<Column>} columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns) as Column[]);\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n DropdownFilterPanel.COMPONENT,\n (DropdownFilterPanel as unknown) as ComponentType\n ),\n registerComponent(\n InputFilterPanel.COMPONENT,\n (InputFilterPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return <></>;\n};\n\nexport default FilterPlugin;\n"],"file":"FilterPlugin.js"}
1
+ {"version":3,"sources":["../src/FilterPlugin.tsx"],"names":["React","useCallback","useEffect","useState","useDispatch","shortid","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","reduce","sort","a","b","aName","toLower","name","bName","aType","type","bType","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","panel","debug2","set","handleFiltersChanged","handleTableChanged","table","getIdFromPanel","handlePanelUnmount","delete","handleOpenDropdown","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","props","root","openComponent","handleOpenInput","handleOpenFilterSetManager","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"mappings":"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","sourcesContent":["import React, {\n Component,\n ComponentType,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\n\nconst log = Log.module('FilterPlugin');\n\ntype Column = {\n name: string;\n type: string;\n};\n\nexport type FilterChangeEvent = Column & {\n value: string;\n timestamp: number;\n excludePanelIds?: string[];\n};\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = ({\n id: localDashboardId,\n layout,\n registerComponent,\n}: DashboardPluginComponentProps): JSX.Element => {\n const dispatch = useDispatch();\n const [panelColumns] = useState(() => new Map<Component, Column[]>());\n const [panelFilters] = useState(\n () => new Map<Component, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(() => new Map());\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .reduce(flattenArray, [] as Column[])\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as Column[]);\n\n const filters = Array.from(panelFilters.values())\n .reduce(flattenArray, [] as FilterChangeEvent[])\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param panel The component that's emitting the filter change\n * @param {Column|Array<Column>} columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, [].concat(columns) as Column[]);\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param {Component} panel The component that's emitting the filter change\n * @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (panel, filters) => {\n log.debug2('handleFiltersChanged', panel, filters);\n panelFilters.set(panel, [].concat(filters) as FilterChangeEvent[]);\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (panel, table) => {\n log.debug2('handleTableChanged', panel, table);\n panelTables.set(LayoutUtils.getIdFromPanel(panel), table);\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n panel => {\n log.debug2('handlePanelUnmount', panel);\n panelColumns.delete(panel);\n panelFilters.delete(panel);\n panelTables.delete(LayoutUtils.getIdFromPanel(panel));\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n }) => {\n const config = {\n type: 'react-component',\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(() => {\n const cleanups = [\n registerComponent(\n DropdownFilterPanel.COMPONENT,\n (DropdownFilterPanel as unknown) as ComponentType\n ),\n registerComponent(\n InputFilterPanel.COMPONENT,\n (InputFilterPanel as unknown) as ComponentType\n ),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n (FilterSetManagerPanel as unknown) as ComponentType\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n }, [registerComponent]);\n\n useListener(\n layout.eventHub,\n InputFilterEvent.COLUMNS_CHANGED,\n handleColumnsChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.FILTERS_CHANGED,\n handleFiltersChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.TABLE_CHANGED,\n handleTableChanged\n );\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return <></>;\n};\n\nexport default FilterPlugin;\n"],"file":"FilterPlugin.js"}
@@ -1,16 +1,17 @@
1
1
  import React, { useCallback, useEffect } from 'react';
2
2
  import { DashboardUtils, LayoutUtils, useListener } from '@deephaven/dashboard';
3
3
  import shortid from 'shortid';
4
- import { IrisGridPanel } from './panels';
5
- import { IrisGridEvent } from './events';
6
- export var GridPlugin = function GridPlugin(_ref) {
7
- var getDownloadWorker = _ref.getDownloadWorker,
8
- loadPlugin = _ref.loadPlugin,
9
- id = _ref.id,
10
- layout = _ref.layout,
11
- registerComponent = _ref.registerComponent,
12
- _ref$hydrate = _ref.hydrate,
13
- hydrate = _ref$hydrate === void 0 ? DashboardUtils.hydrate : _ref$hydrate;
4
+ import { IrisGridPanel } from "./panels/index.js";
5
+ import { IrisGridEvent } from "./events/index.js";
6
+ export var GridPlugin = (_ref) => {
7
+ var {
8
+ getDownloadWorker,
9
+ loadPlugin,
10
+ id,
11
+ layout,
12
+ registerComponent,
13
+ hydrate = DashboardUtils.hydrate
14
+ } = _ref;
14
15
  var handleOpen = useCallback(function (title, makeModel) {
15
16
  var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
16
17
  var panelId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : shortid.generate();
@@ -19,37 +20,39 @@ export var GridPlugin = function GridPlugin(_ref) {
19
20
  type: 'react-component',
20
21
  component: IrisGridPanel.COMPONENT,
21
22
  props: {
22
- getDownloadWorker: getDownloadWorker,
23
- loadPlugin: loadPlugin,
23
+ getDownloadWorker,
24
+ loadPlugin,
24
25
  localDashboardId: id,
25
26
  id: panelId,
26
- metadata: metadata,
27
- makeModel: makeModel
27
+ metadata,
28
+ makeModel
28
29
  },
29
- title: title,
30
+ title,
30
31
  id: panelId
31
32
  };
32
- var root = layout.root;
33
+ var {
34
+ root
35
+ } = layout;
33
36
  LayoutUtils.openComponent({
34
- root: root,
35
- config: config,
36
- dragEvent: dragEvent
37
+ root,
38
+ config,
39
+ dragEvent
37
40
  });
38
41
  }, [getDownloadWorker, id, layout, loadPlugin]);
39
- var handleClose = useCallback(function (panelId) {
42
+ var handleClose = useCallback(panelId => {
40
43
  var config = {
41
44
  component: IrisGridPanel.COMPONENT,
42
45
  id: panelId
43
46
  };
44
- var root = layout.root;
47
+ var {
48
+ root
49
+ } = layout;
45
50
  LayoutUtils.closeComponent(root, config);
46
51
  }, [layout]);
47
- useEffect(function () {
52
+ useEffect(() => {
48
53
  var cleanups = [registerComponent(IrisGridPanel.COMPONENT, IrisGridPanel, hydrate)];
49
- return function () {
50
- cleanups.forEach(function (cleanup) {
51
- return cleanup();
52
- });
54
+ return () => {
55
+ cleanups.forEach(cleanup => cleanup());
53
56
  };
54
57
  }, [hydrate, registerComponent]);
55
58
  useListener(layout.eventHub, IrisGridEvent.OPEN_GRID, handleOpen);