@deephaven/dashboard-core-plugins 0.26.2-beta.0 → 0.26.2-beta.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.
Files changed (85) hide show
  1. package/dist/ConsolePlugin.js +3 -1
  2. package/dist/ConsolePlugin.js.map +1 -1
  3. package/dist/controls/ControlType.js +3 -1
  4. package/dist/controls/ControlType.js.map +1 -1
  5. package/dist/controls/dropdown-filter/DropdownFilter.js +3 -1
  6. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  7. package/dist/controls/input-filter/InputFilter.js +3 -1
  8. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  9. package/dist/controls/markdown/MarkdownContainer.js +3 -1
  10. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  11. package/dist/controls/markdown/MarkdownEditor.js +3 -1
  12. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  13. package/dist/controls/markdown/MarkdownStartPage.js +3 -1
  14. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  15. package/dist/controls/markdown/MarkdownUtils.js +3 -1
  16. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  17. package/dist/events/ChartEvent.js +3 -1
  18. package/dist/events/ChartEvent.js.map +1 -1
  19. package/dist/events/ConsoleEvent.js +3 -1
  20. package/dist/events/ConsoleEvent.js.map +1 -1
  21. package/dist/events/InputFilterEvent.js +3 -1
  22. package/dist/events/InputFilterEvent.js.map +1 -1
  23. package/dist/events/IrisGridEvent.js +3 -1
  24. package/dist/events/IrisGridEvent.js.map +1 -1
  25. package/dist/events/NotebookEvent.js +3 -1
  26. package/dist/events/NotebookEvent.js.map +1 -1
  27. package/dist/events/PQEvent.js +3 -1
  28. package/dist/events/PQEvent.js.map +1 -1
  29. package/dist/events/PandasEvent.js +3 -1
  30. package/dist/events/PandasEvent.js.map +1 -1
  31. package/dist/events/TabEvent.js +3 -1
  32. package/dist/events/TabEvent.js.map +1 -1
  33. package/dist/linker/Linker.js +3 -1
  34. package/dist/linker/Linker.js.map +1 -1
  35. package/dist/linker/LinkerLink.js +3 -1
  36. package/dist/linker/LinkerLink.js.map +1 -1
  37. package/dist/linker/LinkerOverlayContent.js +3 -1
  38. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  39. package/dist/linker/LinkerUtils.js +3 -1
  40. package/dist/linker/LinkerUtils.js.map +1 -1
  41. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  42. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  43. package/dist/panels/ChartPanel.js +3 -1
  44. package/dist/panels/ChartPanel.js.map +1 -1
  45. package/dist/panels/CommandHistoryPanel.js +3 -1
  46. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  47. package/dist/panels/ConsolePanel.js +3 -1
  48. package/dist/panels/ConsolePanel.js.map +1 -1
  49. package/dist/panels/DropdownFilterPanel.js +3 -1
  50. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  51. package/dist/panels/FileExplorerPanel.js +3 -1
  52. package/dist/panels/FileExplorerPanel.js.map +1 -1
  53. package/dist/panels/FilterSetManager.js +3 -1
  54. package/dist/panels/FilterSetManager.js.map +1 -1
  55. package/dist/panels/FilterSetManagerPanel.js +3 -1
  56. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  57. package/dist/panels/InputFilterPanel.js +3 -1
  58. package/dist/panels/InputFilterPanel.js.map +1 -1
  59. package/dist/panels/IrisGridPanel.js +3 -1
  60. package/dist/panels/IrisGridPanel.js.map +1 -1
  61. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  62. package/dist/panels/LogPanel.js +3 -1
  63. package/dist/panels/LogPanel.js.map +1 -1
  64. package/dist/panels/MarkdownNotebook.js +3 -1
  65. package/dist/panels/MarkdownNotebook.js.map +1 -1
  66. package/dist/panels/MarkdownPanel.js +3 -1
  67. package/dist/panels/MarkdownPanel.js.map +1 -1
  68. package/dist/panels/MockFileStorage.js +3 -1
  69. package/dist/panels/MockFileStorage.js.map +1 -1
  70. package/dist/panels/MockFileStorageTable.js +3 -1
  71. package/dist/panels/MockFileStorageTable.js.map +1 -1
  72. package/dist/panels/NotebookPanel.js +3 -1
  73. package/dist/panels/NotebookPanel.js.map +1 -1
  74. package/dist/panels/PandasPanel.js +5 -2
  75. package/dist/panels/PandasPanel.js.map +1 -1
  76. package/dist/panels/Panel.js +3 -1
  77. package/dist/panels/Panel.js.map +1 -1
  78. package/dist/panels/PanelContextMenu.js +3 -1
  79. package/dist/panels/PanelContextMenu.js.map +1 -1
  80. package/dist/panels/RenameDialog.js +3 -1
  81. package/dist/panels/RenameDialog.js.map +1 -1
  82. package/dist/panels/WidgetPanel.js +3 -1
  83. package/dist/panels/WidgetPanel.js.map +1 -1
  84. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  85. package/package.json +21 -21
@@ -1,6 +1,8 @@
1
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
2
  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; }
3
- 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; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
6
  import { assertIsDashboardPluginProps, DashboardUtils, LayoutUtils, useListener } from '@deephaven/dashboard';
5
7
  import { FileUtils } from '@deephaven/file-explorer';
6
8
  import Log from '@deephaven/log';
