@deephaven/dashboard-core-plugins 0.50.1-beta.5 → 0.51.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.js.map +1 -1
- package/dist/ChartPlugin.js +1 -1
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/WidgetLoaderPlugin.d.ts.map +1 -1
- package/dist/WidgetLoaderPlugin.js +1 -2
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js +3 -0
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +2 -2
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +0 -1
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.js +4 -0
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/IrisGridPanelTypes.js.map +1 -1
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/MockFileStorage.js.map +1 -1
- package/dist/panels/MockFileStorageTable.js.map +1 -1
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/dist/useHydrateGrid.d.ts.map +1 -1
- package/dist/useHydrateGrid.js +2 -1
- package/dist/useHydrateGrid.js.map +1 -1
- package/dist/useLoadTablePlugin.d.ts +8 -0
- package/dist/useLoadTablePlugin.d.ts.map +1 -0
- package/dist/useLoadTablePlugin.js +30 -0
- package/dist/useLoadTablePlugin.js.map +1 -0
- package/package.json +24 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","useApi","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","dh","handleCreateChart","metadata","panelId","generate","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 { Table } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\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 const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: ChartModelSettings;\n sourcePanelId: string;\n table: string;\n };\n panelId?: string;\n table: 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,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAAA,SACbC,UAAU;AAInB;AACA;AACA;AACA;AACA,OAAO,SAASC,
|
|
1
|
+
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","useApi","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","dh","handleCreateChart","_ref","metadata","panelId","generate","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 { Table } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\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 const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: ChartModelSettings;\n sourcePanelId: string;\n table: string;\n };\n panelId?: string;\n table: 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,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,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;EACnB,IAAMS,iBAAiB,GAAGf,WAAW,CACnCgB,IAAA,IAYM;IAAA,IAZL;MACCC,QAAQ;MACRC,OAAO,GAAGX,OAAO,CAACY,QAAQ,CAAC,CAAC;MAC5BC;IASF,CAAC,GAAAJ,IAAA;IACC,IAAM;MAAEK;IAAS,CAAC,GAAGJ,QAAQ;IAC7B,IAAMK,SAAS,GAAGA,CAAA,KAChBrB,iBAAiB,CAACsB,qBAAqB,CAACT,EAAE,EAAEO,QAAQ,EAAED,KAAK,CAAC;IAC9D,IAAMI,KAAK,GAAGtB,UAAU,CAACuB,iBAAiB,CAACJ,QAAQ,CAAC;IAEpD,IAAMK,MAAM,GAAG;MACbC,IAAI,EAAE,iBAA0B;MAChCC,SAAS,EAAEnB,UAAU,CAACoB,SAAS;MAC/BlB,KAAK,EAAE;QACLmB,gBAAgB,EAAElB,EAAE;QACpBA,EAAE,EAAEM,OAAO;QACXD,QAAQ;QACRK;MACF,CAAC;MACDE,KAAK;MACLZ,EAAE,EAAEM;IACN,CAAC;IAED,IAAM;MAAEa;IAAK,CAAC,GAAGlB,MAAM;IACvBT,WAAW,CAAC4B,aAAa,CAAC;MAAED,IAAI;MAAEL;IAAO,CAAC,CAAC;EAC7C,CAAC,EACD,CAACZ,EAAE,EAAEF,EAAE,EAAEC,MAAM,CACjB,CAAC;EAEDR,WAAW,CAACQ,MAAM,CAACoB,QAAQ,EAAEzB,aAAa,CAAC0B,YAAY,EAAEnB,iBAAiB,CAAC;EAE3E,OAAO,IAAI;AACb;AAEA,eAAeL,kBAAkB"}
|
package/dist/ChartPlugin.js
CHANGED
|
@@ -8,7 +8,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
8
8
|
import { useCallback } from 'react';
|
|
9
9
|
import { assertIsDashboardPluginProps, useDashboardPanel } from '@deephaven/dashboard';
|
|
10
10
|
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
11
|
-
import { useConnection } from '@deephaven/
|
|
11
|
+
import { useConnection } from '@deephaven/jsapi-components';
|
|
12
12
|
import { ChartModelFactory } from '@deephaven/chart';
|
|
13
13
|
import { IrisGridUtils } from '@deephaven/iris-grid';
|
|
14
14
|
import { getTimeZone, store } from '@deephaven/redux';
|
package/dist/ChartPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPlugin.js","names":["useCallback","assertIsDashboardPluginProps","useDashboardPanel","useApi","useConnection","ChartModelFactory","IrisGridUtils","getTimeZone","store","ChartPanel","isChartPanelDehydratedProps","isChartPanelTableMetadata","createChartModel","dh","connection","metadata","panelState","settings","tableName","figureName","tableSettings","table","undefined","name","figure","definition","title","type","VariableType","FIGURE","getObject","makeModel","TABLE","applyTableSettings","getState","makeModelFromSettings","ChartPlugin","props","hydrate","hydrateProps","id","localDashboardId","Error","dashboardProps","componentName","COMPONENT","component","supportedTypes"],"sources":["../src/ChartPlugin.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n DehydratedDashboardPanelProps,\n useDashboardPanel,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/
|
|
1
|
+
{"version":3,"file":"ChartPlugin.js","names":["useCallback","assertIsDashboardPluginProps","useDashboardPanel","useApi","useConnection","ChartModelFactory","IrisGridUtils","getTimeZone","store","ChartPanel","isChartPanelDehydratedProps","isChartPanelTableMetadata","createChartModel","_x","_x2","_x3","_x4","_createChartModel","apply","arguments","_asyncToGenerator","dh","connection","metadata","panelState","settings","tableName","figureName","tableSettings","table","undefined","_metadata$name","name","figure","_objectSpread","definition","title","type","VariableType","FIGURE","getObject","makeModel","TABLE","applyTableSettings","getState","makeModelFromSettings","ChartPlugin","props","hydrate","hydrateProps","id","localDashboardId","Error","dashboardProps","componentName","COMPONENT","component","supportedTypes"],"sources":["../src/ChartPlugin.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n DehydratedDashboardPanelProps,\n useDashboardPanel,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { ChartModel, ChartModelFactory } from '@deephaven/chart';\nimport type { dh as DhType, IdeConnection } from '@deephaven/jsapi-types';\nimport { IrisGridUtils } from '@deephaven/iris-grid';\nimport { getTimeZone, store } from '@deephaven/redux';\nimport {\n ChartPanel,\n ChartPanelMetadata,\n GLChartPanelState,\n isChartPanelDehydratedProps,\n isChartPanelTableMetadata,\n} from './panels';\n\nasync function createChartModel(\n dh: DhType,\n connection: IdeConnection,\n metadata: ChartPanelMetadata,\n panelState?: GLChartPanelState\n): Promise<ChartModel> {\n let settings;\n let tableName;\n let figureName;\n let tableSettings;\n\n if (isChartPanelTableMetadata(metadata)) {\n settings = metadata.settings;\n tableName = metadata.table;\n figureName = undefined;\n tableSettings = metadata.tableSettings;\n } else {\n settings = {};\n tableName = '';\n figureName = metadata.name ?? metadata.figure;\n tableSettings = {};\n }\n if (panelState != null) {\n if (panelState.tableSettings != null) {\n tableSettings = panelState.tableSettings;\n }\n if (panelState.table != null) {\n tableName = panelState.table;\n }\n if (panelState.figure != null) {\n figureName = panelState.figure;\n }\n if (panelState.settings != null) {\n settings = {\n ...settings,\n ...panelState.settings,\n };\n }\n }\n\n if (figureName != null) {\n const definition = {\n title: figureName,\n name: figureName,\n type: dh.VariableType.FIGURE,\n };\n const figure = await connection.getObject(definition);\n\n return ChartModelFactory.makeModel(dh, settings, figure);\n }\n\n const definition = {\n title: figureName,\n name: tableName,\n type: dh.VariableType.TABLE,\n };\n const table = await connection.getObject(definition);\n new IrisGridUtils(dh).applyTableSettings(\n table,\n tableSettings,\n getTimeZone(store.getState())\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return ChartModelFactory.makeModelFromSettings(dh, settings as any, table);\n}\n\nexport function ChartPlugin(\n props: DashboardPluginComponentProps\n): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const dh = useApi();\n const connection = useConnection();\n\n const hydrate = useCallback(\n (hydrateProps: DehydratedDashboardPanelProps, id: string) => ({\n ...hydrateProps,\n localDashboardId: id,\n makeModel: () => {\n const { metadata } = hydrateProps;\n const panelState = isChartPanelDehydratedProps(hydrateProps)\n ? hydrateProps.panelState\n : undefined;\n if (metadata == null) {\n throw new Error('Metadata is required for chart panel');\n }\n\n return createChartModel(dh, connection, metadata, panelState);\n },\n }),\n [dh, connection]\n );\n\n useDashboardPanel({\n dashboardProps: props,\n componentName: ChartPanel.COMPONENT,\n component: ChartPanel,\n supportedTypes: dh.VariableType.FIGURE,\n hydrate,\n });\n\n return null;\n}\n\nexport default ChartPlugin;\n"],"mappings":"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"}
|
|
@@ -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","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","options","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewId","values","Error","getStackForConfig","item","getContentItemInStack","container","emit","PROMOTE_FROM_PREVIEW","sendToNotebook","notebookPanel","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","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","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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"}
|
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","title","metadata","panelState","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","config","component","COMPONENT","root","openComponent","handleOpenInput","undefined","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 = 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":"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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","_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"}
|
package/dist/GridPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.js","names":["useMemo","assertIsDashboardPluginProps","useDashboardPanel","useApi","IrisGridPanel","useHydrateGrid","GridPlugin","props","dh","hydrate","supportedTypes","VariableType","TABLE","TREETABLE","HIERARCHICALTABLE","dashboardProps","componentName","COMPONENT","component"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n useDashboardPanel,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport function GridPlugin(\n props: DashboardPluginComponentProps\n): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const dh = useApi();\n const hydrate = useHydrateGrid();\n\n const supportedTypes = useMemo(\n () => [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n ],\n [dh]\n );\n\n useDashboardPanel({\n dashboardProps: props,\n componentName: IrisGridPanel.COMPONENT,\n component: IrisGridPanel,\n supportedTypes,\n hydrate,\n });\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SACEC,4BAA4B,EAE5BC,iBAAiB,QACZ,sBAAsB;AAC7B,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAC3CC,aAAa;AAAA,OACfC,cAAc;AAErB,OAAO,SAASC,
|
|
1
|
+
{"version":3,"file":"GridPlugin.js","names":["useMemo","assertIsDashboardPluginProps","useDashboardPanel","useApi","IrisGridPanel","useHydrateGrid","GridPlugin","props","dh","hydrate","supportedTypes","VariableType","TABLE","TREETABLE","HIERARCHICALTABLE","dashboardProps","componentName","COMPONENT","component"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n useDashboardPanel,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport function GridPlugin(\n props: DashboardPluginComponentProps\n): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const dh = useApi();\n const hydrate = useHydrateGrid();\n\n const supportedTypes = useMemo(\n () => [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n ],\n [dh]\n );\n\n useDashboardPanel({\n dashboardProps: props,\n componentName: IrisGridPanel.COMPONENT,\n component: IrisGridPanel,\n supportedTypes,\n hydrate,\n });\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SACEC,4BAA4B,EAE5BC,iBAAiB,QACZ,sBAAsB;AAC7B,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAC3CC,aAAa;AAAA,OACfC,cAAc;AAErB,OAAO,SAASC,UAAUA,CACxBC,KAAoC,EAChB;EACpBN,4BAA4B,CAACM,KAAK,CAAC;EACnC,IAAMC,EAAE,GAAGL,MAAM,CAAC,CAAC;EACnB,IAAMM,OAAO,GAAGJ,cAAc,CAAC,CAAC;EAEhC,IAAMK,cAAc,GAAGV,OAAO,CAC5B,MAAM,CACJQ,EAAE,CAACG,YAAY,CAACC,KAAK,EACrBJ,EAAE,CAACG,YAAY,CAACE,SAAS,EACzBL,EAAE,CAACG,YAAY,CAACG,iBAAiB,CAClC,EACD,CAACN,EAAE,CACL,CAAC;EAEDN,iBAAiB,CAAC;IAChBa,cAAc,EAAER,KAAK;IACrBS,aAAa,EAAEZ,aAAa,CAACa,SAAS;IACtCC,SAAS,EAAEd,aAAa;IACxBM,cAAc;IACdD;EACF,CAAC,CAAC;EAEF,OAAO,IAAI;AACb;AAEA,eAAeH,UAAU"}
|
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 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;AAAA;AAIb,OAAO,SAASC,
|
|
1
|
+
{"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","jsx","_jsx","LinkerPlugin","props","id","layout","panelManager","localDashboardId"],"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;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAIb,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClEL,4BAA4B,CAACK,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC,MAAM;IAAEC;EAAa,CAAC,GAAGH,KAAK;EAC1C,oBACEF,IAAA,CAACF,MAAM;IAACM,MAAM,EAAEA,MAAO;IAACE,gBAAgB,EAAEH,EAAG;IAACE,YAAY,EAAEA;EAAa,CAAE,CAAC;AAEhF;AAEA,eAAeJ,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","shortid","assertIsDashboardPluginProps","dehydrate","hydrate","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","dehydrateMarkdown","config","title","componentState","configProps","panelState","content","length","DEFAULT_CONTENT","handleOpen","metadata","panelId","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","closedMarkdowns","getClosedPanelConfigsOfType","usedTitles","map","markdown","panelTitle","getNewMarkdownTitle","type","component","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n dehydrate,\n hydrate,\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 const dehydrateMarkdown = useCallback(config => {\n const { title, componentState, props: configProps } = config;\n let { panelState = null }: MarkdownComponentState = configProps;\n if (componentState != null) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n title == null ||\n panelState == null ||\n panelState.content == null ||\n panelState.content.length === 0 ||\n panelState.content === MarkdownUtils.DEFAULT_CONTENT\n ) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const closedMarkdowns = panelManager.getClosedPanelConfigsOfType(\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 =\n closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\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(\n MarkdownPanel.COMPONENT,\n MarkdownPanel,\n hydrate,\n dehydrateMarkdown\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [dehydrateMarkdown, 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,OAAOC,OAAO,MAAM,SAAS;AAC7B,SACEC,4BAA4B,EAE5BC,SAAS,EACTC,OAAO,EACPC,WAAW,EACXC,WAAW,QACN,sBAAsB;AAAC,SACrBC,aAAa;AAAA,OACfC,aAAa;AAAA,OACbC,aAAa;AAQpB,OAAO,SAASC,
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","shortid","assertIsDashboardPluginProps","dehydrate","hydrate","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","dehydrateMarkdown","config","title","componentState","configProps","panelState","content","length","DEFAULT_CONTENT","handleOpen","metadata","panelId","generate","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","arguments","undefined","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","closedMarkdowns","getClosedPanelConfigsOfType","usedTitles","map","markdown","_markdown$title","panelTitle","getNewMarkdownTitle","type","component","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n dehydrate,\n hydrate,\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 const dehydrateMarkdown = useCallback(config => {\n const { title, componentState, props: configProps } = config;\n let { panelState = null }: MarkdownComponentState = configProps;\n if (componentState != null) {\n ({ panelState = null } = componentState as MarkdownComponentState);\n }\n if (\n title == null ||\n panelState == null ||\n panelState.content == null ||\n panelState.content.length === 0 ||\n panelState.content === MarkdownUtils.DEFAULT_CONTENT\n ) {\n // We don't want to save it if there's no content\n return null;\n }\n return dehydrate(config);\n }, []);\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = shortid.generate(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = null,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const closedMarkdowns = panelManager.getClosedPanelConfigsOfType(\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 =\n closedMarkdowns.length > 0 ? null : MarkdownUtils.DEFAULT_CONTENT;\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(\n MarkdownPanel.COMPONENT,\n MarkdownPanel,\n hydrate,\n dehydrateMarkdown\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [dehydrateMarkdown, registerComponent]\n );\n\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n\n return null;\n}\n\nexport default MarkdownPlugin;\n"],"mappings":"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"}
|
package/dist/PandasPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPlugin.js","names":["forwardRef","useMemo","PandasPanel","useHydrateGrid","PandasPlugin","props","ref","hydrate","localDashboardId","hydratedProps","displayName"],"sources":["../src/PandasPlugin.tsx"],"sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport { WidgetComponentProps } from '@deephaven/plugin';\nimport { forwardRef, useMemo } from 'react';\nimport { PandasPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport const PandasPlugin = forwardRef(\n (props: WidgetComponentProps, ref: React.Ref<PandasPanel>) => {\n const hydrate = useHydrateGrid<DashboardPanelProps>();\n const { localDashboardId } = props;\n const hydratedProps = useMemo(\n () => hydrate(props, localDashboardId),\n [hydrate, props, localDashboardId]\n );\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <PandasPanel ref={ref} {...hydratedProps} />;\n }\n);\n\nPandasPlugin.displayName = 'PandasPlugin';\n\nexport default PandasPlugin;\n"],"mappings":";;;;;AAEA,SAASA,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAAC,SACnCC,WAAW;AAAA,OACbC,cAAc;AAAA;AAErB,OAAO,IAAMC,YAAY,
|
|
1
|
+
{"version":3,"file":"PandasPlugin.js","names":["forwardRef","useMemo","PandasPanel","useHydrateGrid","jsx","_jsx","PandasPlugin","props","ref","hydrate","localDashboardId","hydratedProps","_objectSpread","displayName"],"sources":["../src/PandasPlugin.tsx"],"sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport { WidgetComponentProps } from '@deephaven/plugin';\nimport { forwardRef, useMemo } from 'react';\nimport { PandasPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport const PandasPlugin = forwardRef(\n (props: WidgetComponentProps, ref: React.Ref<PandasPanel>) => {\n const hydrate = useHydrateGrid<DashboardPanelProps>();\n const { localDashboardId } = props;\n const hydratedProps = useMemo(\n () => hydrate(props, localDashboardId),\n [hydrate, props, localDashboardId]\n );\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <PandasPanel ref={ref} {...hydratedProps} />;\n }\n);\n\nPandasPlugin.displayName = 'PandasPlugin';\n\nexport default PandasPlugin;\n"],"mappings":";;;;;AAEA,SAASA,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAAC,SACnCC,WAAW;AAAA,OACbC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAErB,OAAO,IAAMC,YAAY,gBAAGN,UAAU,CACpC,CAACO,KAA2B,EAAEC,GAA2B,KAAK;EAC5D,IAAMC,OAAO,GAAGN,cAAc,CAAsB,CAAC;EACrD,IAAM;IAAEO;EAAiB,CAAC,GAAGH,KAAK;EAClC,IAAMI,aAAa,GAAGV,OAAO,CAC3B,MAAMQ,OAAO,CAACF,KAAK,EAAEG,gBAAgB,CAAC,EACtC,CAACD,OAAO,EAAEF,KAAK,EAAEG,gBAAgB,CACnC,CAAC;;EAED;EACA,oBAAOL,IAAA,CAACH,WAAW,EAAAU,aAAA;IAACJ,GAAG,EAAEA;EAAI,GAAKG,aAAa,CAAG,CAAC;AACrD,CACF,CAAC;AAEDL,YAAY,CAACO,WAAW,GAAG,cAAc;AAEzC,eAAeP,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetLoaderPlugin.d.ts","sourceRoot":"","sources":["../src/WidgetLoaderPlugin.tsx"],"names":[],"mappings":";AAUA,OAAO,EAEL,6BAA6B,EAM7B,UAAU,EAEX,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"WidgetLoaderPlugin.d.ts","sourceRoot":"","sources":["../src/WidgetLoaderPlugin.tsx"],"names":[],"mappings":";AAUA,OAAO,EAEL,6BAA6B,EAM7B,UAAU,EAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAM3B,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GACnB,KAAK,CAAC,yBAAyB,CAAC,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAmD5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,CAAC,6BAA6B,CAAC,GAC5C,GAAG,CAAC,OAAO,GAAG,IAAI,CAqFpB;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -6,8 +6,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
6
6
|
import { useMemo, useCallback, useEffect, forwardRef, useState } from 'react';
|
|
7
7
|
import shortid from 'shortid';
|
|
8
8
|
import { assertIsDashboardPluginProps, PanelEvent, LayoutUtils, useListener, canHaveRef } from '@deephaven/dashboard';
|
|
9
|
-
import { usePlugins } from '@deephaven/
|
|
10
|
-
import { isWidgetPlugin } from '@deephaven/plugin';
|
|
9
|
+
import { isWidgetPlugin, usePlugins } from '@deephaven/plugin';
|
|
11
10
|
import Log from '@deephaven/log';
|
|
12
11
|
import { WidgetPanel } from "./panels/index.js";
|
|
13
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","useState","shortid","assertIsDashboardPluginProps","PanelEvent","LayoutUtils","useListener","canHaveRef","usePlugins","isWidgetPlugin","Log","WidgetPanel","log","module","WrapWidgetPlugin","plugin","Wrapper","props","ref","C","component","metadata","componentPanel","setComponentPanel","refCallback","e","current","hasRef","name","title","displayName","WidgetLoaderPlugin","plugins","supportedTypes","typeMap","Map","forEach","flat","supportedType","has","warn","get","set","id","layout","registerComponent","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","widgetId","type","panelProps","localDashboardId","config","root","openComponent","deregisterFns","Set","values","map","panelComponent","deregister","eventHub","OPEN"],"sources":["../src/WidgetLoaderPlugin.tsx"],"sourcesContent":["import {\n useMemo,\n useCallback,\n type ComponentType,\n useEffect,\n forwardRef,\n useState,\n} from 'react';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n DehydratedDashboardPanelProps,\n PanelEvent,\n PanelOpenEventDetail,\n LayoutUtils,\n useListener,\n PanelProps,\n canHaveRef,\n} from '@deephaven/dashboard';\nimport { usePlugins } from '@deephaven/app-utils';\nimport { isWidgetPlugin, type WidgetPlugin } from '@deephaven/plugin';\nimport Log from '@deephaven/log';\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 const [componentPanel, setComponentPanel] = useState<ComponentType>();\n const refCallback = useCallback(\n (e: ComponentType) => {\n setComponentPanel(e);\n if (typeof ref === 'function') {\n ref(e);\n } else if (ref != null) {\n // eslint-disable-next-line no-param-reassign\n ref.current = e;\n }\n },\n [ref]\n );\n\n const hasRef = canHaveRef(C);\n\n return (\n <WidgetPanel\n widgetName={metadata?.name}\n widgetType={plugin.title}\n componentPanel={componentPanel}\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={refCallback}\n />\n ) : (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\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 fetch,\n panelId = shortid.generate(),\n widget,\n }: PanelOpenEventDetail) => {\n const { id: widgetId, type } = widget;\n const name = widget.title ?? widget.name;\n const plugin = supportedTypes.get(type);\n if (plugin == null) {\n return;\n }\n const metadata = { id: widgetId, name, type };\n const panelProps: DehydratedDashboardPanelProps & {\n fetch?: typeof fetch;\n } = {\n localDashboardId: id,\n metadata,\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 });\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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"}
|
|
1
|
+
{"version":3,"file":"WidgetLoaderPlugin.js","names":["useMemo","useCallback","useEffect","forwardRef","useState","shortid","assertIsDashboardPluginProps","PanelEvent","LayoutUtils","useListener","canHaveRef","isWidgetPlugin","usePlugins","Log","WidgetPanel","jsx","_jsx","jsxs","_jsxs","log","module","WrapWidgetPlugin","plugin","_plugin$component$dis","Wrapper","props","ref","C","component","metadata","componentPanel","setComponentPanel","refCallback","e","current","hasRef","_objectSpread","widgetName","name","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$title","dragEvent","fetch","panelId","generate","widget","widgetId","type","panelProps","localDashboardId","config","root","openComponent","deregisterFns","Set","values","map","panelComponent","deregister","eventHub","OPEN"],"sources":["../src/WidgetLoaderPlugin.tsx"],"sourcesContent":["import {\n useMemo,\n useCallback,\n type ComponentType,\n useEffect,\n forwardRef,\n useState,\n} from 'react';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport shortid from 'shortid';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n DehydratedDashboardPanelProps,\n PanelEvent,\n PanelOpenEventDetail,\n LayoutUtils,\n useListener,\n PanelProps,\n canHaveRef,\n} from '@deephaven/dashboard';\nimport {\n isWidgetPlugin,\n usePlugins,\n type WidgetPlugin,\n} from '@deephaven/plugin';\nimport Log from '@deephaven/log';\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 const [componentPanel, setComponentPanel] = useState<ComponentType>();\n const refCallback = useCallback(\n (e: ComponentType) => {\n setComponentPanel(e);\n if (typeof ref === 'function') {\n ref(e);\n } else if (ref != null) {\n // eslint-disable-next-line no-param-reassign\n ref.current = e;\n }\n },\n [ref]\n );\n\n const hasRef = canHaveRef(C);\n\n return (\n <WidgetPanel\n widgetName={metadata?.name}\n widgetType={plugin.title}\n componentPanel={componentPanel}\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={refCallback}\n />\n ) : (\n <C\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\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 fetch,\n panelId = shortid.generate(),\n widget,\n }: PanelOpenEventDetail) => {\n const { id: widgetId, type } = widget;\n const name = widget.title ?? widget.name;\n const plugin = supportedTypes.get(type);\n if (plugin == null) {\n return;\n }\n const metadata = { id: widgetId, name, type };\n const panelProps: DehydratedDashboardPanelProps & {\n fetch?: typeof fetch;\n } = {\n localDashboardId: id,\n metadata,\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 });\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControlType.js","names":["ControlType"],"sources":["../../src/controls/ControlType.ts"],"sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n}\n\nexport default ControlType;\n"],"mappings":";;;AAAA,MAAMA,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ControlType.js","names":["ControlType","_defineProperty"],"sources":["../../src/controls/ControlType.ts"],"sourcesContent":["class ControlType {\n static DROPDOWN_FILTER = 'ControlType.DROPDOWN_FILTER';\n\n static INPUT_FILTER = 'ControlType.INPUT_FILTER';\n\n static MARKDOWN = 'ControlType.MARKDOWN';\n\n static FILTER_SET_MANAGER = 'ControlType.FILTER_SET_MANAGER';\n}\n\nexport default ControlType;\n"],"mappings":";;;AAAA,MAAMA,WAAW,CAAC;AAQjBC,eAAA,CARKD,WAAW,qBACU,6BAA6B;AAAAC,eAAA,CADlDD,WAAW,kBAGO,0BAA0B;AAAAC,eAAA,CAH5CD,WAAW,cAKG,sBAAsB;AAAAC,eAAA,CALpCD,WAAW,wBAOa,gCAAgC;AAG9D,eAAeA,WAAW"}
|