@deephaven/dashboard-core-plugins 0.18.1-grpc-file-storage.10 → 0.19.1-alpha-demo.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AA6B9B,oBAAY,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAErC;AAED,eAAO,MAAM,aAAa,UACjB,QAAQ,kBAAkB,CAAC,KACjC,WAybF,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ConsolePlugin.d.ts","sourceRoot":"","sources":["../src/ConsolePlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAGL,6BAA6B,EAI7B,oBAAoB,EAGrB,MAAM,sBAAsB,CAAC;AA6B9B,oBAAY,kBAAkB,GAAG,6BAA6B,GAAG;IAC/D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACjC,OAAO,CAAC,KAAK,IAAI,kBAAkB,CAErC;AAED,eAAO,MAAM,aAAa,UACjB,QAAQ,kBAAkB,CAAC,KACjC,WAycF,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,4 +1,10 @@
1
- import { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ import { assertIsDashboardPluginProps, DashboardUtils, LayoutUtils, useListener } from '@deephaven/dashboard';
2
8
  import { FileUtils } from '@deephaven/file-explorer';
3
9
  import Log from '@deephaven/log';
4
10
  import React, { useCallback, useEffect, useRef, useState } from 'react';
@@ -393,12 +399,15 @@ export var ConsolePlugin = props => {
393
399
  createNotebook(session, sessionLanguage, settings);
394
400
  }
395
401
  }, [createNotebook, panelManager]);
402
+ var hydrateNotebook = useCallback((panelProps, panelDashboardId) => DashboardUtils.hydrate(_objectSpread(_objectSpread({}, panelProps), {}, {
403
+ notebooksUrl
404
+ }), panelDashboardId), [notebooksUrl]);
396
405
  useEffect(function registerComponentsAndReturnCleanup() {
397
- var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel)];
406
+ var cleanups = [registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole), registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel), registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel), registerComponent(LogPanel.COMPONENT, LogPanel), registerComponent(NotebookPanel.COMPONENT, NotebookPanel, hydrateNotebook)];
398
407
  return () => {
399
408
  cleanups.forEach(cleanup => cleanup());
400
409
  };
401
- }, [registerComponent, hydrateConsole]);
410
+ }, [registerComponent, hydrateConsole, hydrateNotebook]);
402
411
  useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);
403
412
  useListener(layout.eventHub, ConsoleEvent.SETTINGS_CHANGED, handleSettingsChanged);
