@deephaven/dashboard-core-plugins 0.78.1-use-widget.2 → 0.79.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.js +2 -2
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js +2 -2
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +4 -4
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.d.ts.map +1 -1
- package/dist/MarkdownPlugin.js +6 -27
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/WidgetLoaderPlugin.js +2 -2
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +2 -2
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.d.ts +2 -0
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js +2 -0
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/linker/Linker.js +2 -2
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerUtils.js +3 -3
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +5 -5
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ConsolePanel.js +2 -2
- package/dist/panels/ConsolePanel.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 +8 -7
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts +2 -2
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +11 -6
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/package.json +25 -25
|
@@ -2,7 +2,7 @@ import { useCallback } from 'react';
|
|
|
2
2
|
import { ChartModelFactory, ChartUtils } from '@deephaven/chart';
|
|
3
3
|
import { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';
|
|
4
4
|
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
5
|
-
import
|
|
5
|
+
import { nanoid } from 'nanoid';
|
|
6
6
|
import { IrisGridEvent } from "./events/index.js";
|
|
7
7
|
import { ChartPanel } from "./panels/index.js";
|
|
8
8
|
/**
|
|
@@ -19,7 +19,7 @@ export function ChartBuilderPlugin(props) {
|
|
|
19
19
|
var handleCreateChart = useCallback(_ref => {
|
|
20
20
|
var {
|
|
21
21
|
metadata,
|
|
22
|
-
panelId =
|
|
22
|
+
panelId = nanoid(),
|
|
23
23
|
table
|
|
24
24
|
} = _ref;
|
|
25
25
|
var {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","useApi","
|
|
1
|
+
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","useApi","nanoid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","dh","handleCreateChart","_ref","metadata","panelId","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"sources":["../src/ChartBuilderPlugin.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n ChartModel,\n ChartModelFactory,\n ChartModelSettings,\n ChartUtils,\n} from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { nanoid } from 'nanoid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport function ChartBuilderPlugin(\n props: ChartBuilderPluginProps\n): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const dh = useApi();\n\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = nanoid(),\n table,\n }: {\n metadata: {\n settings: ChartModelSettings;\n sourcePanelId: string;\n table: string;\n };\n panelId?: string;\n table: dh.Table;\n }) => {\n const { settings } = metadata;\n const makeModel = (): Promise<ChartModel> =>\n ChartModelFactory.makeModelFromSettings(dh, settings, table);\n const title = ChartUtils.titleFromSettings(settings);\n\n const config = {\n type: 'react-component' as const,\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [dh, id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return null;\n}\n\nexport default ChartBuilderPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAEEC,iBAAiB,EAEjBC,UAAU,QACL,kBAAkB;AACzB,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,WAAW,QACN,sBAAsB;AAC7B,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,SAASC,MAAM,QAAQ,QAAQ;AAAC,SACvBC,aAAa;AAAA,SACbC,UAAU;AAInB;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,KAA8B,EACV;EACpBR,4BAA4B,CAACQ,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC;EAAO,CAAC,GAAGF,KAAK;EAC5B,IAAMG,EAAE,GAAGR,MAAM,CAAC,CAAC;EAEnB,IAAMS,iBAAiB,GAAGf,WAAW,CACnCgB,IAAA,IAYM;IAAA,IAZL;MACCC,QAAQ;MACRC,OAAO,GAAGX,MAAM,CAAC,CAAC;MAClBY;IASF,CAAC,GAAAH,IAAA;IACC,IAAM;MAAEI;IAAS,CAAC,GAAGH,QAAQ;IAC7B,IAAMI,SAAS,GAAGA,CAAA,KAChBpB,iBAAiB,CAACqB,qBAAqB,CAACR,EAAE,EAAEM,QAAQ,EAAED,KAAK,CAAC;IAC9D,IAAMI,KAAK,GAAGrB,UAAU,CAACsB,iBAAiB,CAACJ,QAAQ,CAAC;IAEpD,IAAMK,MAAM,GAAG;MACbC,IAAI,EAAE,iBAA0B;MAChCC,SAAS,EAAElB,UAAU,CAACmB,SAAS;MAC/BjB,KAAK,EAAE;QACLkB,gBAAgB,EAAEjB,EAAE;QACpBA,EAAE,EAAEM,OAAO;QACXD,QAAQ;QACRI;MACF,CAAC;MACDE,KAAK;MACLX,EAAE,EAAEM;IACN,CAAC;IAED,IAAM;MAAEY;IAAK,CAAC,GAAGjB,MAAM;IACvBT,WAAW,CAAC2B,aAAa,CAAC;MAAED,IAAI;MAAEL;IAAO,CAAC,CAAC;EAC7C,CAAC,EACD,CAACX,EAAE,EAAEF,EAAE,EAAEC,MAAM,CACjB,CAAC;EAEDR,WAAW,CAACQ,MAAM,CAACmB,QAAQ,EAAExB,aAAa,CAACyB,YAAY,EAAElB,iBAAiB,CAAC;EAE3E,OAAO,IAAI;AACb;AAEA,eAAeL,kBAAkB"}
|
package/dist/ConsolePlugin.js
CHANGED
|
@@ -9,7 +9,7 @@ import { isComponent } from '@deephaven/golden-layout';
|
|
|
9
9
|
import Log from '@deephaven/log';
|
|
10
10
|
import { useCallback, useRef, useState } from 'react';
|
|
11
11
|
import { useDispatch } from 'react-redux';
|
|
12
|
-
import
|
|
12
|
+
import { nanoid } from 'nanoid';
|
|
13
13
|
import { ConsoleEvent, NotebookEvent } from "./events/index.js";
|
|
14
14
|
import { ConsolePanel, CommandHistoryPanel, FileExplorerPanel, LogPanel, NotebookPanel } from "./panels/index.js";
|
|
15
15
|
import { setDashboardConsoleSettings } from "./redux/index.js";
|
|
@@ -100,7 +100,7 @@ export function ConsolePlugin(props) {
|
|
|
100
100
|
return previewFileMap.get(fileId);
|
|
101
101
|
}
|
|
102
102
|
if (createIfNecessary) {
|
|
103
|
-
return
|
|
103
|
+
return nanoid();
|
|
104
104
|
}
|
|
105
105
|
return undefined;
|
|
106
106
|
}, [openFileMap, previewFileMap]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","usePanelRegistration","FileUtils","isComponent","Log","useCallback","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","setOpenFileMap","Map","previewFileMap","setPreviewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","addOpenFileMapEntry","key","value","map","set","deleteOpenFileMapEntry","delete","addPreviewFileMapEntry","deletePreviewFileMapEntry","handleSendCommand","command","focus","arguments","length","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","_ref","language","extension","title","concat","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","options","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","_ref2","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewId","values","Error","getStackForConfig","item","getContentItemInStack","container","emit","PROMOTE_FROM_PREVIEW","sendToNotebook","notebookPanel","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","_objectSpread","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 DashboardPluginComponentProps,\n DashboardUtils,\n DehydratedDashboardPanelProps,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n useListener,\n usePanelRegistration,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport { CloseOptions, isComponent } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { useCallback, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nfunction assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap, setOpenFileMap] = useState(new Map<string, string>());\n const [previewFileMap, setPreviewFileMap] = useState(\n new Map<string, string>()\n );\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const addOpenFileMapEntry = useCallback(\n (key: string, value: string) => {\n setOpenFileMap(map => new Map(map.set(key, value)));\n },\n [setOpenFileMap]\n );\n\n const deleteOpenFileMapEntry = useCallback(\n (key: string) => {\n setOpenFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setOpenFileMap]\n );\n\n const addPreviewFileMapEntry = useCallback(\n (key: string, value: string) => {\n setPreviewFileMap(map => new Map(map.set(key, value)));\n },\n [setPreviewFileMap]\n );\n\n const deletePreviewFileMapEntry = useCallback(\n (key: string) => {\n setPreviewFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setPreviewFileMap]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return undefined;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n deleteOpenFileMapEntry(oldName);\n if (panelId != null) {\n addOpenFileMapEntry(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n deletePreviewFileMapEntry(oldName);\n if (panelId != null) {\n addPreviewFileMapEntry(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [\n openFileMap,\n previewFileMap,\n renamePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deleteOpenFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n addPreviewFileMapEntry(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, itemName);\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n addOpenFileMapEntry(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n deletePreviewFileMapEntry(fileId);\n }\n },\n [\n openFileMap,\n previewFileMap,\n renameFilePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n deletePreviewFileMapEntry(fileId);\n return;\n }\n deleteOpenFileMapEntry(fileId);\n },\n [deleteOpenFileMapEntry, deletePreviewFileMapEntry]\n );\n\n const closeFilePanel = useCallback(\n (fileMetadata, options?: CloseOptions) => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId }, options);\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n const [previewId] = [...previewFileMap.values()];\n const isPreview = !shouldFocus;\n const panelId =\n isPreview && previewId\n ? previewId\n : getPanelIdForFileMetadata(fileMetadata);\n\n if (panelId == null || panelId === '') {\n throw new Error(\n 'Unable to retrieve or create panelId for metadata',\n fileMetadata\n );\n }\n\n // If the file is already open, show it\n if (isFileOpen || isFileOpenAsPreview) {\n showFilePanel(fileMetadata);\n } else {\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview,\n });\n\n // This will replace the existing preview by panelId if needed\n LayoutUtils.openComponentInStack(stack, config);\n }\n\n // If the file is open as a preview and focused, promote to non-preview\n if (isFileOpenAsPreview && shouldFocus) {\n const fileId = fileMetadata.id;\n const stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n\n const item = LayoutUtils.getContentItemInStack(stack, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n if (item && isComponent(item)) {\n item.container.emit(NotebookEvent.PROMOTE_FROM_PREVIEW);\n deletePreviewFileMapEntry(fileId);\n addOpenFileMapEntry(fileId, panelId);\n }\n }\n\n if (shouldFocus) {\n // Focus the tab if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n deletePreviewFileMapEntry,\n addOpenFileMapEntry,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (\n panelProps: DehydratedDashboardPanelProps,\n panelDashboardId: string\n ): DehydratedDashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n usePanelRegistration(registerComponent, ConsolePanel, hydrateConsole);\n usePanelRegistration(registerComponent, CommandHistoryPanel);\n usePanelRegistration(registerComponent, FileExplorerPanel);\n usePanelRegistration(registerComponent, LogPanel);\n usePanelRegistration(registerComponent, NotebookPanel, hydrateNotebook);\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","usePanelRegistration","FileUtils","isComponent","Log","useCallback","useRef","useState","useDispatch","nanoid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","setOpenFileMap","Map","previewFileMap","setPreviewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","addOpenFileMapEntry","key","value","map","set","deleteOpenFileMapEntry","delete","addPreviewFileMapEntry","deletePreviewFileMapEntry","handleSendCommand","command","focus","arguments","length","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","_ref","language","extension","title","concat","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","options","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","_ref2","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewId","values","Error","getStackForConfig","item","getContentItemInStack","container","emit","PROMOTE_FROM_PREVIEW","sendToNotebook","notebookPanel","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","_objectSpread","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 DashboardPluginComponentProps,\n DashboardUtils,\n DehydratedDashboardPanelProps,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n useListener,\n usePanelRegistration,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport { CloseOptions, isComponent } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { useCallback, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nfunction assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap, setOpenFileMap] = useState(new Map<string, string>());\n const [previewFileMap, setPreviewFileMap] = useState(\n new Map<string, string>()\n );\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const addOpenFileMapEntry = useCallback(\n (key: string, value: string) => {\n setOpenFileMap(map => new Map(map.set(key, value)));\n },\n [setOpenFileMap]\n );\n\n const deleteOpenFileMapEntry = useCallback(\n (key: string) => {\n setOpenFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setOpenFileMap]\n );\n\n const addPreviewFileMapEntry = useCallback(\n (key: string, value: string) => {\n setPreviewFileMap(map => new Map(map.set(key, value)));\n },\n [setPreviewFileMap]\n );\n\n const deletePreviewFileMapEntry = useCallback(\n (key: string) => {\n setPreviewFileMap(map => {\n map.delete(key);\n return new Map(map);\n });\n },\n [setPreviewFileMap]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return nanoid();\n }\n return undefined;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n deleteOpenFileMapEntry(oldName);\n if (panelId != null) {\n addOpenFileMapEntry(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n deletePreviewFileMapEntry(oldName);\n if (panelId != null) {\n addPreviewFileMapEntry(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [\n openFileMap,\n previewFileMap,\n renamePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deleteOpenFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n addPreviewFileMapEntry(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, itemName);\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n addOpenFileMapEntry(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n deletePreviewFileMapEntry(fileId);\n }\n },\n [\n openFileMap,\n previewFileMap,\n renameFilePanel,\n addOpenFileMapEntry,\n addPreviewFileMapEntry,\n deletePreviewFileMapEntry,\n ]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n deletePreviewFileMapEntry(fileId);\n return;\n }\n deleteOpenFileMapEntry(fileId);\n },\n [deleteOpenFileMapEntry, deletePreviewFileMapEntry]\n );\n\n const closeFilePanel = useCallback(\n (fileMetadata, options?: CloseOptions) => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId }, options);\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n const [previewId] = [...previewFileMap.values()];\n const isPreview = !shouldFocus;\n const panelId =\n isPreview && previewId\n ? previewId\n : getPanelIdForFileMetadata(fileMetadata);\n\n if (panelId == null || panelId === '') {\n throw new Error(\n 'Unable to retrieve or create panelId for metadata',\n fileMetadata\n );\n }\n\n // If the file is already open, show it\n if (isFileOpen || isFileOpenAsPreview) {\n showFilePanel(fileMetadata);\n } else {\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview,\n });\n\n // This will replace the existing preview by panelId if needed\n LayoutUtils.openComponentInStack(stack, config);\n }\n\n // If the file is open as a preview and focused, promote to non-preview\n if (isFileOpenAsPreview && shouldFocus) {\n const fileId = fileMetadata.id;\n const stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n\n const item = LayoutUtils.getContentItemInStack(stack, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n if (item && isComponent(item)) {\n item.container.emit(NotebookEvent.PROMOTE_FROM_PREVIEW);\n deletePreviewFileMapEntry(fileId);\n addOpenFileMapEntry(fileId, panelId);\n }\n }\n\n if (shouldFocus) {\n // Focus the tab if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n deletePreviewFileMapEntry,\n addOpenFileMapEntry,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (\n panelProps: DehydratedDashboardPanelProps,\n panelDashboardId: string\n ): DehydratedDashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n usePanelRegistration(registerComponent, ConsolePanel, hydrateConsole);\n usePanelRegistration(registerComponent, CommandHistoryPanel);\n usePanelRegistration(registerComponent, FileExplorerPanel);\n usePanelRegistration(registerComponent, LogPanel);\n usePanelRegistration(registerComponent, NotebookPanel, hydrateNotebook);\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.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { useDispatch } from 'react-redux';
|
|
3
|
-
import
|
|
3
|
+
import { nanoid } from 'nanoid';
|
|
4
4
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, updateDashboardData, useListener } from '@deephaven/dashboard';
|
|
5
5
|
import Log from '@deephaven/log';
|
|
6
6
|
import { TextUtils } from '@deephaven/utils';
|
|
@@ -92,7 +92,7 @@ export function FilterPlugin(props) {
|
|
|
92
92
|
title = 'DropdownFilter',
|
|
93
93
|
metadata = {},
|
|
94
94
|
panelState = null,
|
|
95
|
-
id =
|
|
95
|
+
id = nanoid(),
|
|
96
96
|
focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
|
|
97
97
|
createNewStack = false,
|
|
98
98
|
dragEvent = null
|
|
@@ -125,7 +125,7 @@ export function FilterPlugin(props) {
|
|
|
125
125
|
title = 'InputFilter',
|
|
126
126
|
metadata = {},
|
|
127
127
|
panelState = null,
|
|
128
|
-
id =
|
|
128
|
+
id = nanoid(),
|
|
129
129
|
focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
|
|
130
130
|
createNewStack = false,
|
|
131
131
|
dragEvent = undefined
|
|
@@ -158,7 +158,7 @@ export function FilterPlugin(props) {
|
|
|
158
158
|
title = 'FilterSets',
|
|
159
159
|
metadata = {},
|
|
160
160
|
panelState = null,
|
|
161
|
-
id =
|
|
161
|
+
id = nanoid(),
|
|
162
162
|
focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
|
|
163
163
|
createNewStack = false,
|
|
164
164
|
dragEvent = null
|
package/dist/FilterPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","_ref","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","undefined","handleOpenFilterSetManager","_ref3","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 = undefined,\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":"AAAA,SAAoBA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACnE,SAASC,WAAW,QAAQ,aAAa;AACzC,OAAOC,OAAO,MAAM,SAAS;AAC7B,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EACVC,mBAAmB,EACnBC,WAAW,QACN,sBAAsB;AAC7B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,QAAQ,kBAAkB;AAAC,SACpCC,gBAAgB;AAAA,SAEvBC,mBAAmB,EACnBC,qBAAqB,EACrBC,gBAAgB;AAGlB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,cAAc,CAAC;AAetC,SAASC,YAAYA,CAAIC,WAAgB,EAAEC,YAAqB,EAAO;EACrE,OAAOD,WAAW,CAACE,MAAM,CAACD,YAAY,CAAC;AACzC;AAEA,OAAO,SAASE,YAAYA,CAACC,KAAwB,EAAsB;EACzElB,4BAA4B,CAACkB,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE,EAAEC,gBAAgB;IAAEC,MAAM;IAAEC;EAAkB,CAAC,GAAGJ,KAAK;EACjE,IAAMK,QAAQ,GAAGzB,WAAW,CAAC,CAAC;EAC9B,IAAM,CAAC0B,YAAY,CAAC,GAAG3B,QAAQ,CAAC,MAAM,IAAI4B,GAAG,CAAsB,CAAC,CAAC;EACrE,IAAM,CAACC,YAAY,CAAC,GAAG7B,QAAQ,CAC7B,MAAM,IAAI4B,GAAG,CAAiC,CAChD,CAAC;EACD,IAAM,CAACE,WAAW,CAAC,GAAG9B,QAAQ,CAAC,MAAM,IAAI4B,GAAG,CAAC,CAAC,CAAC;EAE/C,IAAMG,UAAU,GAAGjC,WAAW,CAAC,MAAM;IACnC,IAAMkC,OAAO,GAAGC,KAAK,CAACC,IAAI,CAACP,YAAY,CAACQ,MAAM,CAAC,CAAC,CAAC,CAC9CC,MAAM,CAACpB,YAAY,EAAE,EAAc,CAAC,CACpCqB,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;MACd,IAAMC,KAAK,GAAG/B,SAAS,CAACgC,OAAO,CAACH,CAAC,CAACI,IAAI,CAAC;MACvC,IAAMC,KAAK,GAAGlC,SAAS,CAACgC,OAAO,CAACF,CAAC,CAACG,IAAI,CAAC;MACvC,IAAIF,KAAK,KAAKG,KAAK,EAAE;QACnB,OAAOH,KAAK,GAAGG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;MAC/B;MAEA,IAAMC,KAAK,GAAGnC,SAAS,CAACgC,OAAO,CAACH,CAAC,CAACO,IAAI,CAAC;MACvC,IAAMC,KAAK,GAAGrC,SAAS,CAACgC,OAAO,CAACF,CAAC,CAACM,IAAI,CAAC;MACvC,IAAID,KAAK,KAAKE,KAAK,EAAE;QACnB,OAAOF,KAAK,GAAGE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;MAC/B;MAEA,OAAO,CAAC;IACV,CAAC,CAAC,CACDV,MAAM,CAAC,CAACW,KAAK,EAAEC,MAAM,KAAK;MACzB,IACED,KAAK,CAACE,MAAM,KAAK,CAAC,IAClBxC,SAAS,CAACgC,OAAO,CAACM,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,CAACP,IAAI,CAAC,KAC7CjC,SAAS,CAACgC,OAAO,CAACO,MAAM,CAACN,IAAI,CAAC,IAChCjC,SAAS,CAACgC,OAAO,CAACM,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,CAACJ,IAAI,CAAC,KAC7CpC,SAAS,CAACgC,OAAO,CAACO,MAAM,CAACH,IAAI,CAAC,EAChC;QACAE,KAAK,CAACG,IAAI,CAACF,MAAM,CAAC;MACpB;MAEA,OAAOD,KAAK;IACd,CAAC,EAAE,EAAc,CAAC;IAEpB,IAAMI,OAAO,GAAGlB,KAAK,CAACC,IAAI,CAACL,YAAY,CAACM,MAAM,CAAC,CAAC,CAAC,CAC9CC,MAAM,CAACpB,YAAY,EAAE,EAAyB,CAAC,CAC/CqB,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACc,SAAS,GAAGb,CAAC,CAACa,SAAS,CAAC;IAC5C,IAAMC,QAAQ,GAAG,IAAIzB,GAAG,CAACE,WAAW,CAAC;IAErChB,GAAG,CAACwC,KAAK,CAAC,YAAY,EAAE;MAAEtB,OAAO;MAAEmB,OAAO;MAAEE;IAAS,CAAC,CAAC;IACvD3B,QAAQ,CACNpB,mBAAmB,CAACiB,gBAAgB,EAAE;MAAES,OAAO;MAAEmB,OAAO;MAAEE;IAAS,CAAC,CACtE,CAAC;EACH,CAAC,EAAE,CAAC3B,QAAQ,EAAEH,gBAAgB,EAAEI,YAAY,EAAEE,YAAY,EAAEC,WAAW,CAAC,CAAC;;EAEzE;AACF;AACA;AACA;AACA;EACE,IAAMyB,oBAAoB,GAAGzD,WAAW,CACtC,CAAC0D,KAAgB,EAAExB,OAA0B,KAAK;IAChDlB,GAAG,CAAC2C,MAAM,CAAC,sBAAsB,EAAED,KAAK,EAAExB,OAAO,CAAC;IAClDL,YAAY,CAAC+B,GAAG,CAACF,KAAK,EAAG,EAAE,CAAcrC,MAAM,CAACa,OAAO,CAAC,CAAC;IACzDD,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACJ,YAAY,EAAEI,UAAU,CAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAM4B,oBAAoB,GAAG7D,WAAW,CACtC,CAAC0D,KAAK,EAAEL,OAAO,KAAK;IAClBrC,GAAG,CAAC2C,MAAM,CAAC,sBAAsB,EAAED,KAAK,EAAEL,OAAO,CAAC;IAClDtB,YAAY,CAAC6B,GAAG,CAACF,KAAK,EAAE,EAAE,CAACrC,MAAM,CAACgC,OAAO,CAAwB,CAAC;IAClEpB,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACF,YAAY,EAAEE,UAAU,CAC3B,CAAC;EAED,IAAM6B,kBAAkB,GAAG9D,WAAW,CACpC,CAAC0D,KAAK,EAAEK,KAAK,KAAK;IAChB/C,GAAG,CAAC2C,MAAM,CAAC,oBAAoB,EAAED,KAAK,EAAEK,KAAK,CAAC;IAC9C/B,WAAW,CAAC4B,GAAG,CAACtD,WAAW,CAAC0D,cAAc,CAACN,KAAK,CAAC,EAAEK,KAAK,CAAC;IACzD9B,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACD,WAAW,EAAEC,UAAU,CAC1B,CAAC;EAED,IAAMgC,kBAAkB,GAAGjE,WAAW,CACpC0D,KAAK,IAAI;IACP1C,GAAG,CAAC2C,MAAM,CAAC,oBAAoB,EAAED,KAAK,CAAC;IACvC7B,YAAY,CAACqC,MAAM,CAACR,KAAK,CAAC;IAC1B3B,YAAY,CAACmC,MAAM,CAACR,KAAK,CAAC;IAC1B1B,WAAW,CAACkC,MAAM,CAAC5D,WAAW,CAAC0D,cAAc,CAACN,KAAK,CAAC,CAAC;IACrDzB,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACJ,YAAY,EAAEE,YAAY,EAAEC,WAAW,EAAEC,UAAU,CACtD,CAAC;EAED,IAAMkC,kBAAkB,GAAGnE,WAAW,CACpCoE,IAAA,IAQM;IAAA,IARL;MACCC,KAAK,GAAG,gBAAgB;MACxBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjB/C,EAAE,GAAGpB,OAAO,CAACoE,QAAQ,CAAC,CAAC;MACvBC,YAAY,GAAGnE,WAAW,CAACoE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAG;IACd,CAAC,GAAAR,IAAA;IACC,IAAMS,MAAM,GAAG;MACb9B,IAAI,EAAE,iBAA0B;MAChC+B,SAAS,EAAEjE,mBAAmB,CAACkE,SAAS;MACxCxD,KAAK,EAAE;QAAEC,EAAE;QAAE8C,QAAQ;QAAEC,UAAU;QAAE9C;MAAiB,CAAC;MACrD4C,KAAK;MACL7C;IACF,CAAC;IAED,IAAM;MAAEwD;IAAK,CAAC,GAAGtD,MAAM;IACvBpB,WAAW,CAAC2E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNJ,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAClD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAED,IAAMyD,eAAe,GAAGlF,WAAW,CACjCmF,KAAA,IAQM;IAAA,IARL;MACCd,KAAK,GAAG,aAAa;MACrBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjB/C,EAAE,GAAGpB,OAAO,CAACoE,QAAQ,CAAC,CAAC;MACvBC,YAAY,GAAGnE,WAAW,CAACoE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAGQ;IACd,CAAC,GAAAD,KAAA;IACC,IAAMN,MAAM,GAAG;MACb9B,IAAI,EAAE,iBAA0B;MAChC+B,SAAS,EAAE/D,gBAAgB,CAACgE,SAAS;MACrCxD,KAAK,EAAE;QAAEC,EAAE;QAAE8C,QAAQ;QAAEC,UAAU;QAAE9C;MAAiB,CAAC;MACrD4C,KAAK;MACL7C;IACF,CAAC;IAED,IAAM;MAAEwD;IAAK,CAAC,GAAGtD,MAAM;IACvBpB,WAAW,CAAC2E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNJ,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAClD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAED,IAAM4D,0BAA0B,GAAGrF,WAAW,CAC5CsF,KAAA,IAQM;IAAA,IARL;MACCjB,KAAK,GAAG,YAAY;MACpBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjB/C,EAAE,GAAGpB,OAAO,CAACoE,QAAQ,CAAC,CAAC;MACvBC,YAAY,GAAGnE,WAAW,CAACoE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAG;IACd,CAAC,GAAAU,KAAA;IACC,IAAMT,MAAM,GAAG;MACb9B,IAAI,EAAE,iBAA0B;MAChC+B,SAAS,EAAEhE,qBAAqB,CAACiE,SAAS;MAC1CxD,KAAK,EAAE;QAAEC,EAAE;QAAE8C,QAAQ;QAAEC,UAAU;QAAE9C;MAAiB,CAAC;MACrD4C,KAAK;MACL7C;IACF,CAAC;IAED,IAAM;MAAEwD;IAAK,CAAC,GAAGtD,MAAM;IACvBpB,WAAW,CAAC2E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNJ,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAClD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAEDxB,SAAS,CACP,SAASsF,kCAAkCA,CAAA,EAAG;IAC5C,IAAMC,QAAQ,GAAG,CACf7D,iBAAiB,CAACd,mBAAmB,CAACkE,SAAS,EAAElE,mBAAmB,CAAC,EACrEc,iBAAiB,CAACZ,gBAAgB,CAACgE,SAAS,EAAEhE,gBAAgB,CAAC,EAC/DY,iBAAiB,CACfb,qBAAqB,CAACiE,SAAS,EAC/BjE,qBACF,CAAC,CACF;IAED,OAAO,MAAM;MACX0E,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAC/D,iBAAiB,CACpB,CAAC;EAEDlB,WAAW,CACTiB,MAAM,CAACiE,QAAQ,EACf/E,gBAAgB,CAACgF,eAAe,EAChCnC,oBACF,CAAC;EACDhD,WAAW,CACTiB,MAAM,CAACiE,QAAQ,EACf/E,gBAAgB,CAACiF,eAAe,EAChChC,oBACF,CAAC;EACDpD,WAAW,CACTiB,MAAM,CAACiE,QAAQ,EACf/E,gBAAgB,CAACkF,aAAa,EAC9BhC,kBACF,CAAC;EACDrD,WAAW,CACTiB,MAAM,CAACiE,QAAQ,EACf/E,gBAAgB,CAACmF,aAAa,EAC9B5B,kBACF,CAAC;EACD1D,WAAW,CAACiB,MAAM,CAACiE,QAAQ,EAAE/E,gBAAgB,CAACoF,UAAU,EAAEd,eAAe,CAAC;EAC1EzE,WAAW,CACTiB,MAAM,CAACiE,QAAQ,EACf/E,gBAAgB,CAACqF,uBAAuB,EACxCZ,0BACF,CAAC;EACD5E,WAAW,CAACiB,MAAM,CAACiE,QAAQ,EAAEpF,UAAU,CAAC2F,OAAO,EAAEjC,kBAAkB,CAAC;EAEpE,OAAO,IAAI;AACb;AAEA,eAAe3C,YAAY"}
|
|
1
|
+
{"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","nanoid","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","_ref","title","metadata","panelState","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","undefined","handleOpenFilterSetManager","_ref3","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 { nanoid } from 'nanoid';\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 = nanoid(),\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 = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\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 = nanoid(),\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.d.ts","sourceRoot":"","sources":["../src/MarkdownPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.d.ts","sourceRoot":"","sources":["../src/MarkdownPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG9B,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,CA+D7E;AAED,eAAe,cAAc,CAAC"}
|
package/dist/MarkdownPlugin.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect } from 'react';
|
|
2
|
-
import
|
|
3
|
-
import { assertIsDashboardPluginProps,
|
|
2
|
+
import { nanoid } from 'nanoid';
|
|
3
|
+
import { assertIsDashboardPluginProps, 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";
|
|
@@ -12,43 +12,22 @@ export function MarkdownPlugin(props) {
|
|
|
12
12
|
panelManager,
|
|
13
13
|
registerComponent
|
|
14
14
|
} = props;
|
|
15
|
-
var dehydrateMarkdown = useCallback(config => {
|
|
16
|
-
var {
|
|
17
|
-
title,
|
|
18
|
-
componentState,
|
|
19
|
-
props: configProps
|
|
20
|
-
} = config;
|
|
21
|
-
var {
|
|
22
|
-
panelState = null
|
|
23
|
-
} = configProps;
|
|
24
|
-
if (componentState != null) {
|
|
25
|
-
({
|
|
26
|
-
panelState = null
|
|
27
|
-
} = componentState);
|
|
28
|
-
}
|
|
29
|
-
if (title == null || panelState == null || panelState.content == null || panelState.content.length === 0 || panelState.content === MarkdownUtils.DEFAULT_CONTENT) {
|
|
30
|
-
// We don't want to save it if there's no content
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
return dehydrate(config);
|
|
34
|
-
}, []);
|
|
35
15
|
var handleOpen = useCallback(function () {
|
|
36
16
|
var {
|
|
37
17
|
title = '',
|
|
38
18
|
metadata = {},
|
|
39
|
-
id: panelId =
|
|
19
|
+
id: panelId = nanoid(),
|
|
40
20
|
focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,
|
|
41
21
|
createNewStack = false,
|
|
42
22
|
dragEvent = null
|
|
43
23
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
44
24
|
var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);
|
|
45
|
-
var closedMarkdowns = panelManager.getClosedPanelConfigsOfType(MarkdownPanel.COMPONENT);
|
|
46
25
|
var usedTitles = openedMarkdowns.map(markdown => {
|
|
47
26
|
var _markdown$title;
|
|
48
27
|
return (_markdown$title = markdown.title) !== null && _markdown$title !== void 0 ? _markdown$title : '';
|
|
49
28
|
});
|
|
50
29
|
var panelTitle = title != null && title !== '' ? title : MarkdownUtils.getNewMarkdownTitle(usedTitles);
|
|
51
|
-
var content =
|
|
30
|
+
var content = null;
|
|
52
31
|
var config = {
|
|
53
32
|
type: 'react-component',
|
|
54
33
|
component: MarkdownPanel.COMPONENT,
|
|
@@ -75,11 +54,11 @@ export function MarkdownPlugin(props) {
|
|
|
75
54
|
});
|
|
76
55
|
}, [id, layout, panelManager]);
|
|
77
56
|
useEffect(function registerComponentsAndReturnCleanup() {
|
|
78
|
-
var cleanups = [registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel
|
|
57
|
+
var cleanups = [registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel)];
|
|
79
58
|
return () => {
|
|
80
59
|
cleanups.forEach(cleanup => cleanup());
|
|
81
60
|
};
|
|
82
|
-
}, [
|
|
61
|
+
}, [registerComponent]);
|
|
83
62
|
useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);
|
|
84
63
|
return null;
|
|
85
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","nanoid","assertIsDashboardPluginProps","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","handleOpen","title","metadata","panelId","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","arguments","length","undefined","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","usedTitles","map","markdown","_markdown$title","panelTitle","getNewMarkdownTitle","content","config","type","component","panelState","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MarkdownPanel } from './panels';\nimport MarkdownUtils from './controls/markdown/MarkdownUtils';\nimport MarkdownEvent from './events/MarkdownEvent';\n\nexport type MarkdownPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport type MarkdownComponentState = {\n panelState?: { content: string } | null;\n};\n\nexport function MarkdownPlugin(props: MarkdownPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager, registerComponent } = props;\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const usedTitles = openedMarkdowns.map(markdown => markdown.title ?? '');\n const panelTitle =\n title != null && title !== ''\n ? title\n : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n const content = null;\n const config = {\n type: 'react-component' as const,\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: { content },\n localDashboardId: id,\n },\n title: panelTitle,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [id, layout, panelManager]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n\n return null;\n}\n\nexport default MarkdownPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAC9C,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,WAAW,QACN,sBAAsB;AAAC,SACrBC,aAAa;AAAA,OACfC,aAAa;AAAA,OACbC,aAAa;AAQpB,OAAO,SAASC,cAAcA,CAACC,KAA0B,EAAsB;EAC7EP,4BAA4B,CAACO,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC,MAAM;IAAEC,YAAY;IAAEC;EAAkB,CAAC,GAAGJ,KAAK;EAE7D,IAAMK,UAAU,GAAGf,WAAW,CAC5B,YAOW;IAAA,IAPV;MACCgB,KAAK,GAAG,EAAE;MACVC,QAAQ,GAAG,CAAC,CAAC;MACbN,EAAE,EAAEO,OAAO,GAAGhB,MAAM,CAAC,CAAC;MACtBiB,YAAY,GAAGf,WAAW,CAACgB,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAG;IACd,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACJ,IAAMG,eAAe,GAAGb,YAAY,CAACc,2BAA2B,CAC9DrB,aAAa,CAACsB,SAChB,CAAC;IACD,IAAMC,UAAU,GAAGH,eAAe,CAACI,GAAG,CAACC,QAAQ;MAAA,IAAAC,eAAA;MAAA,QAAAA,eAAA,GAAID,QAAQ,CAACf,KAAK,cAAAgB,eAAA,cAAAA,eAAA,GAAI,EAAE;IAAA,EAAC;IACxE,IAAMC,UAAU,GACdjB,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,EAAE,GACzBA,KAAK,GACLT,aAAa,CAAC2B,mBAAmB,CAACL,UAAU,CAAC;IACnD,IAAMM,OAAO,GAAG,IAAI;IACpB,IAAMC,MAAM,GAAG;MACbC,IAAI,EAAE,iBAA0B;MAChCC,SAAS,EAAEhC,aAAa,CAACsB,SAAS;MAClClB,KAAK,EAAE;QACLC,EAAE,EAAEO,OAAO;QACXD,QAAQ;QACRsB,UAAU,EAAE;UAAEJ;QAAQ,CAAC;QACvBK,gBAAgB,EAAE7B;MACpB,CAAC;MACDK,KAAK,EAAEiB,UAAU;MACjBtB,EAAE,EAAEO;IACN,CAAC;IAED,IAAM;MAAEuB;IAAK,CAAC,GAAG7B,MAAM;IACvBR,WAAW,CAACsC,aAAa,CAAC;MACxBD,IAAI;MACJL,MAAM;MACNjB,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACX,EAAE,EAAEC,MAAM,EAAEC,YAAY,CAC3B,CAAC;EAEDZ,SAAS,CACP,SAAS0C,kCAAkCA,CAAA,EAAG;IAC5C,IAAMC,QAAQ,GAAG,CACf9B,iBAAiB,CAACR,aAAa,CAACsB,SAAS,EAAEtB,aAAa,CAAC,CAC1D;IAED,OAAO,MAAM;MACXsC,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAChC,iBAAiB,CACpB,CAAC;EAEDT,WAAW,CAACO,MAAM,CAACmC,QAAQ,EAAEvC,aAAa,CAACwC,IAAI,EAAEjC,UAAU,CAAC;EAE5D,OAAO,IAAI;AACb;AAEA,eAAeN,cAAc"}
|
|
@@ -4,7 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
4
4
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
5
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
6
6
|
import { useMemo, useCallback, useEffect, forwardRef } from 'react';
|
|
7
|
-
import
|
|
7
|
+
import { nanoid } from 'nanoid';
|
|
8
8
|
import { assertIsDashboardPluginProps, PanelEvent, LayoutUtils, useListener, canHaveRef } from '@deephaven/dashboard';
|
|
9
9
|
import Log from '@deephaven/log';
|
|
10
10
|
import { isWidgetPlugin, usePlugins } from '@deephaven/plugin';
|
|
@@ -79,7 +79,7 @@ export function WidgetLoaderPlugin(props) {
|
|
|
79
79
|
var _widget$name;
|
|
80
80
|
var {
|
|
81
81
|
dragEvent,
|
|
82
|
-
panelId =
|
|
82
|
+
panelId = nanoid(),
|
|
83
83
|
fetch,
|
|
84
84
|
widget
|
|
85
85
|
} = _ref;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","
|
|
1
|
+
{"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","nanoid","assertIsDashboardPluginProps","PanelEvent","LayoutUtils","useListener","canHaveRef","Log","isWidgetPlugin","usePlugins","WidgetPanel","jsx","_jsx","log","module","WrapWidgetPlugin","plugin","_plugin$component$dis","Wrapper","props","ref","_metadata$name","C","component","metadata","hasRef","_objectSpread","widgetName","name","undefined","widgetType","title","children","displayName","concat","WidgetLoaderPlugin","plugins","supportedTypes","typeMap","Map","forEach","flat","supportedType","has","_typeMap$get","warn","get","set","id","layout","registerComponent","handlePanelOpen","_ref","_widget$name","dragEvent","panelId","fetch","widget","type","panelProps","localDashboardId","config","root","openComponent","deregisterFns","Set","values","map","panelComponent","deregister","eventHub","OPEN"],"sources":["../src/WidgetLoaderPlugin.tsx"],"sourcesContent":["import { useMemo, useCallback, useEffect, forwardRef } from 'react';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n DehydratedDashboardPanelProps,\n PanelEvent,\n PanelOpenEventDetail,\n LayoutUtils,\n useListener,\n PanelProps,\n canHaveRef,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport {\n isWidgetPlugin,\n usePlugins,\n type WidgetPlugin,\n} from '@deephaven/plugin';\nimport { WidgetPanel } from './panels';\n\nconst log = Log.module('WidgetLoaderPlugin');\n\nexport function WrapWidgetPlugin(\n plugin: WidgetPlugin\n): React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<unknown>> {\n function Wrapper(props: PanelProps, ref: React.ForwardedRef<unknown>) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const C = plugin.component as any;\n const { metadata } = props;\n\n const hasRef = canHaveRef(C);\n\n return (\n <WidgetPanel\n widgetName={metadata?.name ?? undefined}\n widgetType={plugin.title}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n >\n {hasRef ? (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n ref={ref}\n />\n ) : (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n )}\n </WidgetPanel>\n );\n }\n\n Wrapper.displayName = `WidgetLoaderPlugin(${\n plugin.component.displayName ?? plugin.name\n })`;\n\n return forwardRef(Wrapper);\n}\n\n/**\n * Widget to automatically open any supported WidgetPlugin types as panels\n * if the widget is emitted from the server as the result of executed code.\n *\n * Does not open panels for widgets that are not supported by any plugins.\n * Does not open panels for widgets that are a component of a larger widget or UI element.\n *\n * @param props Dashboard plugin props\n * @returns React element\n */\nexport function WidgetLoaderPlugin(\n props: Partial<DashboardPluginComponentProps>\n): JSX.Element | null {\n const plugins = usePlugins();\n const supportedTypes = useMemo(() => {\n const typeMap = new Map<string, WidgetPlugin>();\n plugins.forEach(plugin => {\n if (!isWidgetPlugin(plugin)) {\n return;\n }\n\n [plugin.supportedTypes].flat().forEach(supportedType => {\n if (supportedType != null && supportedType !== '') {\n if (typeMap.has(supportedType)) {\n log.warn(\n `Multiple WidgetPlugins handling type ${supportedType}. Replacing ${typeMap.get(\n supportedType\n )?.name} with ${plugin.name} to handle ${supportedType}`\n );\n }\n typeMap.set(supportedType, plugin);\n }\n });\n });\n\n return typeMap;\n }, [plugins]);\n\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent } = props;\n\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n panelId = nanoid(),\n fetch,\n widget,\n }: PanelOpenEventDetail) => {\n const { type } = widget;\n const plugin = type != null ? supportedTypes.get(type) : null;\n if (plugin == null) {\n return;\n }\n const name = widget.name ?? type;\n\n const panelProps: DehydratedDashboardPanelProps & {\n fetch?: () => Promise<unknown>;\n } = {\n localDashboardId: id,\n metadata: widget,\n fetch,\n };\n\n const config: ReactComponentConfig = {\n type: 'react-component',\n component: plugin.name,\n props: panelProps,\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [id, layout, supportedTypes]\n );\n\n useEffect(() => {\n const deregisterFns = [...new Set(supportedTypes.values())].map(plugin => {\n const { panelComponent } = plugin;\n if (panelComponent == null) {\n return registerComponent(plugin.name, WrapWidgetPlugin(plugin));\n }\n return registerComponent(plugin.name, panelComponent);\n });\n\n return () => {\n deregisterFns.forEach(deregister => deregister());\n };\n }, [registerComponent, supportedTypes]);\n\n /**\n * Listen for panel open events so we know when to open a panel\n */\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default WidgetLoaderPlugin;\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { TableUtils } from '@deephaven/jsapi-utils';
|
|
|
13
13
|
import memoizee from 'memoizee';
|
|
14
14
|
import memoize from 'memoize-one';
|
|
15
15
|
import debounce from 'lodash.debounce';
|
|
16
|
-
import
|
|
16
|
+
import { nanoid } from 'nanoid';
|
|
17
17
|
import Log from '@deephaven/log';
|
|
18
18
|
import "./DropdownFilter.css";
|
|
19
19
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -100,7 +100,7 @@ export class DropdownFilter extends Component {
|
|
|
100
100
|
} = props;
|
|
101
101
|
this.state = {
|
|
102
102
|
column: _column,
|
|
103
|
-
id:
|
|
103
|
+
id: nanoid(),
|
|
104
104
|
selectedColumn: _column,
|
|
105
105
|
disableCancel: !_isValueShown,
|
|
106
106
|
isValueShown: _isValueShown,
|