@@ -1 +1 @@
1
- {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConsolePlugin.js","names":["assertIsDashboardPluginProps","DashboardUtils","LayoutUtils","useListener","FileUtils","Log","useCallback","useEffect","useRef","useState","useDispatch","shortid","ConsoleEvent","NotebookEvent","ConsolePanel","CommandHistoryPanel","FileExplorerPanel","LogPanel","NotebookPanel","setDashboardConsoleSettings","log","module","isNotebookPanel","panel","notebook","undefined","assertIsConsolePluginProps","props","ConsolePlugin","id","hydrateConsole","layout","panelManager","registerComponent","notebooksUrl","notebookIndex","openFileMap","Map","previewFileMap","dispatch","getConsolePanel","getLastUsedPanelOfType","handleSendCommand","command","focus","execute","trimmedCommand","trim","info","consolePanel","WrappedComponent","error","debug","addCommand","handleSettingsChanged","consoleSettings","getNotebookFileName","language","extension","title","current","getPanelIdForFileMetadata","fileMetadata","createIfNecessary","fileId","has","get","generate","renamePanel","panelId","newTitle","renameComponent","root","renameFilePanel","oldName","newName","delete","set","debug2","getBaseName","showFilePanel","activateTab","registerFilePanel","isPreview","existingPanelId","itemName","unregisterFilePanel","closeFilePanel","closeComponent","getNotebookTitle","fileIsOpen","fileIsOpenAsPreview","focusPanelById","getOpenedPanelById","makeConfig","settings","session","sessionLanguage","panelState","type","component","COMPONENT","isFocusOnShow","localDashboardId","metadata","createNotebook","stack","getStackForComponentTypes","config","openComponentInStack","selectNotebook","shouldFocus","isFileOpen","isFileOpenAsPreview","previewTabId","Array","from","values","getStackForConfig","sendToNotebook","notebookPanel","value","append","hydrateNotebook","panelProps","panelDashboardId","hydrate","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","SEND_COMMAND","SETTINGS_CHANGED","CLOSE_FILE","CREATE_NOTEBOOK","SELECT_NOTEBOOK","RENAME","RENAME_FILE","SEND_TO_NOTEBOOK","REGISTER_FILE","UNREGISTER_FILE"],"sources":["../src/ConsolePlugin.tsx"],"sourcesContent":["import { ScriptEditor } from '@deephaven/console';\nimport {\n assertIsDashboardPluginProps,\n DashboardPanelProps,\n DashboardPluginComponentProps,\n DashboardUtils,\n LayoutUtils,\n PanelComponent,\n PanelHydrateFunction,\n PanelProps,\n useListener,\n} from '@deephaven/dashboard';\nimport { FileUtils } from '@deephaven/file-explorer';\nimport Log from '@deephaven/log';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport shortid from 'shortid';\nimport { ConsoleEvent, NotebookEvent } from './events';\nimport {\n ConsolePanel,\n CommandHistoryPanel,\n FileExplorerPanel,\n LogPanel,\n NotebookPanel,\n} from './panels';\nimport { setDashboardConsoleSettings } from './redux';\n\nconst log = Log.module('ConsolePlugin');\n\ntype NotebookPanelComponent = PanelComponent & {\n notebook: ScriptEditor;\n focus: () => void;\n};\n\nfunction isNotebookPanel(\n panel: PanelComponent\n): panel is NotebookPanelComponent {\n return (panel as NotebookPanelComponent).notebook !== undefined;\n}\n\nexport type ConsolePluginProps = DashboardPluginComponentProps & {\n hydrateConsole?: PanelHydrateFunction;\n notebooksUrl: string;\n};\n\nexport function assertIsConsolePluginProps(\n props: Partial<ConsolePluginProps>\n): asserts props is ConsolePluginProps {\n assertIsDashboardPluginProps(props);\n}\n\nexport interface FileMetadata {\n id: string | null;\n itemName: string;\n}\n\nexport function ConsolePlugin(\n props: Partial<ConsolePluginProps>\n): JSX.Element | null {\n assertIsConsolePluginProps(props);\n const {\n id,\n hydrateConsole,\n layout,\n panelManager,\n registerComponent,\n notebooksUrl,\n } = props;\n const notebookIndex = useRef(0);\n // Map from file ID to panel ID\n const [openFileMap] = useState(new Map<string, string>());\n const [previewFileMap] = useState(new Map<string, string>());\n\n const dispatch = useDispatch();\n\n const getConsolePanel = useCallback(\n () => panelManager.getLastUsedPanelOfType(ConsolePanel),\n [panelManager]\n );\n\n const handleSendCommand = useCallback(\n (command: string, focus = true, execute = true) => {\n const trimmedCommand = command && command.trim();\n if (!trimmedCommand) {\n log.info('Ignoring empty code');\n } else {\n const consolePanel = getConsolePanel();\n if (\n !consolePanel ||\n !(consolePanel instanceof ConsolePanel.WrappedComponent)\n ) {\n log.error('Console panel not found');\n return;\n }\n log.debug('Send command: ', command, focus, execute);\n consolePanel.addCommand(command, focus, execute);\n }\n },\n [getConsolePanel]\n );\n\n const handleSettingsChanged = useCallback(\n consoleSettings => {\n dispatch(setDashboardConsoleSettings(id, consoleSettings));\n },\n [dispatch, id]\n );\n\n const getNotebookFileName = useCallback(({ language }) => {\n const extension = language === 'python' ? 'py' : language;\n let title = null;\n if (extension == null) {\n log.debug('No extension for language', language);\n title = `Untitled-${notebookIndex.current}`;\n } else {\n title = `Untitled-${notebookIndex.current}.${extension}`;\n }\n notebookIndex.current += 1;\n return title;\n }, []);\n\n const getPanelIdForFileMetadata = useCallback(\n (fileMetadata: FileMetadata, createIfNecessary = true) => {\n const { id: fileId } = fileMetadata;\n if (fileId != null && openFileMap.has(fileId)) {\n return openFileMap.get(fileId);\n }\n if (fileId != null && previewFileMap.has(fileId)) {\n return previewFileMap.get(fileId);\n }\n if (createIfNecessary as boolean) {\n return shortid.generate();\n }\n return null;\n },\n [openFileMap, previewFileMap]\n );\n\n const renamePanel = useCallback(\n (panelId, newTitle) => {\n LayoutUtils.renameComponent(layout.root, { id: panelId }, newTitle);\n },\n [layout.root]\n );\n\n const renameFilePanel = useCallback(\n (oldName, newName) => {\n log.debug('Rename file panel', oldName, newName);\n let panelId;\n if (openFileMap.has(oldName)) {\n panelId = openFileMap.get(oldName);\n openFileMap.delete(oldName);\n if (panelId != null) {\n openFileMap.set(newName, panelId);\n }\n }\n if (previewFileMap.has(oldName)) {\n panelId = previewFileMap.get(oldName);\n previewFileMap.delete(oldName);\n if (panelId != null) {\n previewFileMap.set(newName, panelId);\n }\n }\n\n if (panelId === undefined) {\n log.debug2(`File ${oldName} isn't open, no need to rename the tab`);\n return;\n }\n\n renamePanel(panelId, FileUtils.getBaseName(newName));\n },\n [openFileMap, previewFileMap, renamePanel]\n );\n\n /**\n * Show the panel for the given file metadata.\n * If the panel is not already open, then it just logs an error and does nothing.\n */\n const showFilePanel = useCallback(\n fileMetadata => {\n const panelId = getPanelIdForFileMetadata(fileMetadata, false);\n if (panelId == null) {\n log.error('Could not find panel id for file metadata', fileMetadata);\n return;\n }\n LayoutUtils.activateTab(layout.root, { id: panelId });\n },\n [getPanelIdForFileMetadata, layout.root]\n );\n\n const registerFilePanel = useCallback(\n (panelId, fileMetadata: FileMetadata, isPreview: boolean) => {\n log.debug('registerFilePanel', panelId, fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.set(fileId, panelId);\n return;\n }\n if (openFileMap.has(fileId)) {\n const existingPanelId = openFileMap.get(fileId);\n if (panelId === existingPanelId) {\n log.debug(`Update tab title for file ${fileId}`);\n const { itemName } = fileMetadata;\n renameFilePanel(fileId, FileUtils.getBaseName(itemName));\n } else {\n log.error(\n `File ${fileId} already associated with a different tab ${existingPanelId}`\n );\n }\n return;\n }\n\n openFileMap.set(fileId, panelId);\n\n // De-register preview tab\n if (previewFileMap.has(fileId)) {\n previewFileMap.delete(fileId);\n }\n },\n [openFileMap, previewFileMap, renameFilePanel]\n );\n\n const unregisterFilePanel = useCallback(\n (fileMetadata: FileMetadata, isPreview: boolean) => {\n // Note: unregister event is triggered AFTER new register when switching from preview to edit mode\n // due to the LayoutUtils implementation (new tab added before deleting the old one)\n // This doesn't cause any issues because previews and editable files are stored in different maps,\n // but this situation could be completely avoided by sending an event to the tab\n // to make it switch from preview to edit mode without re-mounting and re-registering\n log.debug('unregisterFileTab', fileMetadata, isPreview);\n if (fileMetadata == null || fileMetadata.id == null) {\n log.debug('Ignore empty file id', fileMetadata);\n return;\n }\n const { id: fileId } = fileMetadata;\n if (isPreview) {\n previewFileMap.delete(fileId);\n return;\n }\n openFileMap.delete(fileId);\n },\n [openFileMap, previewFileMap]\n );\n\n const closeFilePanel = useCallback(\n fileMetadata => {\n log.debug('closeFilePanel', fileMetadata);\n const { id: fileId } = fileMetadata;\n let panelId = null;\n let isPreview = false;\n if (openFileMap.has(fileId)) {\n panelId = openFileMap.get(fileId);\n } else if (previewFileMap.has(fileId)) {\n panelId = previewFileMap.get(fileId);\n isPreview = true;\n } else {\n log.debug(`File ${fileId} isn't open, ignore close event`);\n return;\n }\n unregisterFilePanel(fileMetadata, isPreview);\n LayoutUtils.closeComponent(layout.root, { id: panelId });\n },\n [layout.root, openFileMap, previewFileMap, unregisterFilePanel]\n );\n\n const getNotebookTitle = useCallback(fileMetadata => {\n const { itemName } = fileMetadata;\n return FileUtils.getBaseName(itemName);\n }, []);\n\n const fileIsOpen = useCallback(\n (fileMetadata: FileMetadata) => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpen', fileMetadata, fileId, openFileMap);\n return fileId != null && openFileMap.has(fileId);\n },\n [openFileMap]\n );\n\n const fileIsOpenAsPreview = useCallback(\n fileMetadata => {\n const { id: fileId } = fileMetadata;\n log.debug('fileIsOpenAsPreview', fileMetadata, fileId, previewFileMap);\n return fileId != null && previewFileMap.has(fileId);\n },\n [previewFileMap]\n );\n\n /*\n * Attempts to focus the panel with the provided panelId\n */\n const focusPanelById = useCallback(\n panelId => {\n if (panelId == null) {\n return;\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (panel && isNotebookPanel(panel)) {\n panel.focus();\n }\n },\n [panelManager]\n );\n\n const makeConfig = useCallback(\n ({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview = false,\n }) => {\n const panelState = {\n settings,\n fileMetadata,\n };\n const title = getNotebookTitle(fileMetadata);\n return {\n type: 'react-component' as const,\n component: NotebookPanel.COMPONENT,\n isFocusOnShow: false,\n props: {\n localDashboardId: id,\n metadata: { id: panelId },\n session,\n sessionLanguage,\n panelState,\n isPreview,\n notebooksUrl,\n },\n title,\n id: panelId,\n };\n },\n [getNotebookTitle, id, notebooksUrl]\n );\n\n const createNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata = { id: null, itemName: getNotebookFileName(settings) }\n ) => {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n if (fileIsOpen(fileMetadata) && panelId != null) {\n log.debug('File is already open, focus panel');\n showFilePanel(fileMetadata);\n focusPanelById(panelId);\n return;\n }\n const stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n });\n log.debug('createNotebook', config, openFileMap);\n LayoutUtils.openComponentInStack(stack, config);\n },\n [\n fileIsOpen,\n focusPanelById,\n getNotebookFileName,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n openFileMap,\n showFilePanel,\n ]\n );\n\n const selectNotebook = useCallback(\n (\n session,\n sessionLanguage,\n settings,\n fileMetadata,\n // linter recognizes shouldFocus as any if I don't specify boolean here\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n shouldFocus: boolean = false\n ) => {\n log.debug('selectNotebook', fileMetadata, shouldFocus);\n const isFileOpen = fileIsOpen(fileMetadata);\n const isFileOpenAsPreview = fileIsOpenAsPreview(fileMetadata);\n\n // If the file is already open, just show and focus it if necessary\n if (isFileOpen) {\n showFilePanel(fileMetadata);\n if (shouldFocus) {\n const panelId = getPanelIdForFileMetadata(fileMetadata);\n focusPanelById(panelId);\n }\n return;\n }\n\n // If the file is already open as a preview and we're not focusing it, just show it\n // If we're focusing it, that means we need to replace the panel anyway with a non-preview panel, so just fall into the logic below\n if (isFileOpenAsPreview && !shouldFocus) {\n showFilePanel(fileMetadata);\n return;\n }\n\n const [previewTabId] = Array.from(previewFileMap.values());\n let panelId = null;\n let stack = null;\n if (previewTabId != null) {\n panelId = previewTabId;\n stack = LayoutUtils.getStackForConfig(layout.root, {\n component: NotebookPanel.COMPONENT,\n id: panelId,\n });\n }\n if (stack == null) {\n panelId = getPanelIdForFileMetadata(fileMetadata);\n stack = LayoutUtils.getStackForComponentTypes(layout.root, [\n NotebookPanel.COMPONENT,\n ]);\n }\n const config = makeConfig({\n id: panelId,\n settings,\n fileMetadata,\n session,\n sessionLanguage,\n isPreview: !shouldFocus,\n });\n LayoutUtils.openComponentInStack(stack, config);\n if (shouldFocus) {\n // Focus the tab we just opened if we're supposed to\n focusPanelById(panelId);\n }\n },\n [\n showFilePanel,\n fileIsOpen,\n fileIsOpenAsPreview,\n focusPanelById,\n getPanelIdForFileMetadata,\n layout.root,\n makeConfig,\n previewFileMap,\n ]\n );\n\n /** Attempts to send the text to a notebook matching the passed in settings */\n const sendToNotebook = useCallback(\n (session, sessionLanguage, settings = {}, createIfNecessary = true) => {\n const notebookPanel = panelManager.getLastUsedPanelOfType(NotebookPanel);\n if (notebookPanel && isNotebookPanel(notebookPanel)) {\n if (\n settings != null &&\n settings.value != null &&\n notebookPanel.notebook != null\n ) {\n notebookPanel.notebook.append(settings.value);\n }\n } else if (createIfNecessary as boolean) {\n createNotebook(session, sessionLanguage, settings);\n }\n },\n [createNotebook, panelManager]\n );\n\n const hydrateNotebook = useCallback(\n (panelProps: PanelProps, panelDashboardId: string): DashboardPanelProps =>\n DashboardUtils.hydrate(\n {\n ...panelProps,\n notebooksUrl,\n },\n panelDashboardId\n ),\n [notebooksUrl]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(ConsolePanel.COMPONENT, ConsolePanel, hydrateConsole),\n registerComponent(CommandHistoryPanel.COMPONENT, CommandHistoryPanel),\n registerComponent(FileExplorerPanel.COMPONENT, FileExplorerPanel),\n registerComponent(LogPanel.COMPONENT, LogPanel),\n registerComponent(\n NotebookPanel.COMPONENT,\n NotebookPanel,\n hydrateNotebook\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent, hydrateConsole, hydrateNotebook]\n );\n\n useListener(layout.eventHub, ConsoleEvent.SEND_COMMAND, handleSendCommand);\n useListener(\n layout.eventHub,\n ConsoleEvent.SETTINGS_CHANGED,\n handleSettingsChanged\n );\n useListener(layout.eventHub, NotebookEvent.CLOSE_FILE, closeFilePanel);\n useListener(layout.eventHub, NotebookEvent.CREATE_NOTEBOOK, createNotebook);\n useListener(layout.eventHub, NotebookEvent.SELECT_NOTEBOOK, selectNotebook);\n useListener(layout.eventHub, NotebookEvent.RENAME, renamePanel);\n useListener(layout.eventHub, NotebookEvent.RENAME_FILE, renameFilePanel);\n useListener(layout.eventHub, NotebookEvent.SEND_TO_NOTEBOOK, sendToNotebook);\n useListener(layout.eventHub, NotebookEvent.REGISTER_FILE, registerFilePanel);\n useListener(\n layout.eventHub,\n NotebookEvent.UNREGISTER_FILE,\n unregisterFilePanel\n );\n\n return null;\n}\n\nexport default ConsolePlugin;\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  class ControlType {}
3
5
  _defineProperty(ControlType, "DROPDOWN_FILTER", 'ControlType.DROPDOWN_FILTER');
4
6
  _defineProperty(ControlType, "INPUT_FILTER", 'ControlType.INPUT_FILTER');
@@ -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;AAQjB,gBARKA,WAAW,qBACU,6BAA6B;AAAA,gBADlDA,WAAW,kBAGO,0BAA0B;AAAA,gBAH5CA,WAAW,cAKG,sBAAsB;AAAA,gBALpCA,WAAW,wBAOa,gCAAgC;AAG9D,eAAeA,WAAW"}
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;AAQjB,gBARKA,WAAW,qBACU,6BAA6B;AAAA,gBADlDA,WAAW,kBAGO,0BAA0B;AAAA,gBAH5CA,WAAW,cAKG,sBAAsB;AAAA,gBALpCA,WAAW,wBAOa,gCAAgC;AAG9D,eAAeA,WAAW"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  /* eslint-disable jsx-a11y/click-events-have-key-events */
3
5
  /* eslint-disable jsx-a11y/no-static-element-interactions */
4
6
  // background click is just a convenience method, not an actual a11y issue
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilter.js","names":["React","Component","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","TableUtils","memoizee","memoize","debounce","shortid","Log","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","undefined","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","onChange","column","isValueShown","state","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","dropdownRef","createRef","id","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","sendUpdate","componentWillUnmount","flush","event","target","debug2","parseInt","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","showSettings","current","focus","clearFilter","setFilterState","oldValue","oldIsValueShown","render","disableLinking","isLinkerActive","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","sourceColumnId","filterColumnId","SOURCE_BUTTON_CLASS_NAME"],"sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport './DropdownFilter.scss';\nimport { LinkPoint } from '../../linker/LinkerUtils';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport interface DropdownFilterColumn {\n name: string;\n type: string;\n}\n\nexport interface DropdownFilterProps {\n column: DropdownFilterColumn;\n columns: DropdownFilterColumn[];\n onSourceMouseEnter: () => void;\n onSourceMouseLeave: () => void;\n disableLinking: boolean;\n isLinkerActive: boolean;\n isLoaded: boolean;\n isValueShown: boolean;\n settingsError: string;\n source: LinkPoint;\n value: string | null;\n values: (string | null)[];\n onChange: (change: {\n column: Partial<Column> | null;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n onColumnSelected: () => void;\n}\n\ninterface DropdownFilterState {\n column: DropdownFilterColumn | null;\n selectedColumn: DropdownFilterColumn | null;\n disableCancel: boolean;\n isValueShown: boolean;\n value: string | null;\n id: string;\n}\n\nexport class DropdownFilter extends Component<\n DropdownFilterProps,\n DropdownFilterState\n> {\n static defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: (): void => undefined,\n onSourceMouseEnter: (): void => undefined,\n onSourceMouseLeave: (): void => undefined,\n };\n\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props: DropdownFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n id: shortid(),\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterProps,\n prevState: DropdownFilterState\n ): void {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n dropdownRef: RefObject<HTMLSelectElement>;\n\n getCompatibleColumns = memoize(\n (source: LinkPoint, columns: DropdownFilterColumn[]) =>\n source != null\n ? columns.filter(\n ({ type }) =>\n type !== undefined &&\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize(\n (\n columns: DropdownFilterColumn[],\n selectedColumn: DropdownFilterColumn | null\n ): [JSX.Element[], number] => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }\n );\n\n getSelectedOptionIndex = memoize(\n (values: (string | null)[], value: string | null) => values.indexOf(value)\n );\n\n getValueOptions = memoize((values: (string | null)[]) => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val ?? '(null)'}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns: DropdownFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)],\n });\n }\n\n handleDropdownKeyPress(event: KeyboardEvent<HTMLSelectElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value: string | null = '';\n const { values } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave(): void {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n sourceUpdated(): void {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter(): void {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : null;\n this.setState(({ value: oldValue, isValueShown: oldIsValueShown }) => ({\n column,\n value: value ?? oldValue,\n isValueShown: isValueShown ?? oldIsValueShown,\n }));\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value: value ?? undefined });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n const sourceColumnId = `source-column-btn-${id}`;\n const filterColumnId = `filter-column-select-${id}`;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label htmlFor={sourceColumnId}>Source Column</label>\n <SocketedButton\n id={sourceColumnId}\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label htmlFor={filterColumnId}>Filter Column</label>\n <select\n id={filterColumnId}\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Cancel disabled while linker open'\n : undefined\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Save disabled while linker open'\n : undefined\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n data-testid=\"dropdown-filter-value-background\"\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n title=\"Select Value\"\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Dropdown Filter Settings\"\n />\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default DropdownFilter;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownFilter.js","names":["React","Component","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","TableUtils","memoizee","memoize","debounce","shortid","Log","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","undefined","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","onChange","column","isValueShown","state","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","dropdownRef","createRef","id","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","sendUpdate","componentWillUnmount","flush","event","target","debug2","parseInt","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","showSettings","current","focus","clearFilter","setFilterState","oldValue","oldIsValueShown","render","disableLinking","isLinkerActive","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","sourceColumnId","filterColumnId","SOURCE_BUTTON_CLASS_NAME"],"sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport './DropdownFilter.scss';\nimport { LinkPoint } from '../../linker/LinkerUtils';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport interface DropdownFilterColumn {\n name: string;\n type: string;\n}\n\nexport interface DropdownFilterProps {\n column: DropdownFilterColumn;\n columns: DropdownFilterColumn[];\n onSourceMouseEnter: () => void;\n onSourceMouseLeave: () => void;\n disableLinking: boolean;\n isLinkerActive: boolean;\n isLoaded: boolean;\n isValueShown: boolean;\n settingsError: string;\n source: LinkPoint;\n value: string | null;\n values: (string | null)[];\n onChange: (change: {\n column: Partial<Column> | null;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n onColumnSelected: () => void;\n}\n\ninterface DropdownFilterState {\n column: DropdownFilterColumn | null;\n selectedColumn: DropdownFilterColumn | null;\n disableCancel: boolean;\n isValueShown: boolean;\n value: string | null;\n id: string;\n}\n\nexport class DropdownFilter extends Component<\n DropdownFilterProps,\n DropdownFilterState\n> {\n static defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: (): void => undefined,\n onSourceMouseEnter: (): void => undefined,\n onSourceMouseLeave: (): void => undefined,\n };\n\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props: DropdownFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n id: shortid(),\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterProps,\n prevState: DropdownFilterState\n ): void {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n dropdownRef: RefObject<HTMLSelectElement>;\n\n getCompatibleColumns = memoize(\n (source: LinkPoint, columns: DropdownFilterColumn[]) =>\n source != null\n ? columns.filter(\n ({ type }) =>\n type !== undefined &&\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize(\n (\n columns: DropdownFilterColumn[],\n selectedColumn: DropdownFilterColumn | null\n ): [JSX.Element[], number] => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }\n );\n\n getSelectedOptionIndex = memoize(\n (values: (string | null)[], value: string | null) => values.indexOf(value)\n );\n\n getValueOptions = memoize((values: (string | null)[]) => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val ?? '(null)'}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns: DropdownFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)],\n });\n }\n\n handleDropdownKeyPress(event: KeyboardEvent<HTMLSelectElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value: string | null = '';\n const { values } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave(): void {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n sourceUpdated(): void {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter(): void {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : null;\n this.setState(({ value: oldValue, isValueShown: oldIsValueShown }) => ({\n column,\n value: value ?? oldValue,\n isValueShown: isValueShown ?? oldIsValueShown,\n }));\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value: value ?? undefined });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n const sourceColumnId = `source-column-btn-${id}`;\n const filterColumnId = `filter-column-select-${id}`;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label htmlFor={sourceColumnId}>Source Column</label>\n <SocketedButton\n id={sourceColumnId}\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label htmlFor={filterColumnId}>Filter Column</label>\n <select\n id={filterColumnId}\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Cancel disabled while linker open'\n : undefined\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Save disabled while linker open'\n : undefined\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n data-testid=\"dropdown-filter-value-background\"\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n title=\"Select Value\"\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Dropdown Filter Settings\"\n />\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default DropdownFilter;\n"],"mappings":";;;AAAA;AACA;AACA;;AAEA,OAAOA,KAAK,IAEVC,SAAS,QAKJ,OAAO;AACd,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,uBAAuB;AACxE,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,OAAO,MAAM,aAAa;AACjC,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,OAAO,MAAM,SAAS;AAC7B,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAIjC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAMC,eAAe,GAAG,GAAG;AAqC3B,OAAO,MAAMC,cAAc,SAASf,SAAS,CAG3C;EAuBAgB,WAAW,CAACC,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA,8CAkEQT,OAAO,CAC5B,CAACU,MAAiB,EAAEC,OAA+B,KACjDD,MAAM,IAAI,IAAI,GACVC,OAAO,CAACC,MAAM,CACZ;MAAA,IAAC;QAAEC;MAAK,CAAC;MAAA,OACPA,IAAI,KAAKC,SAAS,IAClBhB,UAAU,CAACiB,gBAAgB,CAACF,IAAI,EAAEH,MAAM,CAACM,UAAU,CAAC;IAAA,EACvD,GACD,EAAE,CACT;IAAA,0CAEkBhB,OAAO,CACxB,CACEW,OAA+B,EAC/BM,cAA2C,KACf;MAC5B,IAAIC,aAAa,GAAG,CAAC,CAAC;MACtB,IAAMC,OAAO,GAAG,EAAE;MAClBA,OAAO,CAACC,IAAI,eACV;QAAQ,GAAG,EAAC,aAAa;QAAC,KAAK,EAAC;MAAI,GAAC,iBAErC,CAAS,CACV;MACDT,OAAO,CAACU,OAAO,CAAC,CAACC,UAAU,EAAEC,KAAK,KAAK;QACrCJ,OAAO,CAACC,IAAI,eACV;UAAQ,GAAG,YAAKE,UAAU,CAACE,IAAI,cAAIF,UAAU,CAACT,IAAI,CAAG;UAAC,KAAK,EAAEU;QAAM,GAChE,IAAI,CAACE,YAAY,CAACd,OAAO,EAAEY,KAAK,CAAC,CAC3B,CACV;QACD,IACEN,cAAc,KAAK,IAAI,IACvBK,UAAU,CAACE,IAAI,KAAKP,cAAc,CAACO,IAAI,IACvCF,UAAU,CAACT,IAAI,KAAKI,cAAc,CAACJ,IAAI,EACvC;UACAK,aAAa,GAAGK,KAAK;QACvB;MACF,CAAC,CAAC;MACF,OAAO,CAACJ,OAAO,EAAED,aAAa,CAAC;IACjC,CAAC,CACF;IAAA,gDAEwBlB,OAAO,CAC9B,CAAC0B,MAAyB,EAAEC,KAAoB,KAAKD,MAAM,CAACE,OAAO,CAACD,KAAK,CAAC,CAC3E;IAAA,yCAEiB3B,OAAO,CAAE0B,MAAyB,IAAK,cACvD;MAAQ,KAAK,EAAC,IAAI;MAAC,GAAG,EAAC;IAAI,GACxBnB,cAAc,CAACsB,WAAW,CACpB,EACT,GAAGH,MAAM,CAACI,GAAG,CAAC,CAACC,GAAG,EAAER,KAAK,kBACvB;MACE,KAAK,EAAEA;MACP;MAAA;MACA,GAAG,YAAKA,KAAK,cAAIQ,GAAG;IAAG,GAEtBA,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,QAAQ,CAEnB,CAAC,CACH,CAAC;IAAA,sCAEahC,QAAQ,CAAC,CAACY,OAA+B,EAAEY,KAAa,KAAK;MAC1E,IAAM;QAAEC,IAAI;QAAEX;MAAK,CAAC,GAAGF,OAAO,CAACY,KAAK,CAAC;MAErC,IACGA,KAAK,GAAG,CAAC,IAAIZ,OAAO,CAACY,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAI,IAC7CD,KAAK,GAAGZ,OAAO,CAACqB,MAAM,GAAG,CAAC,IAAIrB,OAAO,CAACY,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAK,EAChE;QACA,IAAMS,SAAS,GAAGpB,IAAI,CAACqB,SAAS,CAACrB,IAAI,CAACsB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,iBAAUX,IAAI,eAAKS,SAAS;MAC9B;MAEA,OAAOT,IAAI;IACb,CAAC,CAAC;IAAA,oCA4HWvB,QAAQ,CAAC,MAAM;MAC1B,IAAM;QAAEmC;MAAS,CAAC,GAAG,IAAI,CAAC3B,KAAK;MAC/B,IAAM;QAAE4B,MAAM;QAAEV,KAAK;QAAEW;MAAa,CAAC,GAAG,IAAI,CAACC,KAAK;MAClDH,QAAQ,CAAC;QAAEC,MAAM;QAAEC,YAAY;QAAEX,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAIb;MAAU,CAAC,CAAC;IAC/D,CAAC,EAAER,eAAe,CAAC;IAxQjB,IAAI,CAACkC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACD,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACE,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACG,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACI,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACK,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACL,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACM,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACN,IAAI,CAAC,IAAI,CAAC;IAE1D,IAAI,CAACO,WAAW,gBAAGzD,KAAK,CAAC0D,SAAS,EAAE;IAEpC,IAAM;MAAEZ,MAAM,EAANA,OAAM;MAAEC,YAAY,EAAZA,aAAY;MAAEX,KAAK,EAALA;IAAM,CAAC,GAAGlB,KAAK;IAC7C,IAAI,CAAC8B,KAAK,GAAG;MACXF,MAAM,EAANA,OAAM;MACNa,EAAE,EAAEhD,OAAO,EAAE;MACbe,cAAc,EAAEoB,OAAM;MACtBc,aAAa,EAAE,CAACb,aAAY;MAC5BA,YAAY,EAAZA,aAAY;MACZX,KAAK,EAALA;IACF,CAAC;EACH;EAEAyB,kBAAkB,CAChBC,SAA8B,EAC9BC,SAA8B,EACxB;IACN,IAAM;MAAE5C,MAAM;MAAEgB,MAAM;MAAE6B;IAAS,CAAC,GAAG,IAAI,CAAC9C,KAAK;IAC/C,IAAM;MAAE4B,MAAM;MAAEV,KAAK;MAAEW;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAElD,IAAIgB,QAAQ,EAAE;MACZ,IAAI7C,MAAM,KAAK2C,SAAS,CAAC3C,MAAM,EAAE;QAC/B,IAAI,CAAC8C,aAAa,EAAE;MACtB;MAEA,IACE9B,MAAM,KAAK2B,SAAS,CAAC3B,MAAM,IAC3BC,KAAK,KAAK,EAAE,IACZ,CAACD,MAAM,CAAC+B,QAAQ,CAAC9B,KAAK,CAAC,EACvB;QACA;QACA,IAAI,CAAC+B,UAAU,EAAE;MACnB;MAEA,IAAIpB,YAAY,KAAKgB,SAAS,CAAChB,YAAY,EAAE;QAC3C,IAAIA,YAAY,EAAE;UAChB,IAAI,CAACqB,UAAU,EAAE;QACnB;MACF;MAEA,IACEtB,MAAM,KAAKiB,SAAS,CAACjB,MAAM,IAC3BV,KAAK,KAAK2B,SAAS,CAAC3B,KAAK,IACzBW,YAAY,KAAKgB,SAAS,CAAChB,YAAY,EACvC;QACA,IAAI,CAACsB,UAAU,EAAE;MACnB;IACF;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACD,UAAU,CAACE,KAAK,EAAE;EACzB;EA8EAtB,kBAAkB,CAACuB,KAAqC,EAAQ;IAC9D,IAAM;MAAEpC;IAAM,CAAC,GAAGoC,KAAK,CAACC,MAAM;IAC9B5D,GAAG,CAAC6D,MAAM,CAAC,oBAAoB,EAAEtC,KAAK,CAAC;IACvC,IAAIA,KAAK,IAAI,IAAI,IAAIuC,QAAQ,CAACvC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE;MAC5C,IAAI,CAACwC,QAAQ,CAAC;QACZlD,cAAc,EAAE;MAClB,CAAC,CAAC;MACF;IACF;IACA,IAAM;MAAEN,OAAO,EAAEyD,UAAU;MAAE1D;IAAO,CAAC,GAAG,IAAI,CAACD,KAAK;IAClD,IAAME,OAAO,GAAG,IAAI,CAAC0D,oBAAoB,CAAC3D,MAAM,EAAE0D,UAAU,CAAC;IAC7D,IAAI,CAACD,QAAQ,CAAC;MACZlD,cAAc,EAAEN,OAAO,CAACuD,QAAQ,CAACvC,KAAK,EAAE,EAAE,CAAC;IAC7C,CAAC,CAAC;EACJ;EAEAmB,sBAAsB,CAACiB,KAAuC,EAAQ;IACpE,IAAIA,KAAK,CAACO,GAAG,KAAK,OAAO,EAAE;MACzBP,KAAK,CAACQ,cAAc,EAAE;MACtBR,KAAK,CAACS,eAAe,EAAE;MAEvBpE,GAAG,CAAC6D,MAAM,CAAC,wBAAwB,CAAC;MAEpC,IAAI,CAACL,UAAU,EAAE;MACjB,IAAI,CAACA,UAAU,CAACE,KAAK,EAAE;IACzB;EACF;EAEAf,iBAAiB,CAACgB,KAAqC,EAAQ;IAC7D,IAAM;MAAEpC,KAAK,EAAE8C;IAAW,CAAC,GAAGV,KAAK,CAACC,MAAM;IAC1C,IAAMzC,KAAK,GAAG2C,QAAQ,CAACO,UAAU,EAAE,EAAE,CAAC;IACtC;IACA,IAAI9C,KAAoB,GAAG,EAAE;IAC7B,IAAM;MAAED;IAAO,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC7B,IAAIc,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGG,MAAM,CAACM,MAAM,EAAE;MACvCL,KAAK,GAAGD,MAAM,CAACH,KAAK,CAAC;IACvB,CAAC,MAAM;MACLnB,GAAG,CAAC6D,MAAM,CAAC,uBAAuB,CAAC;IACrC;IAEA7D,GAAG,CAAC6D,MAAM,CAAC,mBAAmB,EAAEtC,KAAK,CAAC;IAEtC,IAAI,CAACwC,QAAQ,CAAC;MAAExC;IAAM,CAAC,CAAC;EAC1B;EAEAe,oBAAoB,GAAS;IAC3B,IAAI,CAACyB,QAAQ,CAAC;MAAA,IAAC;QAAE9B;MAAO,CAAC;MAAA,OAAM;QAC7BpB,cAAc,EAAEoB,MAAM;QACtBC,YAAY,EAAE;MAChB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAM,kBAAkB,GAAS;IACzB,IAAI,CAACuB,QAAQ,CAAC;MAAA,IAAC;QAAE9B,MAAM;QAAEpB,cAAc;QAAEU;MAAM,CAAC;MAAA,OAAM;QACpDU,MAAM,EAAEpB,cAAc;QACtB;QACAU,KAAK,EAAEU,MAAM,KAAKpB,cAAc,GAAGU,KAAK,GAAG,EAAE;QAC7CW,YAAY,EAAE,IAAI;QAClBa,aAAa,EAAE;MACjB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAR,mBAAmB,CAACoB,KAAoC,EAAQ;IAC9DA,KAAK,CAACS,eAAe,EAAE;IACvB,IAAI,CAACE,YAAY,EAAE;EACrB;EAEA7B,qBAAqB,CAACkB,KAAiC,EAAQ;IAC7D;IACA,IAAIA,KAAK,CAACC,MAAM,KAAK,IAAI,CAAChB,WAAW,CAAC2B,OAAO,EAAE;MAC7C,IAAI,CAAChB,UAAU,EAAE;IACnB;EACF;EAEAH,aAAa,GAAS;IACpB,IAAI,CAACW,QAAQ,CAAC;MACZ9B,MAAM,EAAE,IAAI;MACZpB,cAAc,EAAE,IAAI;MACpBqB,YAAY,EAAE,KAAK;MACnBa,aAAa,EAAE,IAAI;MACnBxB,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEA+C,YAAY,GAAS;IACnB,IAAM;MAAErC;IAAO,CAAC,GAAG,IAAI,CAACE,KAAK;IAC7B,IAAI,CAAC4B,QAAQ,CAAC;MAAElD,cAAc,EAAEoB,MAAM;MAAEC,YAAY,EAAE;IAAM,CAAC,CAAC;EAChE;EAEAqB,UAAU,GAAS;IAAA;IACjB,6BAAI,CAACX,WAAW,CAAC2B,OAAO,0DAAxB,sBAA0BC,KAAK,EAAE;EACnC;EAEAlB,UAAU,GAAS;IACjB,IAAI,CAACS,QAAQ,CAAC;MAAExC,KAAK,EAAE;IAAG,CAAC,CAAC;EAC9B;;EAEA;EACAkD,WAAW,GAAS;IAClB,IAAI,CAACnB,UAAU,EAAE;EACnB;;EAEA;EACAoB,cAAc,QAUL;IAAA,IAVM;MACbtD,IAAI;MACJX,IAAI;MACJc,KAAK;MACLW;IAMF,CAAC;IACC,IAAMD,MAAM,GAAGb,IAAI,IAAI,IAAI,IAAIX,IAAI,IAAI,IAAI,GAAG;MAAEW,IAAI;MAAEX;IAAK,CAAC,GAAG,IAAI;IACnE,IAAI,CAACsD,QAAQ,CAAC;MAAA,IAAC;QAAExC,KAAK,EAAEoD,QAAQ;QAAEzC,YAAY,EAAE0C;MAAgB,CAAC;MAAA,OAAM;QACrE3C,MAAM;QACNV,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAIoD,QAAQ;QACxBzC,YAAY,EAAEA,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI0C;MAChC,CAAC;IAAA,CAAC,CAAC;EACL;EAQAC,MAAM,GAAiB;IAAA;IACrB,IAAM;MACJtE,OAAO,EAAEyD,UAAU;MACnBc,cAAc;MACdC,cAAc;MACd5B,QAAQ;MACR7C,MAAM;MACN0E,gBAAgB;MAChBC,kBAAkB;MAClBC,kBAAkB;MAClB5D,MAAM;MACN6D;IACF,CAAC,GAAG,IAAI,CAAC9E,KAAK;IACd,IAAM;MACJ4B,MAAM;MACNc,aAAa;MACbD,EAAE;MACFZ,YAAY;MACZrB,cAAc;MACdU;IACF,CAAC,GAAG,IAAI,CAACY,KAAK;IACd,IAAMiD,uBAAuB,GAAG9E,MAAM,KAAK,IAAI;IAC/C,IAAMC,OAAO,GAAG,IAAI,CAAC0D,oBAAoB,CAAC3D,MAAM,EAAE0D,UAAU,CAAC;IAC7D,IAAMqB,QAAQ,GAAG/E,MAAM,IAAI,IAAI;IAC/B,IAAMgF,iBAAiB,yBACrBhF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEiF,UAAU,mEAAIpF,cAAc,CAACqF,yBAAyB;IAChE,IAAMC,WAAW,GAAGxD,MAAM,IAAI,IAAI,aAAMA,MAAM,CAACb,IAAI,eAAY,IAAI;IACnE,IAAM,CAACsE,aAAa,EAAE5E,aAAa,CAAC,GAAG,IAAI,CAAC6E,gBAAgB,CAC1DpF,OAAO,EACPM,cAAc,CACf;IACD,IAAM+E,YAAY,GAAG,IAAI,CAACC,eAAe,CAACvE,MAAM,CAAC;IACjD,IAAMwE,cAAc,GAAG,IAAI,CAACC,sBAAsB,CAACzE,MAAM,EAAEC,KAAK,CAAC;IACjE,IAAMyE,WAAW,GAAG,CAACX,QAAQ,IAAIxE,cAAc,IAAI,IAAI;IAEvD,IAAMoF,SAAS,GAAG/D,YAAY,IAAI,CAAC6C,cAAc;IAEjD,IAAMmB,cAAc,+BAAwBpD,EAAE,CAAE;IAChD,IAAMqD,cAAc,kCAA2BrD,EAAE,CAAE;IAEnD,oBACE,oBAAC,QAAQ;MACP,SAAS,EAAC,sCAAsC;MAChD,SAAS,EAAEmD;IAAU,gBAErB;MAAK,SAAS,EAAC;IAA+B,gBAC5C;MAAK,SAAS,EAAC;IAA8B,gBAC3C;MAAK,SAAS,EAAC;IAA+B,gBAC5C;MAAO,OAAO,EAAEC;IAAe,GAAC,eAAa,CAAQ,eACrD,oBAAC,cAAc;MACb,EAAE,EAAEA,cAAe;MACnB,QAAQ,EAAEb,QAAS;MACnB,OAAO,EAAEL,gBAAiB;MAC1B,YAAY,EAAEC,kBAAmB;MACjC,YAAY,EAAEC,kBAAmB;MACjC,SAAS,EAAE/E,cAAc,CAACiG,wBAAyB;MACnD,QAAQ,EAAEtB;IAAe,GAExBQ,iBAAiB,CACH,eAEjB;MAAK,SAAS,EAAC;IAAkB,GAAC,4DAElC,CAAM,eAEN;MAAO,OAAO,EAAEa;IAAe,GAAC,eAAa,CAAQ,eACrD;MACE,EAAE,EAAEA,cAAe;MACnB,KAAK,EAAErF,aAAc;MACrB,SAAS,EAAC,eAAe;MACzB,QAAQ,EAAE,IAAI,CAACsB,kBAAmB;MAClC,QAAQ,EAAEgD;IAAwB,GAEjCM,aAAa,CACP,eACT;MAAK,SAAS,EAAC;IAAkB,GAAC,oGAGlC,CAAM,CACF,EACLP,aAAa,iBACZ;MAAK,SAAS,EAAC;IAA2B,GAAEA,aAAa,CAC1D,EACAE,QAAQ,iBACP;MAAK,SAAS,EAAC;IAAkC,gBAC/C,oBAAC,MAAM;MACL,IAAI,EAAC,WAAW;MAChB,IAAI,EAAC,QAAQ;MACb,OAAO,EAAE,IAAI,CAAC/C,oBAAqB;MACnC,QAAQ,EAAES,aAAa,IAAIb,YAAY,IAAI6C,cAAe;MAC1D,OAAO,EACLA,cAAc,GACV,mCAAmC,GACnCrE;IACL,GACF,QAED,CAAS,eACT,oBAAC,MAAM;MACL,IAAI,EAAC,SAAS;MACd,IAAI,EAAC,QAAQ;MACb,SAAS,EAAC,MAAM;MAChB,OAAO,EAAE,IAAI,CAAC8B,kBAAmB;MACjC,QAAQ,EAAEwD,WAAW,IAAI9D,YAAY,IAAI6C,cAAe;MACxD,OAAO,EACLA,cAAc,GACV,iCAAiC,GACjCrE;IACL,GACF,MAED,CAAS,CAEZ,CACG,CACF,eAEN;MACE,SAAS,EAAC,4BAA4B;MACtC,OAAO,EAAE,IAAI,CAAC+B,qBAAsB;MACpC,eAAY;IAAkC,GAE7CU,QAAQ,iBACP,uDACE;MAAK,SAAS,EAAC;IAAwB,gBACrC;MAAK,SAAS,EAAC;IAA8B,GAC1CsC,WAAW,CACR,CACF,eACN;MAAK,SAAS,EAAC;IAA8B,gBAC3C;MAAK,SAAS,EAAC;IAAuE,gBACpF;MACE,SAAS,EAAC,eAAe;MACzB,KAAK,EAAEK,cAAe;MACtB,GAAG,EAAE,IAAI,CAAClD,WAAY;MACtB,QAAQ,EAAE,IAAI,CAACD,iBAAkB;MACjC,UAAU,EAAE,IAAI,CAACD,sBAAuB;MACxC,KAAK,EAAC;IAAc,GAEnBkD,YAAY,CACN,CACL,EACLT,aAAa,iBACZ;MAAK,SAAS,EAAC;IAAgC,GAC5CA,aAAa,CAEjB,CACG,eACN;MAAK,SAAS,EAAC;IAAsB,gBACnC,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,UAAU;MACpB,OAAO,EAAE,IAAI,CAAC5C,mBAAoB;MAClC,IAAI,eAAE,oBAAC,eAAe;QAAC,IAAI,EAAE9C,MAAO;QAAC,SAAS,EAAC;MAAQ,EAAI;MAC3D,OAAO,EAAC;IAA0B,EAClC,CACE,CAET,CACG,CACG;EAEf;AACF;AAAC,gBA1cYU,cAAc,kBAIH;EACpB8B,MAAM,EAAE,IAAI;EACZ6C,cAAc,EAAE,KAAK;EACrBC,cAAc,EAAE,KAAK;EACrB5B,QAAQ,EAAE,KAAK;EACfjB,YAAY,EAAE,KAAK;EAEnBiD,aAAa,EAAE,IAAI;EACnB7E,MAAM,EAAE,IAAI;EACZiB,KAAK,EAAE,EAAE;EACTD,MAAM,EAAE,EAAE;EACV0D,gBAAgB,EAAE,MAAYtE,SAAS;EACvCuE,kBAAkB,EAAE,MAAYvE,SAAS;EACzCwE,kBAAkB,EAAE,MAAYxE;AAClC,CAAC;AAAA,gBAlBUP,cAAc,iBAoBJ,mBAAmB;AAAA,gBApB7BA,cAAc,8BAsBS,8BAA8B;AAAA,gBAtBrDA,cAAc,+BAwBU,iBAAiB;AAobtD,eAAeA,cAAc"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  /* eslint-disable jsx-a11y/click-events-have-key-events */
3
5
  /* eslint-disable jsx-a11y/no-static-element-interactions */
4
6
  // background click is just a convience method, not an actual a11y issue
@@ -1 +1 @@
1
- {"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":";AAAA;AACA;AACA;;AAEA,OAAOA,KAAK,IAEVC,SAAS,QAKJ,OAAO;AACd,SAASC,MAAM,EAAEC,QAAQ,QAAQ,uBAAuB;AACxD,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAGjC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,aAAa,CAAC;AACrC,IAAMC,eAAe,GAAG,GAAG;AAuB3B,MAAMC,WAAW,SAASX,SAAS,CAAqC;EAStEY,WAAW,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA,sCAwDAR,QAAQ,CAAC,CAACS,OAA4B,EAAEC,KAAa,KAAK;MACvE,IAAM;QAAEC,IAAI;QAAEC;MAAK,CAAC,GAAGH,OAAO,CAACC,KAAK,CAAC;MAErC,IACGA,KAAK,GAAG,CAAC,IAAID,OAAO,CAACC,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAI,IAC7CD,KAAK,GAAGD,OAAO,CAACI,MAAM,GAAG,CAAC,IAAIJ,OAAO,CAACC,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAK,EAChE;QACA,IAAMG,SAAS,GAAGF,IAAI,CAACG,SAAS,CAACH,IAAI,CAACI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,iBAAUL,IAAI,eAAKG,SAAS;MAC9B;MAEA,OAAOH,IAAI;IACb,CAAC,CAAC;IAAA,oCAuFWV,QAAQ,CAAC,MAAM;MAC1B,IAAM;QAAEgB;MAAS,CAAC,GAAG,IAAI,CAACT,KAAK;MAC/B,IAAM;QAAEU,MAAM;QAAEC,KAAK;QAAEC;MAAa,CAAC,GAAG,IAAI,CAACC,KAAK;MAClDJ,QAAQ,CAAC;QAAEC,MAAM;QAAEE,YAAY;QAAED;MAAM,CAAC,CAAC;IAC3C,CAAC,EAAEd,eAAe,CAAC;IA7JjB,IAAI,CAACiB,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACK,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAACO,QAAQ,gBAAGpC,KAAK,CAACqC,SAAS,EAAE;IAEjC,IAAM;MAAEb,MAAM,EAANA,OAAM;MAAEE,YAAY,EAAZA,aAAY;MAAED,KAAK,EAALA;IAAM,CAAC,GAAGX,KAAK;IAC7C,IAAI,CAACa,KAAK,GAAG;MACXH,MAAM,EAANA,OAAM;MACNc,cAAc,EAAEd,OAAM;MACtBC,KAAK,EAALA,MAAK;MACLC,YAAY,EAAZA;IACF,CAAC;EACH;EAEAa,kBAAkB,CAChBC,SAA2B,EAC3BC,SAA2B,EACrB;IACN,IAAM;MAAEjB,MAAM,EAAEkB;IAAW,CAAC,GAAG,IAAI,CAAC5B,KAAK;IACzC,IAAM;MAAEU,MAAM;MAAEC,KAAK;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAElD,IAAIe,UAAU,KAAKF,SAAS,CAAChB,MAAM,EAAE;MACnC;MACA,IAAI,CAACmB,QAAQ,CAAC;QAAEnB,MAAM,EAAEkB,UAAU;QAAEJ,cAAc,EAAEI;MAAW,CAAC,CAAC;IACnE;IAEA,IACEhB,YAAY,KAAKkB,SAAS,IAC1BlB,YAAY,IACZA,YAAY,KAAKe,SAAS,CAACf,YAAY,EACvC;MACA,IAAI,CAACmB,UAAU,EAAE;IACnB;IAEA,IACErB,MAAM,KAAKiB,SAAS,CAACjB,MAAM,IAC3BC,KAAK,KAAKgB,SAAS,CAAChB,KAAK,IACzBC,YAAY,KAAKe,SAAS,CAACf,YAAY,EACvC;MACA,IAAI,CAACoB,UAAU,EAAE;IACnB;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACD,UAAU,CAACE,KAAK,EAAE;EACzB;EAkBApB,kBAAkB,CAACqB,KAAqC,EAAQ;IAC9D,IAAM;MAAElC;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAM;MAAEW;IAAM,CAAC,GAAGwB,KAAK,CAACC,MAAM;IAC9B,IAAMZ,cAAc,GAAGvB,OAAO,CAACoC,QAAQ,CAAC1B,KAAK,EAAE,EAAE,CAAC,CAAC;IAEnDhB,GAAG,CAAC2C,MAAM,CAAC,oBAAoB,EAAEd,cAAc,CAAC;IAEhD,IAAI,CAACK,QAAQ,CAAC;MAAEL,cAAc;MAAEb,KAAK,EAAEmB;IAAU,CAAC,CAAC;EACrD;EAEAd,mBAAmB,CAACmB,KAAsC,EAAQ;IAChE,IAAIA,KAAK,CAACI,GAAG,KAAK,OAAO,EAAE;MACzBJ,KAAK,CAACK,cAAc,EAAE;MACtBL,KAAK,CAACM,eAAe,EAAE;MACvB,IAAI,CAACZ,QAAQ,CACX;QAAA,IAAC;UAAElB;QAAM,CAAC;QAAA,OAAMA,KAAK,IAAI,IAAI,GAAG;UAAEA,KAAK,EAAE;QAAG,CAAC,GAAG,IAAI;MAAA,CAAC,EACrD,MAAM;QACJ,IAAI,CAACqB,UAAU,EAAE;QACjB,IAAI,CAACA,UAAU,CAACE,KAAK,EAAE;MACzB,CAAC,CACF;IACH;EACF;EAEAjB,iBAAiB,CAACkB,KAAoC,EAAQ;IAC5D,IAAM;MAAExB;IAAM,CAAC,GAAGwB,KAAK,CAACC,MAAM;IAE9BzC,GAAG,CAAC2C,MAAM,CAAC,mBAAmB,EAAE3B,KAAK,CAAC;IAEtC,IAAI,CAACkB,QAAQ,CAAC;MAAElB;IAAM,CAAC,CAAC;EAC1B;EAEAO,oBAAoB,GAAS;IAC3B,IAAM;MAAER;IAAO,CAAC,GAAG,IAAI,CAACG,KAAK;IAC7B,IAAI,CAACgB,QAAQ,CAAC;MAAEL,cAAc,EAAEd,MAAM;MAAEE,YAAY,EAAE;IAAK,CAAC,CAAC;EAC/D;EAEAQ,kBAAkB,GAAS;IACzB,IAAM;MAAEI;IAAe,CAAC,GAAG,IAAI,CAACX,KAAK;IACrC,IAAI,CAACgB,QAAQ,CAAC;MAAEnB,MAAM,EAAEc,cAAc;MAAEZ,YAAY,EAAE;IAAK,CAAC,CAAC;EAC/D;EAEAO,mBAAmB,CAACgB,KAAoC,EAAQ;IAC9D,IAAM;MAAEzB;IAAO,CAAC,GAAG,IAAI,CAACG,KAAK;IAC7B,IAAI,CAACgB,QAAQ,CAAC;MAAEL,cAAc,EAAEd,MAAM;MAAEE,YAAY,EAAE;IAAM,CAAC,CAAC;IAC9DuB,KAAK,CAACM,eAAe,EAAE;EACzB;EAEApB,qBAAqB,CAACc,KAAiC,EAAQ;IAC7D;IACA,IAAIA,KAAK,CAACC,MAAM,KAAK,IAAI,CAACd,QAAQ,CAACoB,OAAO,EAAE;MAC1C,IAAI,CAACX,UAAU,EAAE;IACnB;EACF;EAEAA,UAAU,GAAS;IACjB,IAAI,IAAI,CAACT,QAAQ,CAACoB,OAAO,KAAK,IAAI,EAAE;MAClC,IAAI,CAACpB,QAAQ,CAACoB,OAAO,CAACC,MAAM,EAAE;MAC9B,IAAI,CAACrB,QAAQ,CAACoB,OAAO,CAACE,KAAK,EAAE;IAC/B;EACF;EAEAC,WAAW,GAAS;IAClB,IAAI,CAAChB,QAAQ,CAAC;MAAElB,KAAK,EAAE;IAAG,CAAC,CAAC;EAC9B;EAEAmC,cAAc,QAUL;IAAA,IAVM;MACb3C,IAAI;MACJC,IAAI;MACJO,KAAK;MACLC;IAMF,CAAC;IACC,IAAMF,MAAM,GAAGP,IAAI,IAAI,IAAI,IAAIC,IAAI,IAAI,IAAI,GAAG;MAAED,IAAI;MAAEC;IAAK,CAAC,GAAG0B,SAAS;IACxE,IAAMiB,MAAM,GACVnC,YAAY,KAAKkB,SAAS,GACtB;MAAEpB,MAAM;MAAEC;IAAM,CAAC,GACjB;MAAED,MAAM;MAAEC,KAAK;MAAEC;IAAa,CAAC;IACrC,IAAI,CAACiB,QAAQ,CAACkB,MAAM,CAAC;EACvB;EAQAC,MAAM,GAAiB;IACrB,IAAM;MAAE/C;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAM;MAAEU,MAAM;MAAEE,YAAY;MAAEY,cAAc;MAAEb;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IAClE,IAAMoC,WAAW,GACftC,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACN,MAAM,KAAK,CAAC,GAC/BP,WAAW,CAACoD,WAAW,CAAC7C,MAAM,GAC9BM,KAAK,CAACN,MAAM;IAClB,IAAI8C,UAAU,GAAG,IAAI;IACrB,IAAIzC,MAAM,IAAI,IAAI,EAAE;MAClB,IAAM0C,WAAW,GAAGnD,OAAO,CAACoD,SAAS,CACnCC,IAAI,IAAIA,IAAI,CAACnD,IAAI,KAAKO,MAAM,CAACP,IAAI,IAAImD,IAAI,CAAClD,IAAI,KAAKM,MAAM,CAACN,IAAI,CAC/D;MACD+C,UAAU,GACRC,WAAW,IAAI,CAAC,GACZ,IAAI,CAACG,YAAY,CAACtD,OAAO,EAAEmD,WAAW,CAAC,GACvC1C,MAAM,CAACP,IAAI;IACnB;IAEA,oBACE,oBAAC,QAAQ;MACP,SAAS,EAAC,mCAAmC;MAC7C,SAAS,EAAES,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI;IAAM,gBAEjC;MAAK,SAAS,EAAC;IAA4B,gBACzC;MAAK,SAAS,EAAC;IAA+B,gBAC5C;MAAK,SAAS,EAAC;IAA4B,gBACzC,mDAA4B,eAC5B;MACE,KAAK,EAAEX,OAAO,CAACoD,SAAS,CACtBC,IAAI,IACFA,IAAI,CAACnD,IAAI,MAAKqB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAErB,IAAI,KAClCmD,IAAI,CAAClD,IAAI,MAAKoB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEpB,IAAI,EACpC;MACF,SAAS,EAAC,eAAe;MACzB,QAAQ,EAAE,IAAI,CAACU;IAAmB,GAEjCb,OAAO,CAACuD,GAAG,CAAC,CAACC,UAAU,EAAEvD,KAAK,kBAC7B;MACE,GAAG,YAAKuD,UAAU,CAACtD,IAAI,cAAIsD,UAAU,CAACrD,IAAI,CAAG;MAC7C,KAAK,EAAEF;IAAM,GAEZ,IAAI,CAACqD,YAAY,CAACtD,OAAO,EAAEC,KAAK,CAAC,CAErC,CAAC,EACDD,OAAO,CAACI,MAAM,KAAK,CAAC,iBACnB;MAAQ,KAAK,EAAC,IAAI;MAAC,QAAQ;IAAA,0BAG5B,CACM,eACT;MAAK,SAAS,EAAC;IAAkB,qGAG3B,CACF,eACN;MAAK,SAAS,EAAC;IAA+B,gBAC5C,oBAAC,MAAM;MACL,IAAI,EAAC,WAAW;MAChB,OAAO,EAAE,IAAI,CAACa,oBAAqB;MACnC,QAAQ,EAAER,MAAM,IAAI;IAAK,YAGlB,eACT,oBAAC,MAAM;MACL,IAAI,EAAC,SAAS;MACd,SAAS,EAAC,MAAM;MAChB,OAAO,EAAE,IAAI,CAACU,kBAAmB;MACjC,QAAQ,EAAEI,cAAc,IAAI;IAAK,UAG1B,CACL,CACF,CACF,eAEN;MACE,SAAS,EAAC,yBAAyB;MACnC,OAAO,EAAE,IAAI,CAACH;IAAsB,gBAEpC;MAAK,SAAS,EAAC;IAAqB,gBAClC;MAAK,SAAS,EAAC;IAA2B,GAAE8B,UAAU,YAAc,CAChE,eACN;MAAK,SAAS,EAAC;IAA8D,gBAC3E;MAAK,SAAS,EAAC;IAAoE,gBACjF;MACE,IAAI,EAAC,MAAM;MACX,GAAG,EAAE,IAAI,CAAC7B,QAAS;MACnB,WAAW,EAAExB,WAAW,CAACoD,WAAY;MACrC,KAAK,EAAEvC,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAG;MACnB,QAAQ,EAAE,IAAI,CAACM,iBAAkB;MACjC,UAAU,EAAE,IAAI,CAACD,mBAAoB;MACrC,KAAK,EAAE;QAAE0C,KAAK,YAAKT,WAAW,GAAG,CAAC;MAAK,CAAE;MACzC,UAAU,EAAC;IAAO,EAClB,CACE,CACF,eACN;MAAK,SAAS,EAAC;IAAmB,gBAChC,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,UAAU;MACpB,OAAO,EAAE,IAAI,CAAC9B,mBAAoB;MAClC,IAAI,eAAE,oBAAC,eAAe;QAAC,IAAI,EAAE5B,MAAO;QAAC,SAAS,EAAC;MAAQ,EAAI;MAC3D,OAAO,EAAC;IAAuB,EAC/B,CACE,CACF,CACG;EAEf;AACF;AAAC,gBAxRKO,WAAW,iBACM,gBAAgB;AAAA,gBADjCA,WAAW,kBAGO;EACpBY,MAAM,EAAE,IAAI;EACZE,YAAY,EAAE,KAAK;EACnBD,KAAK,EAAE;AACT,CAAC;AAmRH,eAAeb,WAAW"}
1
+ {"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":";;;AAAA;AACA;AACA;;AAEA,OAAOA,KAAK,IAEVC,SAAS,QAKJ,OAAO;AACd,SAASC,MAAM,EAAEC,QAAQ,QAAQ,uBAAuB;AACxD,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAGjC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,aAAa,CAAC;AACrC,IAAMC,eAAe,GAAG,GAAG;AAuB3B,MAAMC,WAAW,SAASX,SAAS,CAAqC;EAStEY,WAAW,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA,sCAwDAR,QAAQ,CAAC,CAACS,OAA4B,EAAEC,KAAa,KAAK;MACvE,IAAM;QAAEC,IAAI;QAAEC;MAAK,CAAC,GAAGH,OAAO,CAACC,KAAK,CAAC;MAErC,IACGA,KAAK,GAAG,CAAC,IAAID,OAAO,CAACC,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAI,IAC7CD,KAAK,GAAGD,OAAO,CAACI,MAAM,GAAG,CAAC,IAAIJ,OAAO,CAACC,KAAK,GAAG,CAAC,CAAC,CAACC,IAAI,KAAKA,IAAK,EAChE;QACA,IAAMG,SAAS,GAAGF,IAAI,CAACG,SAAS,CAACH,IAAI,CAACI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,iBAAUL,IAAI,eAAKG,SAAS;MAC9B;MAEA,OAAOH,IAAI;IACb,CAAC,CAAC;IAAA,oCAuFWV,QAAQ,CAAC,MAAM;MAC1B,IAAM;QAAEgB;MAAS,CAAC,GAAG,IAAI,CAACT,KAAK;MAC/B,IAAM;QAAEU,MAAM;QAAEC,KAAK;QAAEC;MAAa,CAAC,GAAG,IAAI,CAACC,KAAK;MAClDJ,QAAQ,CAAC;QAAEC,MAAM;QAAEE,YAAY;QAAED;MAAM,CAAC,CAAC;IAC3C,CAAC,EAAEd,eAAe,CAAC;IA7JjB,IAAI,CAACiB,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACK,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAACO,QAAQ,gBAAGpC,KAAK,CAACqC,SAAS,EAAE;IAEjC,IAAM;MAAEb,MAAM,EAANA,OAAM;MAAEE,YAAY,EAAZA,aAAY;MAAED,KAAK,EAALA;IAAM,CAAC,GAAGX,KAAK;IAC7C,IAAI,CAACa,KAAK,GAAG;MACXH,MAAM,EAANA,OAAM;MACNc,cAAc,EAAEd,OAAM;MACtBC,KAAK,EAALA,MAAK;MACLC,YAAY,EAAZA;IACF,CAAC;EACH;EAEAa,kBAAkB,CAChBC,SAA2B,EAC3BC,SAA2B,EACrB;IACN,IAAM;MAAEjB,MAAM,EAAEkB;IAAW,CAAC,GAAG,IAAI,CAAC5B,KAAK;IACzC,IAAM;MAAEU,MAAM;MAAEC,KAAK;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IAElD,IAAIe,UAAU,KAAKF,SAAS,CAAChB,MAAM,EAAE;MACnC;MACA,IAAI,CAACmB,QAAQ,CAAC;QAAEnB,MAAM,EAAEkB,UAAU;QAAEJ,cAAc,EAAEI;MAAW,CAAC,CAAC;IACnE;IAEA,IACEhB,YAAY,KAAKkB,SAAS,IAC1BlB,YAAY,IACZA,YAAY,KAAKe,SAAS,CAACf,YAAY,EACvC;MACA,IAAI,CAACmB,UAAU,EAAE;IACnB;IAEA,IACErB,MAAM,KAAKiB,SAAS,CAACjB,MAAM,IAC3BC,KAAK,KAAKgB,SAAS,CAAChB,KAAK,IACzBC,YAAY,KAAKe,SAAS,CAACf,YAAY,EACvC;MACA,IAAI,CAACoB,UAAU,EAAE;IACnB;EACF;EAEAC,oBAAoB,GAAS;IAC3B,IAAI,CAACD,UAAU,CAACE,KAAK,EAAE;EACzB;EAkBApB,kBAAkB,CAACqB,KAAqC,EAAQ;IAC9D,IAAM;MAAElC;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAM;MAAEW;IAAM,CAAC,GAAGwB,KAAK,CAACC,MAAM;IAC9B,IAAMZ,cAAc,GAAGvB,OAAO,CAACoC,QAAQ,CAAC1B,KAAK,EAAE,EAAE,CAAC,CAAC;IAEnDhB,GAAG,CAAC2C,MAAM,CAAC,oBAAoB,EAAEd,cAAc,CAAC;IAEhD,IAAI,CAACK,QAAQ,CAAC;MAAEL,cAAc;MAAEb,KAAK,EAAEmB;IAAU,CAAC,CAAC;EACrD;EAEAd,mBAAmB,CAACmB,KAAsC,EAAQ;IAChE,IAAIA,KAAK,CAACI,GAAG,KAAK,OAAO,EAAE;MACzBJ,KAAK,CAACK,cAAc,EAAE;MACtBL,KAAK,CAACM,eAAe,EAAE;MACvB,IAAI,CAACZ,QAAQ,CACX;QAAA,IAAC;UAAElB;QAAM,CAAC;QAAA,OAAMA,KAAK,IAAI,IAAI,GAAG;UAAEA,KAAK,EAAE;QAAG,CAAC,GAAG,IAAI;MAAA,CAAC,EACrD,MAAM;QACJ,IAAI,CAACqB,UAAU,EAAE;QACjB,IAAI,CAACA,UAAU,CAACE,KAAK,EAAE;MACzB,CAAC,CACF;IACH;EACF;EAEAjB,iBAAiB,CAACkB,KAAoC,EAAQ;IAC5D,IAAM;MAAExB;IAAM,CAAC,GAAGwB,KAAK,CAACC,MAAM;IAE9BzC,GAAG,CAAC2C,MAAM,CAAC,mBAAmB,EAAE3B,KAAK,CAAC;IAEtC,IAAI,CAACkB,QAAQ,CAAC;MAAElB;IAAM,CAAC,CAAC;EAC1B;EAEAO,oBAAoB,GAAS;IAC3B,IAAM;MAAER;IAAO,CAAC,GAAG,IAAI,CAACG,KAAK;IAC7B,IAAI,CAACgB,QAAQ,CAAC;MAAEL,cAAc,EAAEd,MAAM;MAAEE,YAAY,EAAE;IAAK,CAAC,CAAC;EAC/D;EAEAQ,kBAAkB,GAAS;IACzB,IAAM;MAAEI;IAAe,CAAC,GAAG,IAAI,CAACX,KAAK;IACrC,IAAI,CAACgB,QAAQ,CAAC;MAAEnB,MAAM,EAAEc,cAAc;MAAEZ,YAAY,EAAE;IAAK,CAAC,CAAC;EAC/D;EAEAO,mBAAmB,CAACgB,KAAoC,EAAQ;IAC9D,IAAM;MAAEzB;IAAO,CAAC,GAAG,IAAI,CAACG,KAAK;IAC7B,IAAI,CAACgB,QAAQ,CAAC;MAAEL,cAAc,EAAEd,MAAM;MAAEE,YAAY,EAAE;IAAM,CAAC,CAAC;IAC9DuB,KAAK,CAACM,eAAe,EAAE;EACzB;EAEApB,qBAAqB,CAACc,KAAiC,EAAQ;IAC7D;IACA,IAAIA,KAAK,CAACC,MAAM,KAAK,IAAI,CAACd,QAAQ,CAACoB,OAAO,EAAE;MAC1C,IAAI,CAACX,UAAU,EAAE;IACnB;EACF;EAEAA,UAAU,GAAS;IACjB,IAAI,IAAI,CAACT,QAAQ,CAACoB,OAAO,KAAK,IAAI,EAAE;MAClC,IAAI,CAACpB,QAAQ,CAACoB,OAAO,CAACC,MAAM,EAAE;MAC9B,IAAI,CAACrB,QAAQ,CAACoB,OAAO,CAACE,KAAK,EAAE;IAC/B;EACF;EAEAC,WAAW,GAAS;IAClB,IAAI,CAAChB,QAAQ,CAAC;MAAElB,KAAK,EAAE;IAAG,CAAC,CAAC;EAC9B;EAEAmC,cAAc,QAUL;IAAA,IAVM;MACb3C,IAAI;MACJC,IAAI;MACJO,KAAK;MACLC;IAMF,CAAC;IACC,IAAMF,MAAM,GAAGP,IAAI,IAAI,IAAI,IAAIC,IAAI,IAAI,IAAI,GAAG;MAAED,IAAI;MAAEC;IAAK,CAAC,GAAG0B,SAAS;IACxE,IAAMiB,MAAM,GACVnC,YAAY,KAAKkB,SAAS,GACtB;MAAEpB,MAAM;MAAEC;IAAM,CAAC,GACjB;MAAED,MAAM;MAAEC,KAAK;MAAEC;IAAa,CAAC;IACrC,IAAI,CAACiB,QAAQ,CAACkB,MAAM,CAAC;EACvB;EAQAC,MAAM,GAAiB;IACrB,IAAM;MAAE/C;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAM;MAAEU,MAAM;MAAEE,YAAY;MAAEY,cAAc;MAAEb;IAAM,CAAC,GAAG,IAAI,CAACE,KAAK;IAClE,IAAMoC,WAAW,GACftC,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACN,MAAM,KAAK,CAAC,GAC/BP,WAAW,CAACoD,WAAW,CAAC7C,MAAM,GAC9BM,KAAK,CAACN,MAAM;IAClB,IAAI8C,UAAU,GAAG,IAAI;IACrB,IAAIzC,MAAM,IAAI,IAAI,EAAE;MAClB,IAAM0C,WAAW,GAAGnD,OAAO,CAACoD,SAAS,CACnCC,IAAI,IAAIA,IAAI,CAACnD,IAAI,KAAKO,MAAM,CAACP,IAAI,IAAImD,IAAI,CAAClD,IAAI,KAAKM,MAAM,CAACN,IAAI,CAC/D;MACD+C,UAAU,GACRC,WAAW,IAAI,CAAC,GACZ,IAAI,CAACG,YAAY,CAACtD,OAAO,EAAEmD,WAAW,CAAC,GACvC1C,MAAM,CAACP,IAAI;IACnB;IAEA,oBACE,oBAAC,QAAQ;MACP,SAAS,EAAC,mCAAmC;MAC7C,SAAS,EAAES,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAI;IAAM,gBAEjC;MAAK,SAAS,EAAC;IAA4B,gBACzC;MAAK,SAAS,EAAC;IAA+B,gBAC5C;MAAK,SAAS,EAAC;IAA4B,gBACzC,mCAAO,eAAa,CAAQ,eAC5B;MACE,KAAK,EAAEX,OAAO,CAACoD,SAAS,CACtBC,IAAI,IACFA,IAAI,CAACnD,IAAI,MAAKqB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAErB,IAAI,KAClCmD,IAAI,CAAClD,IAAI,MAAKoB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEpB,IAAI,EACpC;MACF,SAAS,EAAC,eAAe;MACzB,QAAQ,EAAE,IAAI,CAACU;IAAmB,GAEjCb,OAAO,CAACuD,GAAG,CAAC,CAACC,UAAU,EAAEvD,KAAK,kBAC7B;MACE,GAAG,YAAKuD,UAAU,CAACtD,IAAI,cAAIsD,UAAU,CAACrD,IAAI,CAAG;MAC7C,KAAK,EAAEF;IAAM,GAEZ,IAAI,CAACqD,YAAY,CAACtD,OAAO,EAAEC,KAAK,CAAC,CAErC,CAAC,EACDD,OAAO,CAACI,MAAM,KAAK,CAAC,iBACnB;MAAQ,KAAK,EAAC,IAAI;MAAC,QAAQ;IAAA,GAAC,sBAE5B,CACD,CACM,eACT;MAAK,SAAS,EAAC;IAAkB,GAAC,iGAGlC,CAAM,CACF,eACN;MAAK,SAAS,EAAC;IAA+B,gBAC5C,oBAAC,MAAM;MACL,IAAI,EAAC,WAAW;MAChB,OAAO,EAAE,IAAI,CAACa,oBAAqB;MACnC,QAAQ,EAAER,MAAM,IAAI;IAAK,GAC1B,QAED,CAAS,eACT,oBAAC,MAAM;MACL,IAAI,EAAC,SAAS;MACd,SAAS,EAAC,MAAM;MAChB,OAAO,EAAE,IAAI,CAACU,kBAAmB;MACjC,QAAQ,EAAEI,cAAc,IAAI;IAAK,GAClC,MAED,CAAS,CACL,CACF,CACF,eAEN;MACE,SAAS,EAAC,yBAAyB;MACnC,OAAO,EAAE,IAAI,CAACH;IAAsB,gBAEpC;MAAK,SAAS,EAAC;IAAqB,gBAClC;MAAK,SAAS,EAAC;IAA2B,GAAE8B,UAAU,EAAC,SAAO,CAAM,CAChE,eACN;MAAK,SAAS,EAAC;IAA8D,gBAC3E;MAAK,SAAS,EAAC;IAAoE,gBACjF;MACE,IAAI,EAAC,MAAM;MACX,GAAG,EAAE,IAAI,CAAC7B,QAAS;MACnB,WAAW,EAAExB,WAAW,CAACoD,WAAY;MACrC,KAAK,EAAEvC,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAG;MACnB,QAAQ,EAAE,IAAI,CAACM,iBAAkB;MACjC,UAAU,EAAE,IAAI,CAACD,mBAAoB;MACrC,KAAK,EAAE;QAAE0C,KAAK,YAAKT,WAAW,GAAG,CAAC;MAAK,CAAE;MACzC,UAAU,EAAC;IAAO,EAClB,CACE,CACF,eACN;MAAK,SAAS,EAAC;IAAmB,gBAChC,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,UAAU;MACpB,OAAO,EAAE,IAAI,CAAC9B,mBAAoB;MAClC,IAAI,eAAE,oBAAC,eAAe;QAAC,IAAI,EAAE5B,MAAO;QAAC,SAAS,EAAC;MAAQ,EAAI;MAC3D,OAAO,EAAC;IAAuB,EAC/B,CACE,CACF,CACG;EAEf;AACF;AAAC,gBAxRKO,WAAW,iBACM,gBAAgB;AAAA,gBADjCA,WAAW,kBAGO;EACpBY,MAAM,EAAE,IAAI;EACZE,YAAY,EAAE,KAAK;EACnBD,KAAK,EAAE;AACT,CAAC;AAmRH,eAAeb,WAAW"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  import React, { PureComponent } from 'react';
3
5
  import classNames from 'classnames';
4
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownContainer.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsEdit","MarkdownContainer","render","isEditing","children","onDoubleClick","props","viewing","undefined"],"sources":["../../../src/controls/markdown/MarkdownContainer.tsx"],"sourcesContent":["import React, {\n MouseEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\n\ninterface MarkdownContainerProps {\n onDoubleClick: MouseEventHandler;\n children: ReactNode;\n isEditing?: boolean;\n}\n\nexport default class MarkdownContainer extends PureComponent<\n MarkdownContainerProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n };\n\n render(): ReactElement {\n const { isEditing, children, onDoubleClick } = this.props;\n\n return (\n <div\n className=\"markdown-editor-container h-100 w-100\"\n onDoubleClick={onDoubleClick}\n >\n <div\n className={classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing,\n })}\n >\n <span>\n double-click to edit <FontAwesomeIcon icon={vsEdit} />\n </span>\n </div>\n {children}\n </div>\n );\n }\n}\n"],"mappings":";AAAA,OAAOA,KAAK,IAEVC,aAAa,QAGR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,kBAAkB;AAQzC,eAAe,MAAMC,iBAAiB,SAASJ,aAAa,CAG1D;EAKAK,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,QAAQ;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACC,KAAK;IAEzD,oBACE;MACE,SAAS,EAAC,uCAAuC;MACjD,aAAa,EAAED;IAAc,gBAE7B;MACE,SAAS,EAAEP,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE;QAC/CS,OAAO,EAAEJ,SAAS,KAAKK,SAAS,IAAI,CAACL;MACvC,CAAC;IAAE,gBAEH,wEACuB,oBAAC,eAAe;MAAC,IAAI,EAAEH;IAAO,EAAG,CACjD,CACH,EACLI,QAAQ,CACL;EAEV;AACF;AAAC,gBA7BoBH,iBAAiB,kBAId;EACpBE,SAAS,EAAE;AACb,CAAC"}
1
+ {"version":3,"file":"MarkdownContainer.js","names":["React","PureComponent","classNames","FontAwesomeIcon","vsEdit","MarkdownContainer","render","isEditing","children","onDoubleClick","props","viewing","undefined"],"sources":["../../../src/controls/markdown/MarkdownContainer.tsx"],"sourcesContent":["import React, {\n MouseEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\n\ninterface MarkdownContainerProps {\n onDoubleClick: MouseEventHandler;\n children: ReactNode;\n isEditing?: boolean;\n}\n\nexport default class MarkdownContainer extends PureComponent<\n MarkdownContainerProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n };\n\n render(): ReactElement {\n const { isEditing, children, onDoubleClick } = this.props;\n\n return (\n <div\n className=\"markdown-editor-container h-100 w-100\"\n onDoubleClick={onDoubleClick}\n >\n <div\n className={classNames('text-muted', 'edit-hint', {\n viewing: isEditing === undefined || !isEditing,\n })}\n >\n <span>\n double-click to edit <FontAwesomeIcon icon={vsEdit} />\n </span>\n </div>\n {children}\n </div>\n );\n }\n}\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAEVC,aAAa,QAGR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,QAAQ,kBAAkB;AAQzC,eAAe,MAAMC,iBAAiB,SAASJ,aAAa,CAG1D;EAKAK,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,QAAQ;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACC,KAAK;IAEzD,oBACE;MACE,SAAS,EAAC,uCAAuC;MACjD,aAAa,EAAED;IAAc,gBAE7B;MACE,SAAS,EAAEP,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE;QAC/CS,OAAO,EAAEJ,SAAS,KAAKK,SAAS,IAAI,CAACL;MACvC,CAAC;IAAE,gBAEH,kCAAM,uBACiB,mCAAC,eAAe;MAAC,IAAI,EAAEH;IAAO,EAAG,CACjD,CACH,EACLI,QAAQ,CACL;EAEV;AACF;AAAC,gBA7BoBH,iBAAiB,kBAId;EACpBE,SAAS,EAAE;AACb,CAAC"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  import React, { PureComponent } from 'react';
3
5
  import Markdown from 'react-markdown';
4
6
  import { Code, Editor } from '@deephaven/console';
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.js","names":["React","PureComponent","Markdown","Code","Editor","renderMarkdown","props","children","className","language","undefined","startsWith","substring","Children","map","child","trim","MarkdownEditor","constructor","container","render","isEditing","content","onEditorInitialized","value","lineNumbers","code"],"sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport Markdown from 'react-markdown';\nimport { CodeComponent } from 'react-markdown/src/ast-to-react';\nimport { Code, Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\n\ninterface MarkdownEditorProps {\n isEditing: boolean;\n content: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n}\n\nconst renderMarkdown: CodeComponent = props => {\n const { children, className } = props;\n const language =\n className !== undefined && className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n return (\n <pre>\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </pre>\n );\n};\nexport default class MarkdownEditor extends PureComponent<\n MarkdownEditorProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n content: '',\n };\n\n constructor(props: MarkdownEditorProps) {\n super(props);\n this.container = null;\n }\n\n container: HTMLDivElement | null;\n\n render(): ReactElement {\n const { isEditing, content, onEditorInitialized } = this.props;\n return (\n <div\n className=\"markdown-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown components={{ code: renderMarkdown }}>{content}</Markdown>\n )}\n </div>\n );\n }\n}\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,QAAQ,MAAM,gBAAgB;AAErC,SAASC,IAAI,EAAEC,MAAM,QAAQ,oBAAoB;AASjD,IAAMC,cAA6B,GAAGC,KAAK,IAAI;EAC7C,IAAM;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGF,KAAK;EACrC,IAAMG,QAAQ,GACZD,SAAS,KAAKE,SAAS,IAAIF,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEG,UAAU,CAAC,WAAW,CAAC,GACzDH,SAAS,CAACI,SAAS,CAAC,CAAC,CAAC,GACtB,WAAW;EACjB,oBACE,8CACE,+CACE,oBAAC,IAAI;IAAC,QAAQ,EAAEH;EAAS,GACtBT,KAAK,CAACa,QAAQ,CAACC,GAAG,CAACP,QAAQ,EAAEQ,KAAK,IACjC,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACC,IAAI,EAAE,GAAGD,KAAK,CACjD,CACI,CACF,CACH;AAEV,CAAC;AACD,eAAe,MAAME,cAAc,SAAShB,aAAa,CAGvD;EAMAiB,WAAW,CAACZ,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACa,SAAS,GAAG,IAAI;EACvB;EAIAC,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,OAAO;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC9D,oBACE;MACE,SAAS,EAAC,2BAA2B;MACrC,GAAG,EAAEa,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B;IAAE,GAEDE,SAAS,gBACR,oBAAC,MAAM;MACL,QAAQ,EAAE;QACRZ,QAAQ,EAAE,UAAU;QACpBe,KAAK,EAAEF,OAAO;QACdG,WAAW,EAAE;MACf,CAAE;MACF,mBAAmB,EAAEF;IAAoB,EACzC,gBAEF,oBAAC,QAAQ;MAAC,UAAU,EAAE;QAAEG,IAAI,EAAErB;MAAe;IAAE,GAAEiB,OAAO,CACzD,CACG;EAEV;AACF;AAAC,gBAxCoBL,cAAc,kBAIX;EACpBI,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE;AACX,CAAC"}
1
+ {"version":3,"file":"MarkdownEditor.js","names":["React","PureComponent","Markdown","Code","Editor","renderMarkdown","props","children","className","language","undefined","startsWith","substring","Children","map","child","trim","MarkdownEditor","constructor","container","render","isEditing","content","onEditorInitialized","value","lineNumbers","code"],"sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport Markdown from 'react-markdown';\nimport { CodeComponent } from 'react-markdown/src/ast-to-react';\nimport { Code, Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\n\ninterface MarkdownEditorProps {\n isEditing: boolean;\n content: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n}\n\nconst renderMarkdown: CodeComponent = props => {\n const { children, className } = props;\n const language =\n className !== undefined && className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n return (\n <pre>\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </pre>\n );\n};\nexport default class MarkdownEditor extends PureComponent<\n MarkdownEditorProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n content: '',\n };\n\n constructor(props: MarkdownEditorProps) {\n super(props);\n this.container = null;\n }\n\n container: HTMLDivElement | null;\n\n render(): ReactElement {\n const { isEditing, content, onEditorInitialized } = this.props;\n return (\n <div\n className=\"markdown-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown components={{ code: renderMarkdown }}>{content}</Markdown>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAsB,OAAO;AAC1D,OAAOC,QAAQ,MAAM,gBAAgB;AAErC,SAASC,IAAI,EAAEC,MAAM,QAAQ,oBAAoB;AASjD,IAAMC,cAA6B,GAAGC,KAAK,IAAI;EAC7C,IAAM;IAAEC,QAAQ;IAAEC;EAAU,CAAC,GAAGF,KAAK;EACrC,IAAMG,QAAQ,GACZD,SAAS,KAAKE,SAAS,IAAIF,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEG,UAAU,CAAC,WAAW,CAAC,GACzDH,SAAS,CAACI,SAAS,CAAC,CAAC,CAAC,GACtB,WAAW;EACjB,oBACE,8CACE,+CACE,oBAAC,IAAI;IAAC,QAAQ,EAAEH;EAAS,GACtBT,KAAK,CAACa,QAAQ,CAACC,GAAG,CAACP,QAAQ,EAAEQ,KAAK,IACjC,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACC,IAAI,EAAE,GAAGD,KAAK,CACjD,CACI,CACF,CACH;AAEV,CAAC;AACD,eAAe,MAAME,cAAc,SAAShB,aAAa,CAGvD;EAMAiB,WAAW,CAACZ,KAA0B,EAAE;IACtC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACa,SAAS,GAAG,IAAI;EACvB;EAIAC,MAAM,GAAiB;IACrB,IAAM;MAAEC,SAAS;MAAEC,OAAO;MAAEC;IAAoB,CAAC,GAAG,IAAI,CAACjB,KAAK;IAC9D,oBACE;MACE,SAAS,EAAC,2BAA2B;MACrC,GAAG,EAAEa,SAAS,IAAI;QAChB,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC5B;IAAE,GAEDE,SAAS,gBACR,oBAAC,MAAM;MACL,QAAQ,EAAE;QACRZ,QAAQ,EAAE,UAAU;QACpBe,KAAK,EAAEF,OAAO;QACdG,WAAW,EAAE;MACf,CAAE;MACF,mBAAmB,EAAEF;IAAoB,EACzC,gBAEF,oBAAC,QAAQ;MAAC,UAAU,EAAE;QAAEG,IAAI,EAAErB;MAAe;IAAE,GAAEiB,OAAO,CACzD,CACG;EAEV;AACF;AAAC,gBAxCoBL,cAAc,kBAIX;EACpBI,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAE;AACX,CAAC"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  import React, { PureComponent } from 'react';
3
5
  import { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';
4
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Button","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <Button kind=\"ghost\" className=\"title\" onClick={onCreate}>\n New Markdown Note\n </Button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <Button\n kind=\"ghost\"\n className=\"title\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </Button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can&#39;t undo this action.</ModalBody>\n <ModalFooter>\n <Button kind=\"secondary\" onClick={this.handleDeleteModalClose}>\n Cancel\n </Button>\n <Button\n kind=\"danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n >\n Delete\n </Button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Button","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <Button kind=\"ghost\" className=\"title\" onClick={onCreate}>\n New Markdown Note\n </Button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <Button\n kind=\"ghost\"\n className=\"title\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </Button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can&#39;t undo this action.</ModalBody>\n <ModalFooter>\n <Button kind=\"secondary\" onClick={this.handleDeleteModalClose}>\n Cancel\n </Button>\n <Button\n kind=\"danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n >\n Delete\n </Button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- 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; }
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
2
4
  class MarkdownUtils {
3
5
  /**
4
6
  * Retrieves a new markdown title that does not conflict with the current titles
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownUtils.js","names":["MarkdownUtils","getNewMarkdownTitle","usedTitles","title","DEFAULT_TITLE","titleIndex","indexOf"],"sources":["../../../src/controls/markdown/MarkdownUtils.ts"],"sourcesContent":["class MarkdownUtils {\n static DEFAULT_TITLE = 'Note';\n\n static DEFAULT_CONTENT =\n '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.';\n\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles: string[]): string {\n let title = `${MarkdownUtils.DEFAULT_TITLE}`;\n let titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = `${MarkdownUtils.DEFAULT_TITLE}-${titleIndex}`;\n }\n\n return title;\n }\n}\n\nexport default MarkdownUtils;\n"],"mappings":";AAAA,MAAMA,aAAa,CAAC;EAMlB;AACF;AACA;AACA;AACA;EACE,OAAOC,mBAAmB,CAACC,UAAoB,EAAU;IACvD,IAAIC,KAAK,aAAMH,aAAa,CAACI,aAAa,CAAE;IAC5C,IAAIC,UAAU,GAAG,CAAC;IAClB,OAAOH,UAAU,CAACI,OAAO,CAACH,KAAK,CAAC,IAAI,CAAC,EAAE;MACrCE,UAAU,IAAI,CAAC;MACfF,KAAK,aAAMH,aAAa,CAACI,aAAa,cAAIC,UAAU,CAAE;IACxD;IAEA,OAAOF,KAAK;EACd;AACF;AAAC,gBArBKH,aAAa,mBACM,MAAM;AAAA,gBADzBA,aAAa,qBAIf,4EAA4E;AAmBhF,eAAeA,aAAa"}
1
+ {"version":3,"file":"MarkdownUtils.js","names":["MarkdownUtils","getNewMarkdownTitle","usedTitles","title","DEFAULT_TITLE","titleIndex","indexOf"],"sources":["../../../src/controls/markdown/MarkdownUtils.ts"],"sourcesContent":["class MarkdownUtils {\n static DEFAULT_TITLE = 'Note';\n\n static DEFAULT_CONTENT =\n '# Markdown Note\\n\\nThis note can be edited using **markdown** for styling.';\n\n /**\n * Retrieves a new markdown title that does not conflict with the current titles\n * @param usedTitles Markdown titles that are already in use\n * @returns The new title\n */\n static getNewMarkdownTitle(usedTitles: string[]): string {\n let title = `${MarkdownUtils.DEFAULT_TITLE}`;\n let titleIndex = 0;\n while (usedTitles.indexOf(title) >= 0) {\n titleIndex += 1;\n title = `${MarkdownUtils.DEFAULT_TITLE}-${titleIndex}`;\n }\n\n return title;\n }\n}\n\nexport default MarkdownUtils;\n"],"mappings":";;;AAAA,MAAMA,aAAa,CAAC;EAMlB;AACF;AACA;AACA;AACA;EACE,OAAOC,mBAAmB,CAACC,UAAoB,EAAU;IACvD,IAAIC,KAAK,aAAMH,aAAa,CAACI,aAAa,CAAE;IAC5C,IAAIC,UAAU,GAAG,CAAC;IAClB,OAAOH,UAAU,CAACI,OAAO,CAACH,KAAK,CAAC,IAAI,CAAC,EAAE;MACrCE,UAAU,IAAI,CAAC;MACfF,KAAK,aAAMH,aAAa,CAACI,aAAa,cAAIC,UAAU,CAAE;IACxD;IAEA,OAAOF,KAAK;EACd;AACF;AAAC,gBArBKH,aAAa,mBACM,MAAM;AAAA,gBADzBA,aAAa,qBAIf,4EAA4E;AAmBhF,eAAeA,aAAa"}