404
413
  useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /**\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (!panelId) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n 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) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(NotebookPanel.COMPONENT, NotebookPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","React","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport const ConsolePlugin = (\n props: Partial<ConsolePluginProps>\n): JSX.Element => {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (!extension) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (!panelId) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata, isPreview) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata, isPreview) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (!fileMetadata || !fileMetadata.id) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /**\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (!panelId) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component',\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n 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) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (session, sessionLanguage, settings, fileMetadata, shouldFocus = false) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (settings && settings.value && notebookPanel.notebook) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return <></>;\n};\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare class MockFileStorageTable implements FileStorageTable {
6
6
  constructor(items: FileStorageItem[]);
7
7
  setSearch(search: string): void;
8
8
  setExpanded(path: string, expanded: boolean): Promise<void>;
9
+ collapseAll(): Promise<void>;
9
10
  getViewportData(): Promise<ViewportData<FileStorageItem>>;
10
11
  getSnapshot(sortedRanges: IndexRange[]): Promise<StorageSnapshot<FileStorageItem>>;
11
12
  setViewport(viewport: StorageTableViewport): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"MockFileStorageTable.d.ts","sourceRoot":"","sources":["../../src/panels/MockFileStorageTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,gBAAgB,CAAC,CAA0C;gBAEvD,KAAK,EAAE,eAAe,EAAE;IAKpC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAOnD,WAAW,CACf,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAItC,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAI/C,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI;IAI3C,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,QAAQ,CACN,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAChD,sBAAsB;IAKzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"MockFileStorageTable.d.ts","sourceRoot":"","sources":["../../src/panels/MockFileStorageTable.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,gBAAgB,CAAC,CAA0C;gBAEvD,KAAK,EAAE,eAAe,EAAE;IAKpC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAOnD,WAAW,CACf,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAItC,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAI/C,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI;IAI3C,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,QAAQ,CACN,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAChD,sBAAsB;IAKzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAe,oBAAoB,CAAC"}
@@ -4,6 +4,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
4
4
 
5
5
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
6
 
7
+ import { isDirectory } from '@deephaven/file-explorer';
7
8
  export class MockFileStorageTable {
8
9
  constructor(items) {
9
10
  _defineProperty(this, "items", void 0);
@@ -19,6 +20,29 @@ export class MockFileStorageTable {
19
20
  }
20
21
 
21
22
  setExpanded(path, expanded) {
23
+ // only sets expansion for the FileExplorer in NewItemModal
24
+ if (path.charAt(path.length - 1) === '/') {
25
+ for (var i = 0; i < this.items.length; i += 1) {
26
+ var item = this.items[i];
27
+
28
+ if (isDirectory(item) && ("".concat(item.filename, "/") === path || item.filename === path)) {
29
+ item.isExpanded = expanded;
30
+ }
31
+ }
32
+ }
33
+
34
+ return Promise.resolve();
35
+ }
36
+
37
+ collapseAll() {
38
+ for (var i = 0; i < this.items.length; i += 1) {
39
+ var item = this.items[i];
40
+
41
+ if (isDirectory(item)) {
42
+ item.isExpanded = false;
43
+ }
44
+ }
45
+
22
46
  return Promise.resolve();
23
47
  }
24
48
 
@@ -1 +1 @@
1
- {"version":3,"file":"MockFileStorageTable.js","names":["MockFileStorageTable","constructor","items","setSearch","search","setExpanded","path","expanded","Promise","resolve","getViewportData","offset","getSnapshot","sortedRanges","Error","setViewport","viewport","loadedViewportData","onUpdateCallback","setFilters","config","setSorts","setReversed","isReversed","close","onUpdate","callback","jest","fn","size","length"],"sources":["../../src/panels/MockFileStorageTable.ts"],"sourcesContent":["import { FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';\nimport {\n ViewportData,\n IndexRange,\n StorageSnapshot,\n StorageTableViewport,\n FilterConfig,\n SortConfig,\n ViewportUpdateCallback,\n StorageListenerRemover,\n} from '@deephaven/storage';\n\nexport class MockFileStorageTable implements FileStorageTable {\n private items: FileStorageItem[];\n\n private onUpdateCallback?: ViewportUpdateCallback<FileStorageItem>;\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search: string): void {\n // no-op\n }\n\n setExpanded(path: string, expanded: boolean): Promise<void> {\n return Promise.resolve();\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n return Promise.resolve({\n items: this.items, // Fill in with mock items\n offset: 0,\n });\n }\n\n async getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n async setViewport(viewport: StorageTableViewport): Promise<void> {\n const loadedViewportData = await this.getViewportData();\n this.onUpdateCallback?.(loadedViewportData);\n }\n\n setFilters(config: FilterConfig[] | null): void {\n // no-op\n }\n\n setSorts(config: SortConfig[] | null): void {\n // no-op\n }\n\n setReversed(isReversed: boolean): void {\n // no-op\n }\n\n close(): void {\n // no-op\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n\n get size(): number {\n return this.items.length;\n }\n}\n\nexport default MockFileStorageTable;\n"],"mappings":";;;;;;AAYA,OAAO,MAAMA,oBAAN,CAAuD;EAK5DC,WAAW,CAACC,KAAD,EAA2B;IAAA;;IAAA;;IACpC,KAAKA,KAAL,GAAaA,KAAb;EACD;EAED;;;EACAC,SAAS,CAACC,MAAD,EAAuB,CAC9B;EACD;;EAEDC,WAAW,CAACC,IAAD,EAAeC,QAAf,EAAiD;IAC1D,OAAOC,OAAO,CAACC,OAAR,EAAP;EACD;;EAEDC,eAAe,GAA2C;IACxD,OAAOF,OAAO,CAACC,OAAR,CAAgB;MACrBP,KAAK,EAAE,KAAKA,KADS;MACF;MACnBS,MAAM,EAAE;IAFa,CAAhB,CAAP;EAID;;EAEKC,WAAW,CACfC,YADe,EAE4B;IAAA;MAC3C,MAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;IAD2C;EAE5C;;EAEKC,WAAW,CAACC,QAAD,EAAgD;IAAA;;IAAA;MAAA;;MAC/D,IAAMC,kBAAkB,SAAS,KAAI,CAACP,eAAL,EAAjC;MACA,8BAAI,CAACQ,gBAAL,0FAAI,EAAoBD,kBAApB,CAAJ;IAF+D;EAGhE;;EAEDE,UAAU,CAACC,MAAD,EAAsC,CAC9C;EACD;;EAEDC,QAAQ,CAACD,MAAD,EAAoC,CAC1C;EACD;;EAEDE,WAAW,CAACC,UAAD,EAA4B,CACrC;EACD;;EAEDC,KAAK,GAAS,CACZ;EACD;;EAEDC,QAAQ,CACNC,QADM,EAEkB;IACxB,KAAKR,gBAAL,GAAwBQ,QAAxB;IACA,OAAOC,IAAI,CAACC,EAAL,EAAP;EACD;;EAEO,IAAJC,IAAI,GAAW;IACjB,OAAO,KAAK3B,KAAL,CAAW4B,MAAlB;EACD;;AA7D2D;AAgE9D,eAAe9B,oBAAf"}
1
+ {"version":3,"file":"MockFileStorageTable.js","names":["isDirectory","MockFileStorageTable","constructor","items","setSearch","search","setExpanded","path","expanded","charAt","length","i","item","filename","isExpanded","Promise","resolve","collapseAll","getViewportData","offset","getSnapshot","sortedRanges","Error","setViewport","viewport","loadedViewportData","onUpdateCallback","setFilters","config","setSorts","setReversed","isReversed","close","onUpdate","callback","jest","fn","size"],"sources":["../../src/panels/MockFileStorageTable.ts"],"sourcesContent":["import {\n FileStorageItem,\n FileStorageTable,\n isDirectory,\n} from '@deephaven/file-explorer';\nimport {\n ViewportData,\n IndexRange,\n StorageSnapshot,\n StorageTableViewport,\n FilterConfig,\n SortConfig,\n ViewportUpdateCallback,\n StorageListenerRemover,\n} from '@deephaven/storage';\n\nexport class MockFileStorageTable implements FileStorageTable {\n private items: FileStorageItem[];\n\n private onUpdateCallback?: ViewportUpdateCallback<FileStorageItem>;\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search: string): void {\n // no-op\n }\n\n setExpanded(path: string, expanded: boolean): Promise<void> {\n // only sets expansion for the FileExplorer in NewItemModal\n if (path.charAt(path.length - 1) === '/') {\n for (let i = 0; i < this.items.length; i += 1) {\n const item = this.items[i];\n if (\n isDirectory(item) &&\n (`${item.filename}/` === path || item.filename === path)\n ) {\n item.isExpanded = expanded;\n }\n }\n }\n return Promise.resolve();\n }\n\n collapseAll(): Promise<void> {\n for (let i = 0; i < this.items.length; i += 1) {\n const item = this.items[i];\n if (isDirectory(item)) {\n item.isExpanded = false;\n }\n }\n return Promise.resolve();\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n return Promise.resolve({\n items: this.items, // Fill in with mock items\n offset: 0,\n });\n }\n\n async getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n async setViewport(viewport: StorageTableViewport): Promise<void> {\n const loadedViewportData = await this.getViewportData();\n this.onUpdateCallback?.(loadedViewportData);\n }\n\n setFilters(config: FilterConfig[] | null): void {\n // no-op\n }\n\n setSorts(config: SortConfig[] | null): void {\n // no-op\n }\n\n setReversed(isReversed: boolean): void {\n // no-op\n }\n\n close(): void {\n // no-op\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n\n get size(): number {\n return this.items.length;\n }\n}\n\nexport default MockFileStorageTable;\n"],"mappings":";;;;;;AAAA,SAGEA,WAHF,QAIO,0BAJP;AAgBA,OAAO,MAAMC,oBAAN,CAAuD;EAK5DC,WAAW,CAACC,KAAD,EAA2B;IAAA;;IAAA;;IACpC,KAAKA,KAAL,GAAaA,KAAb;EACD;EAED;;;EACAC,SAAS,CAACC,MAAD,EAAuB,CAC9B;EACD;;EAEDC,WAAW,CAACC,IAAD,EAAeC,QAAf,EAAiD;IAC1D;IACA,IAAID,IAAI,CAACE,MAAL,CAAYF,IAAI,CAACG,MAAL,GAAc,CAA1B,MAAiC,GAArC,EAA0C;MACxC,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKR,KAAL,CAAWO,MAA/B,EAAuCC,CAAC,IAAI,CAA5C,EAA+C;QAC7C,IAAMC,IAAI,GAAG,KAAKT,KAAL,CAAWQ,CAAX,CAAb;;QACA,IACEX,WAAW,CAACY,IAAD,CAAX,KACC,UAAGA,IAAI,CAACC,QAAR,WAAwBN,IAAxB,IAAgCK,IAAI,CAACC,QAAL,KAAkBN,IADnD,CADF,EAGE;UACAK,IAAI,CAACE,UAAL,GAAkBN,QAAlB;QACD;MACF;IACF;;IACD,OAAOO,OAAO,CAACC,OAAR,EAAP;EACD;;EAEDC,WAAW,GAAkB;IAC3B,KAAK,IAAIN,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKR,KAAL,CAAWO,MAA/B,EAAuCC,CAAC,IAAI,CAA5C,EAA+C;MAC7C,IAAMC,IAAI,GAAG,KAAKT,KAAL,CAAWQ,CAAX,CAAb;;MACA,IAAIX,WAAW,CAACY,IAAD,CAAf,EAAuB;QACrBA,IAAI,CAACE,UAAL,GAAkB,KAAlB;MACD;IACF;;IACD,OAAOC,OAAO,CAACC,OAAR,EAAP;EACD;;EAEDE,eAAe,GAA2C;IACxD,OAAOH,OAAO,CAACC,OAAR,CAAgB;MACrBb,KAAK,EAAE,KAAKA,KADS;MACF;MACnBgB,MAAM,EAAE;IAFa,CAAhB,CAAP;EAID;;EAEKC,WAAW,CACfC,YADe,EAE4B;IAAA;MAC3C,MAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;IAD2C;EAE5C;;EAEKC,WAAW,CAACC,QAAD,EAAgD;IAAA;;IAAA;MAAA;;MAC/D,IAAMC,kBAAkB,SAAS,KAAI,CAACP,eAAL,EAAjC;MACA,8BAAI,CAACQ,gBAAL,0FAAI,EAAoBD,kBAApB,CAAJ;IAF+D;EAGhE;;EAEDE,UAAU,CAACC,MAAD,EAAsC,CAC9C;EACD;;EAEDC,QAAQ,CAACD,MAAD,EAAoC,CAC1C;EACD;;EAEDE,WAAW,CAACC,UAAD,EAA4B,CACrC;EACD;;EAEDC,KAAK,GAAS,CACZ;EACD;;EAEDC,QAAQ,CACNC,QADM,EAEkB;IACxB,KAAKR,gBAAL,GAAwBQ,QAAxB;IACA,OAAOC,IAAI,CAACC,EAAL,EAAP;EACD;;EAEO,IAAJC,IAAI,GAAW;IACjB,OAAO,KAAKlC,KAAL,CAAWO,MAAlB;EACD;;AAnF2D;AAsF9D,eAAeT,oBAAf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.18.1-grpc-file-storage.10+283f090",
3
+ "version": "0.19.1-alpha-demo.1+d61a265",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,21 +30,21 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/chart": "^0.18.1-grpc-file-storage.10+283f090",
34
- "@deephaven/components": "^0.18.1-grpc-file-storage.10+283f090",
35
- "@deephaven/console": "^0.18.1-grpc-file-storage.10+283f090",
36
- "@deephaven/dashboard": "^0.18.1-grpc-file-storage.10+283f090",
37
- "@deephaven/file-explorer": "^0.18.1-grpc-file-storage.10+283f090",
38
- "@deephaven/golden-layout": "^0.18.1-grpc-file-storage.10+283f090",
39
- "@deephaven/grid": "^0.18.1-grpc-file-storage.10+283f090",
40
- "@deephaven/icons": "^0.18.1-grpc-file-storage.10+283f090",
41
- "@deephaven/iris-grid": "^0.18.1-grpc-file-storage.10+283f090",
42
- "@deephaven/jsapi-shim": "^0.18.1-grpc-file-storage.10+283f090",
43
- "@deephaven/jsapi-utils": "^0.18.1-grpc-file-storage.10+283f090",
44
- "@deephaven/log": "^0.18.1-grpc-file-storage.10+283f090",
45
- "@deephaven/redux": "^0.18.1-grpc-file-storage.10+283f090",
46
- "@deephaven/storage": "^0.18.1-grpc-file-storage.10+283f090",
47
- "@deephaven/utils": "^0.18.1-grpc-file-storage.10+283f090",
33
+ "@deephaven/chart": "^0.19.1-alpha-demo.1+d61a265",
34
+ "@deephaven/components": "^0.19.1-alpha-demo.1+d61a265",
35
+ "@deephaven/console": "^0.19.1-alpha-demo.1+d61a265",
36
+ "@deephaven/dashboard": "^0.19.1-alpha-demo.1+d61a265",
37
+ "@deephaven/file-explorer": "^0.19.1-alpha-demo.1+d61a265",
38
+ "@deephaven/golden-layout": "^0.19.1-alpha-demo.1+d61a265",
39
+ "@deephaven/grid": "^0.19.1-alpha-demo.1+d61a265",
40
+ "@deephaven/icons": "^0.19.1-alpha-demo.1+d61a265",
41
+ "@deephaven/iris-grid": "^0.19.1-alpha-demo.1+d61a265",
42
+ "@deephaven/jsapi-shim": "^0.19.1-alpha-demo.1+d61a265",
43
+ "@deephaven/jsapi-utils": "^0.19.1-alpha-demo.1+d61a265",
44
+ "@deephaven/log": "^0.19.1-alpha-demo.1+d61a265",
45
+ "@deephaven/redux": "^0.19.1-alpha-demo.1+d61a265",
46
+ "@deephaven/storage": "^0.19.1-alpha-demo.1+d61a265",
47
+ "@deephaven/utils": "^0.19.1-alpha-demo.1+d61a265",
48
48
  "@fortawesome/react-fontawesome": "^0.1.18",
49
49
  "classnames": "^2.3.1",
50
50
  "deep-equal": "^2.0.5",
@@ -66,8 +66,8 @@
66
66
  "react-redux": "^7.2.4"
67
67
  },
68
68
  "devDependencies": {
69
- "@deephaven/mocks": "^0.18.1-grpc-file-storage.10+283f090",
70
- "@deephaven/tsconfig": "^0.18.1-grpc-file-storage.10+283f090"
69
+ "@deephaven/mocks": "^0.19.1-alpha-demo.1+d61a265",
70
+ "@deephaven/tsconfig": "^0.19.1-alpha-demo.1+d61a265"
71
71
  },
72
72
  "files": [
73
73
  "dist"
@@ -75,5 +75,5 @@
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  },
78
- "gitHead": "283f090f486ed6f4e78ace9da59ec201ba8f34f0"
78
+ "gitHead": "d61a265d640c4501d6daec2ac74b0c2f398c6db4"
79
79
  }