@deephaven/dashboard-core-plugins 0.22.3-embed-pandas.11 → 0.23.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChartBuilderPlugin.d.ts +2 -2
- package/dist/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +6 -8
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.d.ts +2 -2
- package/dist/ChartPlugin.d.ts.map +1 -1
- package/dist/ChartPlugin.js +4 -8
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.d.ts +2 -2
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +16 -62
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.d.ts +4 -4
- package/dist/FilterPlugin.d.ts.map +1 -1
- package/dist/FilterPlugin.js +6 -13
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.d.ts +2 -2
- package/dist/GridPlugin.d.ts.map +1 -1
- package/dist/GridPlugin.js +4 -8
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.d.ts +2 -2
- package/dist/LinkerPlugin.d.ts.map +1 -1
- package/dist/LinkerPlugin.js +2 -2
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.d.ts +3 -3
- package/dist/MarkdownPlugin.d.ts.map +1 -1
- package/dist/MarkdownPlugin.js +4 -8
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +2 -2
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js +4 -8
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/ControlType.js +0 -6
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +2 -2
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +7 -51
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +2 -2
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +1 -31
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +0 -3
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts +0 -2
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +13 -20
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +0 -11
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +0 -7
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js +0 -5
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js +0 -7
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js +0 -10
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js +0 -8
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/MarkdownEvent.d.ts +1 -1
- package/dist/events/MarkdownEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js +0 -10
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js +0 -5
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js +0 -4
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js +0 -8
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts +1 -1
- package/dist/linker/ColumnSelectionValidator.d.ts.map +1 -1
- package/dist/linker/Linker.d.ts +5 -2
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +70 -119
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.css +90 -25
- package/dist/linker/LinkerLink.css.map +1 -1
- package/dist/linker/LinkerLink.d.ts +21 -3
- package/dist/linker/LinkerLink.d.ts.map +1 -1
- package/dist/linker/LinkerLink.js +214 -23
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.css +0 -4
- package/dist/linker/LinkerOverlayContent.css.map +1 -1
- package/dist/linker/LinkerOverlayContent.d.ts +14 -3
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +78 -33
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.d.ts +17 -10
- package/dist/linker/LinkerUtils.d.ts.map +1 -1
- package/dist/linker/LinkerUtils.js +9 -25
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/linker/ToolType.d.ts +2 -2
- package/dist/linker/ToolType.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.d.ts +5 -5
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -7
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts +5 -5
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +2 -7
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +8 -8
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +11 -150
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +1 -26
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +12 -57
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +9 -9
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +21 -127
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +4 -4
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js +4 -33
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.d.ts +1 -1
- package/dist/panels/FilterSetManager.d.ts.map +1 -1
- package/dist/panels/FilterSetManager.js +13 -86
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +10 -64
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.d.ts.map +1 -1
- package/dist/panels/InputFilterPanel.js +8 -38
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +13 -13
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +24 -133
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.d.ts +7 -7
- package/dist/panels/IrisGridPanelTooltip.d.ts.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +2 -5
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +4 -22
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +3 -30
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +2 -30
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js +1 -14
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js +11 -30
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js +24 -182
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +1 -20
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +1 -1
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +2 -38
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js +7 -29
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js +2 -17
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.d.ts.map +1 -1
- package/dist/panels/WidgetPanel.js +5 -22
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.d.ts +7 -7
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +7 -17
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/panels/index.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js +0 -3
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/prop-types/UIPropTypes.d.ts +2 -2
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/prop-types/index.js.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.js +8 -9
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/connection.js.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/redux/selectors.js +10 -15
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +21 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","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","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","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","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = 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),\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 == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n 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 === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [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: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n 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: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n 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: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","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","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = 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),\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 == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n 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 === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [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: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n 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: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n 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: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
|
package/dist/FilterPlugin.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DashboardPluginComponentProps } from '@deephaven/dashboard';
|
|
3
|
-
|
|
3
|
+
type Column = {
|
|
4
4
|
name: string;
|
|
5
5
|
type: string;
|
|
6
6
|
};
|
|
7
|
-
export
|
|
7
|
+
export type FilterChangeEvent = Column & {
|
|
8
8
|
value: string;
|
|
9
9
|
timestamp: number;
|
|
10
10
|
excludePanelIds?: string[];
|
|
11
11
|
};
|
|
12
|
-
export
|
|
13
|
-
export declare
|
|
12
|
+
export type FilterPluginProps = Partial<DashboardPluginComponentProps>;
|
|
13
|
+
export declare function FilterPlugin(props: FilterPluginProps): JSX.Element | null;
|
|
14
14
|
export default FilterPlugin;
|
|
15
15
|
//# sourceMappingURL=FilterPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AAGA,OAAO,EAEL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAY9B,
|
|
1
|
+
{"version":3,"file":"FilterPlugin.d.ts","sourceRoot":"","sources":["../src/FilterPlugin.tsx"],"names":[],"mappings":";AAGA,OAAO,EAEL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAY9B,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAMvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA8OzE;AAED,eAAe,YAAY,CAAC"}
|
package/dist/FilterPlugin.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { useDispatch } from 'react-redux';
|
|
3
3
|
import shortid from 'shortid';
|
|
4
4
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, updateDashboardData, useListener } from '@deephaven/dashboard';
|
|
@@ -7,12 +7,10 @@ import { TextUtils } from '@deephaven/utils';
|
|
|
7
7
|
import { InputFilterEvent } from "./events/index.js";
|
|
8
8
|
import { DropdownFilterPanel, FilterSetManagerPanel, InputFilterPanel } from "./panels/index.js";
|
|
9
9
|
var log = Log.module('FilterPlugin');
|
|
10
|
-
|
|
11
10
|
function flattenArray(accumulator, currentValue) {
|
|
12
11
|
return accumulator.concat(currentValue);
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
export var FilterPlugin = props => {
|
|
13
|
+
export function FilterPlugin(props) {
|
|
16
14
|
assertIsDashboardPluginProps(props);
|
|
17
15
|
var {
|
|
18
16
|
id: localDashboardId,
|
|
@@ -27,24 +25,19 @@ export var FilterPlugin = props => {
|
|
|
27
25
|
var columns = Array.from(panelColumns.values()).reduce(flattenArray, []).sort((a, b) => {
|
|
28
26
|
var aName = TextUtils.toLower(a.name);
|
|
29
27
|
var bName = TextUtils.toLower(b.name);
|
|
30
|
-
|
|
31
28
|
if (aName !== bName) {
|
|
32
29
|
return aName > bName ? 1 : -1;
|
|
33
30
|
}
|
|
34
|
-
|
|
35
31
|
var aType = TextUtils.toLower(a.type);
|
|
36
32
|
var bType = TextUtils.toLower(b.type);
|
|
37
|
-
|
|
38
33
|
if (aType !== bType) {
|
|
39
34
|
return aType > bType ? 1 : -1;
|
|
40
35
|
}
|
|
41
|
-
|
|
42
36
|
return 0;
|
|
43
37
|
}).reduce((array, column) => {
|
|
44
38
|
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)) {
|
|
45
39
|
array.push(column);
|
|
46
40
|
}
|
|
47
|
-
|
|
48
41
|
return array;
|
|
49
42
|
}, []);
|
|
50
43
|
var filters = Array.from(panelFilters.values()).reduce(flattenArray, []).sort((a, b) => a.timestamp - b.timestamp);
|
|
@@ -60,23 +53,23 @@ export var FilterPlugin = props => {
|
|
|
60
53
|
tableMap
|
|
61
54
|
}));
|
|
62
55
|
}, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);
|
|
56
|
+
|
|
63
57
|
/**
|
|
64
58
|
* Handler for the COLUMNS_CHANGED event.
|
|
65
59
|
* @param panel The component that's emitting the filter change
|
|
66
60
|
* @param columns The columns in this panel
|
|
67
61
|
*/
|
|
68
|
-
|
|
69
62
|
var handleColumnsChanged = useCallback((panel, columns) => {
|
|
70
63
|
log.debug2('handleColumnsChanged', panel, columns);
|
|
71
64
|
panelColumns.set(panel, [].concat(columns));
|
|
72
65
|
sendUpdate();
|
|
73
66
|
}, [panelColumns, sendUpdate]);
|
|
67
|
+
|
|
74
68
|
/**
|
|
75
69
|
* Handler for the FILTERS_CHANGED event.
|
|
76
70
|
* @param {Component} panel The component that's emitting the filter change
|
|
77
71
|
* @param {FilterChangeEvent|Array<FilterChangeEvent>} filters The input filters set by the panel
|
|
78
72
|
*/
|
|
79
|
-
|
|
80
73
|
var handleFiltersChanged = useCallback((panel, filters) => {
|
|
81
74
|
log.debug2('handleFiltersChanged', panel, filters);
|
|
82
75
|
panelFilters.set(panel, [].concat(filters));
|
|
@@ -206,7 +199,7 @@ export var FilterPlugin = props => {
|
|
|
206
199
|
useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);
|
|
207
200
|
useListener(layout.eventHub, InputFilterEvent.OPEN_FILTER_SET_MANAGER, handleOpenFilterSetManager);
|
|
208
201
|
useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);
|
|
209
|
-
return
|
|
210
|
-
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
211
204
|
export default FilterPlugin;
|
|
212
205
|
//# sourceMappingURL=FilterPlugin.js.map
|
package/dist/FilterPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPlugin.js","names":["React","useCallback","useEffect","useState","useDispatch","shortid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","props","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","root","openComponent","handleOpenInput","handleOpenFilterSetManager","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import React, { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\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\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport const FilterPlugin = (props: FilterPluginProps): JSX.Element => {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\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 columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\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' as const,\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' as const,\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' as const,\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 function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","shortid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","log","module","flattenArray","accumulator","currentValue","concat","FilterPlugin","props","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","root","openComponent","handleOpenInput","handleOpenFilterSetManager","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","COLUMNS_CHANGED","FILTERS_CHANGED","TABLE_CHANGED","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import { Component, useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\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\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nfunction flattenArray<T>(accumulator: T[], currentValue: T | T[]): T[] {\n return accumulator.concat(currentValue);\n}\n\nexport function FilterPlugin(props: FilterPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\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 columns The columns in this panel\n */\n const handleColumnsChanged = useCallback(\n (panel: Component, columns: Column | Column[]) => {\n log.debug2('handleColumnsChanged', panel, columns);\n panelColumns.set(panel, ([] as Column[]).concat(columns));\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' as const,\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' as const,\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' as const,\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 function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\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 null;\n}\n\nexport default FilterPlugin;\n"],"mappings":"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"}
|
package/dist/GridPlugin.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ import { DashboardPluginComponentProps, PanelHydrateFunction } from '@deephaven/
|
|
|
3
3
|
import { IrisGridThemeType } from '@deephaven/iris-grid';
|
|
4
4
|
import { IrisGridPanelProps } from './panels';
|
|
5
5
|
export declare const SUPPORTED_TYPES: string[];
|
|
6
|
-
export
|
|
6
|
+
export type GridPluginProps = Partial<DashboardPluginComponentProps> & {
|
|
7
7
|
getDownloadWorker?: () => Promise<ServiceWorker>;
|
|
8
8
|
loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;
|
|
9
9
|
hydrate: PanelHydrateFunction<IrisGridPanelProps>;
|
|
10
10
|
theme?: Partial<IrisGridThemeType>;
|
|
11
11
|
};
|
|
12
|
-
export declare
|
|
12
|
+
export declare function GridPlugin(props: GridPluginProps): JSX.Element | null;
|
|
13
13
|
export default GridPlugin;
|
|
14
14
|
//# sourceMappingURL=GridPlugin.d.ts.map
|
package/dist/GridPlugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AACjE,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,MAAM,EAGnC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AACjE,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,MAAM,EAGnC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACrE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAwErE;AAED,eAAe,UAAU,CAAC"}
|
package/dist/GridPlugin.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useCallback, useEffect } from 'react';
|
|
2
2
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, useListener } from '@deephaven/dashboard';
|
|
3
3
|
import { IrisGridModelFactory } from '@deephaven/iris-grid';
|
|
4
4
|
import shortid from 'shortid';
|
|
5
5
|
import { IrisGridPanel } from "./panels/index.js";
|
|
6
6
|
export var SUPPORTED_TYPES = [dh.VariableType.TABLE, dh.VariableType.TREETABLE];
|
|
7
|
-
export
|
|
7
|
+
export function GridPlugin(props) {
|
|
8
8
|
assertIsDashboardPluginProps(props);
|
|
9
9
|
var {
|
|
10
10
|
getDownloadWorker,
|
|
@@ -26,18 +26,14 @@ export var GridPlugin = props => {
|
|
|
26
26
|
name,
|
|
27
27
|
type
|
|
28
28
|
} = widget;
|
|
29
|
-
|
|
30
29
|
if (!SUPPORTED_TYPES.includes(type)) {
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
|
-
|
|
34
32
|
var metadata = {
|
|
35
33
|
name,
|
|
36
34
|
table: name
|
|
37
35
|
};
|
|
38
|
-
|
|
39
36
|
var makeModel = () => fetch().then(table => IrisGridModelFactory.makeModel(table));
|
|
40
|
-
|
|
41
37
|
var config = {
|
|
42
38
|
type: 'react-component',
|
|
43
39
|
component: IrisGridPanel.COMPONENT,
|
|
@@ -69,7 +65,7 @@ export var GridPlugin = props => {
|
|
|
69
65
|
};
|
|
70
66
|
}, [hydrate, registerComponent]);
|
|
71
67
|
useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);
|
|
72
|
-
return
|
|
73
|
-
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
74
70
|
export default GridPlugin;
|
|
75
71
|
//# sourceMappingURL=GridPlugin.js.map
|
package/dist/GridPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.js","names":["
|
|
1
|
+
{"version":3,"file":"GridPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","SUPPORTED_TYPES","dh","VariableType","TABLE","TREETABLE","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import React, { DragEvent, useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { Table, VariableDefinition } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps } from './panels';\n\nexport const SUPPORTED_TYPES: string[] = [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n];\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport function GridPlugin(props: GridPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!SUPPORTED_TYPES.includes(type)) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) => IrisGridModelFactory.makeModel(table));\n const config = {\n type: 'react-component' as const,\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [getDownloadWorker, id, layout, loadPlugin, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAA2BA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAChE,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAC7B,SAASC,oBAAoB,QAA2B,sBAAsB;AAE9E,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAEtB,OAAO,IAAMC,eAAyB,GAAG,CACvCC,EAAE,CAACC,YAAY,CAACC,KAAK,EACrBF,EAAE,CAACC,YAAY,CAACE,SAAS,CAC1B;AASD,OAAO,SAASC,UAAU,CAACC,KAAsB,EAAsB;EACrEb,4BAA4B,CAACa,KAAK,CAAC;EACnC,IAAM;IACJC,iBAAiB;IACjBC,UAAU;IACVC,EAAE;IACFC,MAAM;IACNC,iBAAiB;IACjBC,OAAO;IACPC;EACF,CAAC,GAAGP,KAAK;EACT,IAAMQ,eAAe,GAAGvB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCwB,SAAS;MACTC,KAAK;MACLC,OAAO,GAAGnB,OAAO,CAACoB,QAAQ,EAAE;MAC5BC;IAMF,CAAC;IACC,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAI,CAACnB,eAAe,CAACsB,QAAQ,CAACD,IAAI,CAAC,EAAE;MACnC;IACF;IAEA,IAAME,QAAQ,GAAG;MAAEH,IAAI;MAAEI,KAAK,EAAEJ;IAAK,CAAC;IACtC,IAAMK,SAAS,GAAG,MAChBT,KAAK,EAAE,CAACU,IAAI,CAAEF,KAAY,IAAK3B,oBAAoB,CAAC4B,SAAS,CAACD,KAAK,CAAC,CAAC;IACvE,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBAA0B;MAChCO,SAAS,EAAE7B,aAAa,CAAC8B,SAAS;MAClCvB,KAAK,EAAE;QACLC,iBAAiB;QACjBC,UAAU;QACVsB,gBAAgB,EAAErB,EAAE;QACpBA,EAAE,EAAEQ,OAAO;QACXM,QAAQ;QACRE,SAAS;QACTZ;MACF,CAAC;MACDkB,KAAK,EAAEX,IAAI;MACXX,EAAE,EAAEQ;IACN,CAAC;IAED,IAAM;MAAEe;IAAK,CAAC,GAAGtB,MAAM;IACvBhB,WAAW,CAACuC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEZ;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACR,iBAAiB,EAAEE,EAAE,EAAEC,MAAM,EAAEF,UAAU,EAAEK,KAAK,CAAC,CACnD;EAEDrB,SAAS,CACP,SAAS0C,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CACfZ,aAAa,CAAC8B,SAAS,EACvB9B,aAAa,EACba,OAAO,CACR,CACF;IACD,OAAO,MAAM;MACXuB,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAACzB,OAAO,EAAED,iBAAiB,CAAC,CAC7B;EAEDf,WAAW,CAACc,MAAM,CAAC4B,QAAQ,EAAE3C,UAAU,CAAC4C,IAAI,EAAEzB,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAeT,UAAU"}
|
package/dist/LinkerPlugin.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DashboardPluginComponentProps } from '@deephaven/dashboard';
|
|
3
|
-
export
|
|
4
|
-
export declare
|
|
3
|
+
export type LinkerPluginProps = Partial<DashboardPluginComponentProps>;
|
|
4
|
+
export declare function LinkerPlugin(props: LinkerPluginProps): JSX.Element;
|
|
5
5
|
export default LinkerPlugin;
|
|
6
6
|
//# sourceMappingURL=LinkerPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerPlugin.d.ts","sourceRoot":"","sources":["../src/LinkerPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAG9B,
|
|
1
|
+
{"version":3,"file":"LinkerPlugin.d.ts","sourceRoot":"","sources":["../src/LinkerPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAEvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAMlE;AAED,eAAe,YAAY,CAAC"}
|
package/dist/LinkerPlugin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { assertIsDashboardPluginProps } from '@deephaven/dashboard';
|
|
3
3
|
import Linker from "./linker/Linker.js";
|
|
4
|
-
export
|
|
4
|
+
export function LinkerPlugin(props) {
|
|
5
5
|
assertIsDashboardPluginProps(props);
|
|
6
6
|
var {
|
|
7
7
|
id,
|
|
@@ -13,6 +13,6 @@ export var LinkerPlugin = props => {
|
|
|
13
13
|
localDashboardId: id,
|
|
14
14
|
panelManager: panelManager
|
|
15
15
|
});
|
|
16
|
-
}
|
|
16
|
+
}
|
|
17
17
|
export default LinkerPlugin;
|
|
18
18
|
//# sourceMappingURL=LinkerPlugin.js.map
|
package/dist/LinkerPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","LinkerPlugin","props","id","layout","panelManager"],"sources":["../src/LinkerPlugin.tsx"],"sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport
|
|
1
|
+
{"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","LinkerPlugin","props","id","layout","panelManager"],"sources":["../src/LinkerPlugin.tsx"],"sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function LinkerPlugin(props: LinkerPluginProps): JSX.Element {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager } = props;\n return (\n <Linker layout={layout} localDashboardId={id} panelManager={panelManager} />\n );\n}\n\nexport default LinkerPlugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,4BAA4B,QAEvB,sBAAsB;AAAC,OACvBC,MAAM;AAIb,OAAO,SAASC,YAAY,CAACC,KAAwB,EAAe;EAClEH,4BAA4B,CAACG,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC,MAAM;IAAEC;EAAa,CAAC,GAAGH,KAAK;EAC1C,oBACE,oBAAC,MAAM;IAAC,MAAM,EAAEE,MAAO;IAAC,gBAAgB,EAAED,EAAG;IAAC,YAAY,EAAEE;EAAa,EAAG;AAEhF;AAEA,eAAeJ,YAAY"}
|
package/dist/MarkdownPlugin.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DashboardPluginComponentProps } from '@deephaven/dashboard';
|
|
3
|
-
export
|
|
4
|
-
export
|
|
3
|
+
export type MarkdownPluginProps = Partial<DashboardPluginComponentProps>;
|
|
4
|
+
export type MarkdownComponentState = {
|
|
5
5
|
panelState?: {
|
|
6
6
|
content: string;
|
|
7
7
|
} | null;
|
|
8
8
|
};
|
|
9
|
-
export declare
|
|
9
|
+
export declare function MarkdownPlugin(props: MarkdownPluginProps): JSX.Element | null;
|
|
10
10
|
export default MarkdownPlugin;
|
|
11
11
|
//# sourceMappingURL=MarkdownPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.d.ts","sourceRoot":"","sources":["../src/MarkdownPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAK9B,
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.d.ts","sourceRoot":"","sources":["../src/MarkdownPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAK9B,MAAM,sBAAsB,CAAC;AAK9B,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA0F7E;AAED,eAAe,cAAc,CAAC"}
|
package/dist/MarkdownPlugin.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useCallback, useEffect } from 'react';
|
|
2
2
|
import shortid from 'shortid';
|
|
3
3
|
import { assertIsDashboardPluginProps, dehydrate, hydrate, LayoutUtils, useListener } from '@deephaven/dashboard';
|
|
4
4
|
import { MarkdownPanel } from "./panels/index.js";
|
|
5
5
|
import MarkdownUtils from "./controls/markdown/MarkdownUtils.js";
|
|
6
6
|
import MarkdownEvent from "./events/MarkdownEvent.js";
|
|
7
|
-
export
|
|
7
|
+
export function MarkdownPlugin(props) {
|
|
8
8
|
assertIsDashboardPluginProps(props);
|
|
9
9
|
var {
|
|
10
10
|
id,
|
|
@@ -21,18 +21,15 @@ export var MarkdownPlugin = props => {
|
|
|
21
21
|
var {
|
|
22
22
|
panelState = null
|
|
23
23
|
} = configProps;
|
|
24
|
-
|
|
25
24
|
if (componentState != null) {
|
|
26
25
|
({
|
|
27
26
|
panelState = null
|
|
28
27
|
} = componentState);
|
|
29
28
|
}
|
|
30
|
-
|
|
31
29
|
if (title == null || panelState == null || panelState.content == null || panelState.content.length === 0 || panelState.content === MarkdownUtils.DEFAULT_CONTENT) {
|
|
32
30
|
// We don't want to save it if there's no content
|
|
33
31
|
return null;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
return dehydrate(config);
|
|
37
34
|
}, []);
|
|
38
35
|
var handleOpen = useCallback(function () {
|
|
@@ -48,7 +45,6 @@ export var MarkdownPlugin = props => {
|
|
|
48
45
|
var closedMarkdowns = panelManager.getClosedPanelConfigsOfType(MarkdownPanel.COMPONENT);
|
|
49
46
|
var usedTitles = openedMarkdowns.map(markdown => {
|
|
50
47
|
var _markdown$title;
|
|
51
|
-
|
|
52
48
|
return (_markdown$title = markdown.title) !== null && _markdown$title !== void 0 ? _markdown$title : '';
|
|
53
49
|
});
|
|
54
50
|
var panelTitle = title != null && title !== '' ? title : MarkdownUtils.getNewMarkdownTitle(usedTitles);
|
|
@@ -85,7 +81,7 @@ export var MarkdownPlugin = props => {
|
|
|
85
81
|
};
|
|
86
82
|
}, [dehydrateMarkdown, registerComponent]);
|
|
87
83
|
useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);
|
|
88
|
-
return
|
|
89
|
-
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
90
86
|
export default MarkdownPlugin;
|
|
91
87
|
//# sourceMappingURL=MarkdownPlugin.js.map
|