@deephaven/dashboard-core-plugins 0.50.1-beta.4 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/ChartBuilderPlugin.js.map +1 -1
  2. package/dist/ChartPlugin.js +1 -1
  3. package/dist/ChartPlugin.js.map +1 -1
  4. package/dist/ConsolePlugin.js.map +1 -1
  5. package/dist/FilterPlugin.js.map +1 -1
  6. package/dist/GridPlugin.js.map +1 -1
  7. package/dist/LinkerPlugin.js.map +1 -1
  8. package/dist/MarkdownPlugin.js.map +1 -1
  9. package/dist/PandasPlugin.js.map +1 -1
  10. package/dist/WidgetLoaderPlugin.d.ts.map +1 -1
  11. package/dist/WidgetLoaderPlugin.js +1 -2
  12. package/dist/WidgetLoaderPlugin.js.map +1 -1
  13. package/dist/controls/ControlType.js.map +1 -1
  14. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  15. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  16. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  17. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  18. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  19. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  20. package/dist/events/ChartEvent.js.map +1 -1
  21. package/dist/events/ConsoleEvent.js.map +1 -1
  22. package/dist/events/InputFilterEvent.js.map +1 -1
  23. package/dist/events/IrisGridEvent.js.map +1 -1
  24. package/dist/events/NotebookEvent.js.map +1 -1
  25. package/dist/events/PQEvent.js.map +1 -1
  26. package/dist/events/PandasEvent.js.map +1 -1
  27. package/dist/events/TabEvent.js.map +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/linker/Linker.js.map +1 -1
  33. package/dist/linker/LinkerLink.js.map +1 -1
  34. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  35. package/dist/linker/LinkerUtils.js +1 -1
  36. package/dist/linker/LinkerUtils.js.map +1 -1
  37. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  38. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  39. package/dist/panels/ChartPanel.js +3 -0
  40. package/dist/panels/ChartPanel.js.map +1 -1
  41. package/dist/panels/ChartPanelUtils.js.map +1 -1
  42. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  43. package/dist/panels/ConsolePanel.d.ts +2 -2
  44. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  45. package/dist/panels/ConsolePanel.js.map +1 -1
  46. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  47. package/dist/panels/FileExplorerPanel.js.map +1 -1
  48. package/dist/panels/FilterSetManager.js.map +1 -1
  49. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  50. package/dist/panels/InputFilterPanel.js +0 -1
  51. package/dist/panels/InputFilterPanel.js.map +1 -1
  52. package/dist/panels/IrisGridPanel.js +4 -0
  53. package/dist/panels/IrisGridPanel.js.map +1 -1
  54. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  55. package/dist/panels/IrisGridPanelTypes.js.map +1 -1
  56. package/dist/panels/LogPanel.js.map +1 -1
  57. package/dist/panels/MarkdownNotebook.js.map +1 -1
  58. package/dist/panels/MarkdownPanel.js.map +1 -1
  59. package/dist/panels/MockFileStorage.js.map +1 -1
  60. package/dist/panels/MockFileStorageTable.js.map +1 -1
  61. package/dist/panels/NotebookPanel.js.map +1 -1
  62. package/dist/panels/PandasPanel.js.map +1 -1
  63. package/dist/panels/Panel.js.map +1 -1
  64. package/dist/panels/PanelContextMenu.js.map +1 -1
  65. package/dist/panels/RenameDialog.js.map +1 -1
  66. package/dist/panels/WidgetPanel.js.map +1 -1
  67. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  68. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  69. package/dist/redux/actions.js.map +1 -1
  70. package/dist/redux/selectors.js.map +1 -1
  71. package/dist/useHydrateGrid.d.ts.map +1 -1
  72. package/dist/useHydrateGrid.js +2 -1
  73. package/dist/useHydrateGrid.js.map +1 -1
  74. package/dist/useLoadTablePlugin.d.ts +8 -0
  75. package/dist/useLoadTablePlugin.d.ts.map +1 -0
  76. package/dist/useLoadTablePlugin.js +30 -0
  77. package/dist/useLoadTablePlugin.js.map +1 -0
  78. package/package.json +24 -24
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","componentDidUpdate","prevProps","componentPanel","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n ComponentType,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel?: ComponentType | Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (e: MouseEvent) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n }\n\n componentDidUpdate(prevProps: PanelProps): void {\n const { componentPanel, glEventHub } = this.props;\n\n // componentPanel ref could start undefined w/ WidgetLoaderPlugin wrapping panels\n if (prevProps.componentPanel == null && componentPanel != null) {\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n if (componentPanel != null) {\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked(e);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAKVC,aAAa,QAGR,OAAO;AACd,OAAOC,QAAQ,MAAM,WAAW;AAChC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,aAAa;AACjC,SAEEC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,uBAAuB;AAC9B,SAASC,WAAW,EAAEC,UAAU,QAAQ,sBAAsB;AAO9D,SAASC,aAAa,QAAQ,kBAAkB;AAChD,OAAOC,GAAG,MAAM,gBAAgB;AAAC,SAExBC,YAAY,EAAEC,gBAAgB,EAAEC,QAAQ;AAAA,OAC1CC,gBAAgB;AAAA,OAChBC,YAAY;AAAA;AAAA;AAAA;AAEnB,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAM,CAAC,OAAO,CAAC;AAqC/B;AACA;AACA;AACA;AACA;AACA,MAAMC,KAAK,SAASlB,aAAa,CAAyB;EAyBxDmB,WAAW,CAACC,KAAiB,EAAE;IAC7B,KAAK,CAACA,KAAK,CAAC;IAAC,4CAkNMjB,OAAO,CAC1B,CAACkB,OAAwB,EAAEC,UAAmB,EAAEC,WAAoB,KAAK;MACvE,IAAMC,iBAAiB,GAAG,EAAE;MAC5B,IAAIF,UAAU,EAAE;QACdE,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACC,cAAc,EAAE,CAAC;MAC/C;MACA,IAAIH,WAAW,EAAE;QACfC,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAACE,eAAe,EAAE,CAAC;MAChD;MACA,OAAO,CAAC,GAAGH,iBAAiB,EAAE,GAAGH,OAAO,CAAC;IAC3C,CAAC,CACF;IA3NC,IAAI,CAACO,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACD,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACF,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACG,UAAU,GAAG,IAAI,CAACA,UAAU,CAACH,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACI,UAAU,GAAG,IAAI,CAACA,UAAU,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACN,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACO,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACP,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACQ,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACR,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACS,UAAU,GAAG,IAAI,CAACA,UAAU,CAACT,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACU,aAAa,GAAG,IAAI,CAACA,aAAa,CAACV,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACW,cAAc,GAAG,IAAI,CAACA,cAAc,CAACX,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACY,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACZ,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACa,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACb,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACc,sBAAsB,GAAG,IAAI,CAACA,sBAAsB,CAACd,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAACe,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACf,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACgB,SAAS,GAAG,IAAI,CAACA,SAAS,CAAChB,IAAI,CAAC,IAAI,CAAC;IAE1C,IAAM;MAAEiB;IAAY,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAClC,IAAI,CAAC2B,KAAK,GAAG;MACXC,KAAK,EAAEzC,WAAW,CAAC0C,qBAAqB,CAACH,WAAW,CAAC;MACrDI,gBAAgB,EAAE;IACpB,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAM;MAAEL,WAAW;MAAEM;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;IAE9C0B,WAAW,CAACO,EAAE,CAAC,QAAQ,EAAE,IAAI,CAACnB,YAAY,CAAC;IAC3CY,WAAW,CAACO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAChB,gBAAgB,CAAC;IAC7CS,WAAW,CAACO,EAAE,CAAC,OAAO,EAAE,IAAI,CAACf,UAAU,CAAC;IACxCQ,WAAW,CAACO,EAAE,CAAC,MAAM,EAAE,IAAI,CAACpB,UAAU,CAAC;IACvCa,WAAW,CAACO,EAAE,CAAC,KAAK,EAAE,IAAI,CAACR,SAAS,CAAC;IACrCC,WAAW,CAACO,EAAE,CAAC,YAAY,EAAE,IAAI,CAACT,gBAAgB,CAAC;IACnDQ,UAAU,CAACC,EAAE,CAAC1C,YAAY,CAAC2C,cAAc,EAAE,IAAI,CAACnB,mBAAmB,CAAC;IACpEiB,UAAU,CAACC,EAAE,CAAC1C,YAAY,CAAC4C,cAAc,EAAE,IAAI,CAACnB,mBAAmB,CAAC;IACpEgB,UAAU,CAACC,EAAE,CAACxC,QAAQ,CAAC2C,KAAK,EAAE,IAAI,CAAChB,cAAc,CAAC;IAClDY,UAAU,CAACC,EAAE,CAACxC,QAAQ,CAAC4C,IAAI,EAAE,IAAI,CAAClB,aAAa,CAAC;IAChDa,UAAU,CAACC,EAAE,CACXzC,gBAAgB,CAAC8C,iBAAiB,EAClC,IAAI,CAAC9B,qBAAqB,CAC3B;EACH;EAEA+B,kBAAkB,CAACC,SAAqB,EAAQ;IAC9C,IAAM;MAAEC,cAAc;MAAET;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;;IAEjD;IACA,IAAIwC,SAAS,CAACC,cAAc,IAAI,IAAI,IAAIA,cAAc,IAAI,IAAI,EAAE;MAC9DT,UAAU,CAACU,IAAI,CAACtD,UAAU,CAACuD,KAAK,EAAEF,cAAc,CAAC;IACnD;EACF;EAEAG,oBAAoB,GAAS;IAC3B,IAAM;MAAEH,cAAc;MAAEf,WAAW;MAAEM;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;IAE9D0B,WAAW,CAACmB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC/B,YAAY,CAAC;IAC5CY,WAAW,CAACmB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC5B,gBAAgB,CAAC;IAC9CS,WAAW,CAACmB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC3B,UAAU,CAAC;IACzCQ,WAAW,CAACmB,GAAG,CAAC,MAAM,EAAE,IAAI,CAAChC,UAAU,CAAC;IACxCa,WAAW,CAACmB,GAAG,CAAC,KAAK,EAAE,IAAI,CAACpB,SAAS,CAAC;IACtCC,WAAW,CAACmB,GAAG,CAAC,YAAY,EAAE,IAAI,CAACrB,gBAAgB,CAAC;IACpDQ,UAAU,CAACa,GAAG,CAACtD,YAAY,CAAC2C,cAAc,EAAE,IAAI,CAACnB,mBAAmB,CAAC;IACrEiB,UAAU,CAACa,GAAG,CAACtD,YAAY,CAAC4C,cAAc,EAAE,IAAI,CAACnB,mBAAmB,CAAC;IACrEgB,UAAU,CAACa,GAAG,CAACpD,QAAQ,CAAC2C,KAAK,EAAE,IAAI,CAAChB,cAAc,CAAC;IACnDY,UAAU,CAACa,GAAG,CAACpD,QAAQ,CAAC4C,IAAI,EAAE,IAAI,CAAClB,aAAa,CAAC;IACjDa,UAAU,CAACa,GAAG,CACZrD,gBAAgB,CAAC8C,iBAAiB,EAClC,IAAI,CAAC9B,qBAAqB,CAC3B;IAED,IAAIiC,cAAc,IAAI,IAAI,EAAE;MAC1BT,UAAU,CAACU,IAAI,CAACtD,UAAU,CAAC0D,OAAO,EAAEL,cAAc,CAAC;IACrD;EACF;EAEAhB,SAAS,CAACsB,GAAQ,EAAQ;IACxB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACf,IAAI,CAACC,QAAQ,CAAC;QACZpB,KAAK,EAAEzC,WAAW,CAAC8D,eAAe,CAACF,GAAG;MACxC,CAAC,CAAC;IACJ;IACA;IACA;IACA,IAAI,CAACG,WAAW,EAAE;IAElB,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACnD,KAAK;IAC5BmD,KAAK,CAACJ,GAAG,CAAC;EACZ;EAEAvB,gBAAgB,CAAC4B,CAAa,EAAQ;IACpC,IAAM;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACrD,KAAK;IACnCqD,YAAY,CAACD,CAAC,CAAC;EACjB;EAEA5C,qBAAqB,GAA2B;IAC9C,IAAM;MAAE8C;IAAkB,CAAC,GAAG,IAAI,CAACtD,KAAK;IACxCsD,iBAAiB,CAAC,YAAO,CAAC;EAC5B;EAEA3C,WAAW,CAAC4C,KAAiC,EAAQ;IACnD,IAAM;MAAEd,cAAc;MAAET;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;IACjDgC,UAAU,CAACU,IAAI,CAACtD,UAAU,CAACoE,KAAK,EAAEf,cAAc,CAAC;IAEjD,IAAM;MAAEgB;IAAQ,CAAC,GAAG,IAAI,CAACzD,KAAK;IAC9ByD,OAAO,CAACF,KAAK,CAAC;EAChB;EAEA3C,UAAU,CAAC2C,KAAiC,EAAQ;IAClD,IAAM;MAAEG;IAAO,CAAC,GAAG,IAAI,CAAC1D,KAAK;IAC7B0D,MAAM,CAACH,KAAK,CAAC;EACf;EAEA1C,UAAU,GAA2B;IACnC,IAAM;MAAE8C;IAAO,CAAC,GAAG,IAAI,CAAC3D,KAAK;IAC7B2D,MAAM,CAAC,YAAO,CAAC;EACjB;EAEA7C,YAAY,GAA2B;IACrC,IAAM;MAAE8C;IAAS,CAAC,GAAG,IAAI,CAAC5D,KAAK;IAC/B4D,QAAQ,CAAC,YAAO,CAAC;EACnB;EAEA7C,mBAAmB,CAAC8C,OAAmB,EAAQ;IAC7C,IAAM;MAAEC;IAAe,CAAC,GAAG,IAAI,CAAC9D,KAAK;IACrC8D,cAAc,CAACD,OAAO,CAAC;EACzB;EAEA7C,mBAAmB,CACjB6C,OAAmB,EACnBE,MAA+C,EACzC;IACN,IAAM;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAChE,KAAK;IACpCgE,aAAa,CAACH,OAAO,EAAEE,MAAM,CAAC;EAChC;EAEA9C,gBAAgB,GAA2B;IACzC,IAAM;MAAEgD;IAAa,CAAC,GAAG,IAAI,CAACjE,KAAK;IACnCiE,YAAY,CAAC,YAAO,CAAC;EACvB;EAEA/C,UAAU,GAA2B;IACnC,IAAM;MAAEgD;IAAO,CAAC,GAAG,IAAI,CAAClE,KAAK;IAC7BkE,MAAM,CAAC,YAAO,CAAC;EACjB;EAEA/C,aAAa,GAA2B;IACtC,IAAM;MAAEgD;IAAU,CAAC,GAAG,IAAI,CAACnE,KAAK;IAChCmE,SAAS,CAAC,YAAO,CAAC;EACpB;EAEA/C,cAAc,GAA2B;IACvC,IAAM;MAAEgD;IAAW,CAAC,GAAG,IAAI,CAACpE,KAAK;IACjCoE,UAAU,CAAC,YAAO,CAAC;EACrB;EAEA/C,kBAAkB,GAAS;IACzB,IAAI,CAAC2B,QAAQ,CAAC;MAAElB,gBAAgB,EAAE;IAAM,CAAC,CAAC;EAC5C;EAEAP,sBAAsB,GAAS;IAC7B,IAAI,CAACyB,QAAQ,CAAC;MAAElB,gBAAgB,EAAE;IAAK,CAAC,CAAC;EAC3C;EAEAR,kBAAkB,CAAC+C,QAAgB,EAAQ;IACzC,IAAM;MAAE3C;IAAY,CAAC,GAAG,IAAI,CAAC1B,KAAK;IAClC,IAAI,CAACgD,QAAQ,CAAC;MAAElB,gBAAgB,EAAE,KAAK;MAAEF,KAAK,EAAEyC;IAAS,CAAC,CAAC;IAC3D,IAAMC,IAAI,GAAGnF,WAAW,CAACoF,oBAAoB,CAAC7C,WAAW,CAAC;IAC1D,IAAM8C,MAAM,GAAGrF,WAAW,CAACsF,+BAA+B,CAAC/C,WAAW,CAAC;IACvErC,aAAa,CAACmF,MAAM,CAAC;IACrBrF,WAAW,CAACuF,eAAe,CAACJ,IAAI,EAAEE,MAAM,EAAEH,QAAQ,CAAC;EACrD;EAEA3D,eAAe,GAAS;IACtB,IAAM;MAAEgB,WAAW;MAAEM;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;IAC9C,IAAMsE,IAAI,GAAGnF,WAAW,CAACoF,oBAAoB,CAAC7C,WAAW,CAAC;IAC1D,IAAM8C,MAAM,GAAGrF,WAAW,CAACsF,+BAA+B,CAAC/C,WAAW,CAAC;IACvE,IAAI8C,MAAM,IAAI,IAAI,EAAE;MAClB5E,GAAG,CAAC+E,KAAK,CAAC,+CAA+C,EAAEjD,WAAW,CAAC;MACvE;IACF;IACA,IAAMkD,WAAW,GAAGzF,WAAW,CAAC0F,cAAc,CAC5CP,IAAI,EACJE,MAAM,CACP;IACD,IAAII,WAAW,KAAK,IAAI,EAAE;MACxB5C,UAAU,CAACU,IAAI,CAACtD,UAAU,CAAC0F,MAAM,EAAE,IAAI,EAAEF,WAAW,CAAC;IACvD;EACF;EAEAtE,cAAc,GAAkB;IAC9B,OAAO;MACLsB,KAAK,EAAE,YAAY;MACnBmD,KAAK,EAAE,EAAE;MACTC,KAAK,EAAEhG,cAAc,CAACiG,MAAM,CAACC,IAAI;MACjCC,MAAM,EAAE,IAAI,CAACzE;IACf,CAAC;EACH;EAEAH,eAAe,GAAkB;IAC/B,OAAO;MACLqB,KAAK,EAAE,QAAQ;MACfmD,KAAK,EAAE,EAAE;MACTC,KAAK,EAAEhG,cAAc,CAACiG,MAAM,CAACG,MAAM;MACnCD,MAAM,EAAE,IAAI,CAAC5D;IACf,CAAC;EACH;EAeA8D,MAAM,GAAiB;IACrB,IAAM;MACJC,QAAQ;MACRC,SAAS;MACTC,gBAAgB;MAChB9D,WAAW;MACXtB,iBAAiB;MACjBqF,YAAY;MACZC,QAAQ;MACRC,SAAS;MACTzF,UAAU;MACVC;IACF,CAAC,GAAG,IAAI,CAACH,KAAK;IACd,IAAM;MAAE+C,GAAG,EAAE6C;IAAM,CAAC,GAAGlE,WAAW;IAClC,IAAM;MAAEI,gBAAgB;MAAEF;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAE9C,oBACE;MACE,SAAS,EAAE7C,UAAU,CAAC,wBAAwB,EAAEyG,SAAS,CAAE;MAC3D,cAAc,EAAE,IAAI,CAAC5E,WAAY;MACjC,aAAa,EAAE,IAAI,CAACC,UAAW;MAAA,WAE9B0E,QAAQ,eACT,KAAC,cAAc;QACb,YAAY,EAAEG,YAAa;QAC3B,QAAQ,EAAEC,QAAS;QACnB,SAAS,EAAEC;MAAU,EACrB,EACDC,KAAK,IAAI,IAAI,iBACZ/G,QAAQ,CAACgH,YAAY,eACnB;QAAA,wBACE,KAAC,gBAAgB;UACf,WAAW,EAAEnE,WAAY;UACzB,iBAAiB,EAAE,IAAI,CAACoE,kBAAkB,CACxC1F,iBAAiB,EACjBF,UAAU,EACVC,WAAW;QACX,EACF,EACDA,WAAW,iBACV,KAAC,YAAY;UACX,OAAO,EAAE2B,gBAAiB;UAC1B,KAAK,EAAEF,KAAM;UACb,QAAQ,EAAC,OAAO;UAChB,QAAQ,EAAE,IAAI,CAACP,kBAAmB;UAClC,QAAQ,EAAE,IAAI,CAACC;QAAmB,EAErC,EACAkE,gBAAgB,IAAI,IAAI,iBACvB,KAAC,OAAO;UACN,WAAW;UACX,OAAO,EAAE;YACPO,SAAS,EAAE;UACb,CAAE;UACF,eAAe,EAAC,kBAAkB;UAAA,UAEjCP,gBAAgB;QAAE,EAEtB;MAAA,EACA,EACHI,KAAK,CAACI,OAAO,CAAC,CAAC,CAAC,CAAC;MAAA,CAClB;IAAA,EACC;EAEV;AACF;AAAC,gBA1TKlG,KAAK,kBACa;EACpByF,SAAS,EAAE,EAAE;EACbpC,KAAK,EAAE,MAAY8C,SAAS;EAC5B5C,YAAY,EAAE,MAAY4C,SAAS;EACnC3C,iBAAiB,EAAE,MAAY2C,SAAS;EACxCxC,OAAO,EAAE,MAAYwC,SAAS;EAC9BvC,MAAM,EAAE,MAAYuC,SAAS;EAC7BtC,MAAM,EAAE,MAAYsC,SAAS;EAC7BrC,QAAQ,EAAE,MAAYqC,SAAS;EAC/BnC,cAAc,EAAE,MAAYmC,SAAS;EACrCjC,aAAa,EAAE,MAAYiC,SAAS;EACpChC,YAAY,EAAE,MAAYgC,SAAS;EACnC/B,MAAM,EAAE,MAAY+B,SAAS;EAC7B9B,SAAS,EAAE,MAAY8B,SAAS;EAChC7B,UAAU,EAAE,MAAY6B,SAAS;EACjCT,gBAAgB,EAAE,IAAI;EACtBpF,iBAAiB,EAAE,EAAE;EACrBqF,YAAY,EAAE,IAAI;EAClBE,SAAS,EAAE,KAAK;EAChBD,QAAQ,EAAE,IAAI;EACdxF,UAAU,EAAE,KAAK;EACjBC,WAAW,EAAE;AACf,CAAC;AAqSH,eAAeL,KAAK"}
1
+ {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","Panel","constructor","props","_defineProperty","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","componentDidUpdate","prevProps","componentPanel","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","onClearAllFilters","arguments","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","onFocusCapture","onBlurCapture","createPortal","getAdditionActions","isShown","value","itemType","onCancel","onSubmit","interactive","options","placement","popperClassName","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n ComponentType,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { IdeSession } from '@deephaven/jsapi-types';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel?: ComponentType | Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (e: MouseEvent) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n }\n\n componentDidUpdate(prevProps: PanelProps): void {\n const { componentPanel, glEventHub } = this.props;\n\n // componentPanel ref could start undefined w/ WidgetLoaderPlugin wrapping panels\n if (prevProps.componentPanel == null && componentPanel != null) {\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n if (componentPanel != null) {\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n }\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked(e);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize(\n (actions: ContextAction[], isClonable: boolean, isRenamable: boolean) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","glContainer","tab","header","tabs","close","forEach","contentItem","container","i","length","config","id","canCloseTabsRight","disabled","closable","Boolean","isClosable","canCloseAny","render","additionalActions","contextActions","push","title","order","group","groups","low","action","undefined"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport type { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(\n tab => (tab?.contentItem as unknown as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n (tabs[i]?.contentItem as unknown as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","jsx","_jsx","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","_glContainer$tab$head","_glContainer$tab","_glContainer$tab$head2","glContainer","tab","header","tabs","close","forEach","_container","contentItem","container","i","length","_tabs$i$contentItem","_tabs$i$contentItem$c","_glContainer$tab2","_glContainer$tab2$con","_glContainer$tab2$con2","_container2","_tabs$i","config","id","canCloseTabsRight","disabled","_tabs$i$contentItem2","_tabs$i$contentItem2$","_glContainer$tab3","_glContainer$tab3$con","_glContainer$tab3$con2","_tabs$i2","_tabs$i2$contentItem","_tabs$i2$contentItem$","closable","Boolean","isClosable","canCloseAny","_tabs$i3","_tabs$i3$contentItem","_tabs$i3$contentItem$","render","_glContainer$tab4","_glContainer$tab4$con","_glContainer$tab4$con2","additionalActions","contextActions","push","title","order","group","groups","low","action","undefined","actions","_defineProperty"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport type { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(\n tab => (tab?.contentItem as unknown as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n (tabs[i]?.contentItem as unknown as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RenameDialog.js","names":["React","PureComponent","classNames","Button","Popper","RenameDialog","constructor","props","handleRenameDialogOpened","bind","handleRenameInputChange","handleRenameCancel","handleRenameSubmit","renameInputRef","createRef","value","state","valueWasValidated","componentDidUpdate","prevProps","isShown","prevIsShown","resetState","setState","current","focus","event","target","onCancel","stopPropagation","preventDefault","newTitle","trim","undefined","onSubmit","renderRenameDialog","isShared","isOwner","itemType","render","placement"],"sources":["../../src/panels/RenameDialog.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n FormEvent,\n PureComponent,\n ReactElement,\n RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { Button, Popper } from '@deephaven/components';\n\ninterface RenameDialogProps {\n isShared: boolean;\n isOwner: boolean;\n isShown: boolean;\n itemType: string;\n onSubmit: (title: string) => void;\n onCancel: () => void;\n value?: string | null;\n}\n\ninterface RenameDialogState {\n value?: string | null;\n valueWasValidated: boolean;\n}\n\nexport default class RenameDialog extends PureComponent<\n RenameDialogProps,\n RenameDialogState\n> {\n static defaultProps = {\n isShared: false,\n isOwner: true,\n itemType: 'Item',\n value: '',\n };\n\n constructor(props: RenameDialogProps) {\n super(props);\n\n this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);\n this.handleRenameInputChange = this.handleRenameInputChange.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n\n this.renameInputRef = React.createRef();\n\n const { value } = props;\n\n this.state = {\n value,\n valueWasValidated: false,\n };\n }\n\n componentDidUpdate(prevProps: RenameDialogProps): void {\n const { isShown: prevIsShown } = prevProps;\n const { isShown } = this.props;\n // Reset the state on dialog shown and not on the `value` prop change\n // so the input keeps the internal value while the dialog is open.\n // Useful in case the `value` prop update is triggered externally\n // i.e. by someone else renaming the same shared dashboard\n if (isShown && !prevIsShown) {\n this.resetState();\n }\n }\n\n renameInputRef: RefObject<HTMLInputElement>;\n\n resetState(): void {\n const { value } = this.props;\n this.setState({ value, valueWasValidated: false });\n }\n\n handleRenameDialogOpened(): void {\n this.renameInputRef?.current?.focus();\n }\n\n handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value });\n }\n\n handleRenameCancel(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n handleRenameSubmit(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { value } = this.state;\n const newTitle = value?.trim();\n if (newTitle !== undefined && newTitle !== '') {\n const { onSubmit } = this.props;\n onSubmit(newTitle);\n } else {\n this.setState({ value: newTitle, valueWasValidated: true });\n }\n }\n\n renderRenameDialog(): ReactElement {\n const { isShared, isOwner, itemType } = this.props;\n const { value, valueWasValidated } = this.state;\n\n return (\n <form\n className={classNames('p-3', { 'was-validated': valueWasValidated })}\n onSubmit={this.handleRenameSubmit}\n noValidate\n role=\"presentation\"\n onMouseDown={event => {\n // block events in the NewTabScreen ItemList\n event.stopPropagation();\n }}\n onMouseUp={event => {\n event.stopPropagation();\n }}\n >\n <div className=\"form-group\">\n <label htmlFor={`rename-dialog-${itemType}-input`}>\n Rename {itemType}\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`rename-dialog-${itemType}-input`}\n value={value ?? undefined}\n ref={this.renameInputRef}\n onChange={this.handleRenameInputChange}\n required\n />\n <div className=\"invalid-feedback\">\n {itemType} name cannot be empty\n </div>\n {(isShared || !isOwner) && (\n <div className=\"pt-2\">\n Renaming this {itemType} will rename for all users.\n </div>\n )}\n </div>\n\n <div className=\"text-right\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleRenameCancel}\n >\n Cancel\n </Button>\n <Button kind=\"primary\" type=\"submit\">\n Rename\n </Button>\n </div>\n </form>\n );\n }\n\n render(): ReactElement {\n const { isShown, onCancel } = this.props;\n return (\n <Popper\n isShown={isShown}\n onEntered={this.handleRenameDialogOpened}\n onExited={onCancel}\n options={{\n placement: 'bottom',\n }}\n interactive\n closeOnBlur\n >\n {this.renderRenameDialog()}\n </Popper>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RenameDialog.js","names":["React","PureComponent","classNames","Button","Popper","jsxs","_jsxs","jsx","_jsx","RenameDialog","constructor","props","_defineProperty","handleRenameDialogOpened","bind","handleRenameInputChange","handleRenameCancel","handleRenameSubmit","renameInputRef","createRef","value","state","valueWasValidated","componentDidUpdate","prevProps","isShown","prevIsShown","resetState","setState","_this$renameInputRef","_this$renameInputRef$","current","focus","event","target","onCancel","stopPropagation","preventDefault","newTitle","trim","undefined","onSubmit","renderRenameDialog","isShared","isOwner","itemType","className","noValidate","role","onMouseDown","onMouseUp","children","htmlFor","concat","type","id","ref","onChange","required","kind","onClick","render","onEntered","onExited","options","placement","interactive","closeOnBlur"],"sources":["../../src/panels/RenameDialog.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n FormEvent,\n PureComponent,\n ReactElement,\n RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { Button, Popper } from '@deephaven/components';\n\ninterface RenameDialogProps {\n isShared: boolean;\n isOwner: boolean;\n isShown: boolean;\n itemType: string;\n onSubmit: (title: string) => void;\n onCancel: () => void;\n value?: string | null;\n}\n\ninterface RenameDialogState {\n value?: string | null;\n valueWasValidated: boolean;\n}\n\nexport default class RenameDialog extends PureComponent<\n RenameDialogProps,\n RenameDialogState\n> {\n static defaultProps = {\n isShared: false,\n isOwner: true,\n itemType: 'Item',\n value: '',\n };\n\n constructor(props: RenameDialogProps) {\n super(props);\n\n this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);\n this.handleRenameInputChange = this.handleRenameInputChange.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n\n this.renameInputRef = React.createRef();\n\n const { value } = props;\n\n this.state = {\n value,\n valueWasValidated: false,\n };\n }\n\n componentDidUpdate(prevProps: RenameDialogProps): void {\n const { isShown: prevIsShown } = prevProps;\n const { isShown } = this.props;\n // Reset the state on dialog shown and not on the `value` prop change\n // so the input keeps the internal value while the dialog is open.\n // Useful in case the `value` prop update is triggered externally\n // i.e. by someone else renaming the same shared dashboard\n if (isShown && !prevIsShown) {\n this.resetState();\n }\n }\n\n renameInputRef: RefObject<HTMLInputElement>;\n\n resetState(): void {\n const { value } = this.props;\n this.setState({ value, valueWasValidated: false });\n }\n\n handleRenameDialogOpened(): void {\n this.renameInputRef?.current?.focus();\n }\n\n handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value });\n }\n\n handleRenameCancel(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n handleRenameSubmit(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { value } = this.state;\n const newTitle = value?.trim();\n if (newTitle !== undefined && newTitle !== '') {\n const { onSubmit } = this.props;\n onSubmit(newTitle);\n } else {\n this.setState({ value: newTitle, valueWasValidated: true });\n }\n }\n\n renderRenameDialog(): ReactElement {\n const { isShared, isOwner, itemType } = this.props;\n const { value, valueWasValidated } = this.state;\n\n return (\n <form\n className={classNames('p-3', { 'was-validated': valueWasValidated })}\n onSubmit={this.handleRenameSubmit}\n noValidate\n role=\"presentation\"\n onMouseDown={event => {\n // block events in the NewTabScreen ItemList\n event.stopPropagation();\n }}\n onMouseUp={event => {\n event.stopPropagation();\n }}\n >\n <div className=\"form-group\">\n <label htmlFor={`rename-dialog-${itemType}-input`}>\n Rename {itemType}\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`rename-dialog-${itemType}-input`}\n value={value ?? undefined}\n ref={this.renameInputRef}\n onChange={this.handleRenameInputChange}\n required\n />\n <div className=\"invalid-feedback\">\n {itemType} name cannot be empty\n </div>\n {(isShared || !isOwner) && (\n <div className=\"pt-2\">\n Renaming this {itemType} will rename for all users.\n </div>\n )}\n </div>\n\n <div className=\"text-right\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleRenameCancel}\n >\n Cancel\n </Button>\n <Button kind=\"primary\" type=\"submit\">\n Rename\n </Button>\n </div>\n </form>\n );\n }\n\n render(): ReactElement {\n const { isShown, onCancel } = this.props;\n return (\n <Popper\n isShown={isShown}\n onEntered={this.handleRenameDialogOpened}\n onExited={onCancel}\n options={{\n placement: 'bottom',\n }}\n interactive\n closeOnBlur\n >\n {this.renderRenameDialog()}\n </Popper>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","copyToClipboard","Panel","WidgetPanelTooltip","WidgetPanel","constructor","props","showTabTooltip","glContainer","widgetType","widgetName","description","handleSessionClosed","bind","handleSessionOpened","handleCopyName","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","getErrorMessage","errorMessage","undefined","onSessionClose","setState","onSessionOpen","render","children","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","doRenderTabTooltip","getCachedRenderTabTooltip","additionalActions","title","group","groups","medium","order","action","disconnected","inactive"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, {\n Component,\n ComponentType,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { ContextActions } from '@deephaven/components';\nimport { copyToClipboard } from '@deephaven/utils';\nimport Panel from './Panel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\n\ninterface WidgetPanelProps {\n children: ReactNode;\n componentPanel?: ComponentType | Component;\n\n glContainer: Container;\n glEventHub: EventEmitter;\n\n className: string;\n errorMessage: string;\n isClonable: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isRenamable: boolean;\n showTabTooltip: boolean;\n widgetName: string;\n widgetType: string;\n renderTabTooltip: () => ReactNode;\n description: string;\n\n onFocus: () => void;\n onBlur: () => void;\n onHide: () => void;\n onClearAllFilters: () => void;\n onResize: () => void;\n onSessionClose: (...args: unknown[]) => void;\n onSessionOpen: (...args: unknown[]) => void;\n onShow: () => void;\n onTabBlur: () => void;\n onTabFocus: () => void;\n onTabClicked: () => void;\n}\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n onTabClicked: (): void => undefined,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { widgetName } = this.props;\n copyToClipboard(widgetName);\n }\n\n getErrorMessage(): string | undefined {\n const { errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage) {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { widgetName, widgetType } = this.props;\n return `Variable \"${widgetName}\" not set.\\n${widgetType} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n const { widgetName } = this.props;\n return `${widgetName} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (\n showTabTooltip: boolean,\n glContainer: Container,\n widgetType: string,\n widgetName: string,\n description: string\n ) =>\n showTabTooltip\n ? () => (\n <WidgetPanelTooltip\n glContainer={glContainer}\n widgetType={widgetType}\n widgetName={widgetName}\n description={description}\n />\n )\n : null\n );\n\n handleSessionClosed(...args: unknown[]): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose(...args);\n }\n\n handleSessionOpened(...args: unknown[]): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(...args);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n } = this.props;\n\n const { isPanelDisconnected, isWidgetDisconnected, isPanelInactive } =\n this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(\n showTabTooltip,\n glContainer,\n widgetType,\n widgetName,\n description\n );\n\n const additionalActions = [\n {\n title: `Copy ${widgetType} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ];\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={this.handleSessionOpened}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nexport default WidgetPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","copyToClipboard","Panel","WidgetPanelTooltip","jsx","_jsx","jsxs","_jsxs","WidgetPanel","constructor","props","_defineProperty","showTabTooltip","glContainer","widgetType","widgetName","description","handleSessionClosed","bind","handleSessionOpened","handleCopyName","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","getErrorMessage","errorMessage","concat","undefined","onSessionClose","setState","arguments","onSessionOpen","render","children","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","doRenderTabTooltip","getCachedRenderTabTooltip","additionalActions","title","group","groups","medium","order","action","disconnected","inactive"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, {\n Component,\n ComponentType,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { ContextActions } from '@deephaven/components';\nimport { copyToClipboard } from '@deephaven/utils';\nimport Panel from './Panel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\n\ninterface WidgetPanelProps {\n children: ReactNode;\n componentPanel?: ComponentType | Component;\n\n glContainer: Container;\n glEventHub: EventEmitter;\n\n className: string;\n errorMessage: string;\n isClonable: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isRenamable: boolean;\n showTabTooltip: boolean;\n widgetName: string;\n widgetType: string;\n renderTabTooltip: () => ReactNode;\n description: string;\n\n onFocus: () => void;\n onBlur: () => void;\n onHide: () => void;\n onClearAllFilters: () => void;\n onResize: () => void;\n onSessionClose: (...args: unknown[]) => void;\n onSessionOpen: (...args: unknown[]) => void;\n onShow: () => void;\n onTabBlur: () => void;\n onTabFocus: () => void;\n onTabClicked: () => void;\n}\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n onTabClicked: (): void => undefined,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { widgetName } = this.props;\n copyToClipboard(widgetName);\n }\n\n getErrorMessage(): string | undefined {\n const { errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage) {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { widgetName, widgetType } = this.props;\n return `Variable \"${widgetName}\" not set.\\n${widgetType} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n const { widgetName } = this.props;\n return `${widgetName} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (\n showTabTooltip: boolean,\n glContainer: Container,\n widgetType: string,\n widgetName: string,\n description: string\n ) =>\n showTabTooltip\n ? () => (\n <WidgetPanelTooltip\n glContainer={glContainer}\n widgetType={widgetType}\n widgetName={widgetName}\n description={description}\n />\n )\n : null\n );\n\n handleSessionClosed(...args: unknown[]): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose(...args);\n }\n\n handleSessionOpened(...args: unknown[]): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(...args);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n } = this.props;\n\n const { isPanelDisconnected, isWidgetDisconnected, isPanelInactive } =\n this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(\n showTabTooltip,\n glContainer,\n widgetType,\n widgetName,\n description\n );\n\n const additionalActions = [\n {\n title: `Copy ${widgetType} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ];\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={this.handleSessionOpened}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nexport default WidgetPanel;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanelTooltip.js","names":["React","PropTypes","CopyButton","GLPropTypes","LayoutUtils","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","getTitleFromContainer","propTypes","Container","isRequired","string","node","defaultProps"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport { CopyButton } from '@deephaven/components';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport './WidgetPanelTooltip.scss';\nimport { ReactElement } from 'react-markdown';\nimport type { Container } from '@deephaven/golden-layout';\n\ninterface WidgetPanelTooltipProps {\n glContainer: Container;\n widgetType: string;\n widgetName: string;\n description: string;\n children: ReactNode;\n}\nfunction WidgetPanelTooltip(props: WidgetPanelTooltipProps): ReactElement {\n const { widgetType, widgetName, glContainer, description, children } = props;\n const panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n\n return (\n <div className=\"tab-tooltip-grid-container\">\n <span className=\"tab-tooltip-title\">{widgetType} Name</span>\n <div className=\"tab-tooltip-name-wrapper\">\n <span className=\"tab-tooltip-name\">{widgetName}</span>\n <CopyButton\n className=\"tab-tooltip-copy\"\n tooltip=\"Copy name\"\n copy={widgetName}\n />\n </div>\n {widgetName !== panelTitle && (\n <>\n <span className=\"tab-tooltip-title\">Display Name</span>\n <span className=\"tab-tooltip-name\">{panelTitle}</span>\n </>\n )}\n {description && (\n <div className=\"tab-tooltip-description\">{description}</div>\n )}\n {children}\n </div>\n );\n}\n\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node,\n};\n\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null,\n};\n\nexport default WidgetPanelTooltip;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqB,OAAO;AACxC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,WAAW,EAAEC,WAAW,QAAQ,sBAAsB;AAAC;AAAA;AAAA;AAAA;AAYhE,SAASC,kBAAkB,CAACC,KAA8B,EAAgB;EACxE,IAAM;IAAEC,UAAU;IAAEC,UAAU;IAAEC,WAAW;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGL,KAAK;EAC5E,IAAMM,UAAU,GAAGR,WAAW,CAACS,qBAAqB,CAACJ,WAAW,CAAC;EAEjE,oBACE;IAAK,SAAS,EAAC,4BAA4B;IAAA,wBACzC;MAAM,SAAS,EAAC,mBAAmB;MAAA,WAAEF,UAAU,EAAC,OAAK;IAAA,EAAO,eAC5D;MAAK,SAAS,EAAC,0BAA0B;MAAA,wBACvC;QAAM,SAAS,EAAC,kBAAkB;QAAA,UAAEC;MAAU,EAAQ,eACtD,KAAC,UAAU;QACT,SAAS,EAAC,kBAAkB;QAC5B,OAAO,EAAC,WAAW;QACnB,IAAI,EAAEA;MAAW,EACjB;IAAA,EACE,EACLA,UAAU,KAAKI,UAAU,iBACxB;MAAA,wBACE;QAAM,SAAS,EAAC,mBAAmB;QAAA,UAAC;MAAY,EAAO,eACvD;QAAM,SAAS,EAAC,kBAAkB;QAAA,UAAEA;MAAU,EAAQ;IAAA,EAEzD,EACAF,WAAW,iBACV;MAAK,SAAS,EAAC,yBAAyB;MAAA,UAAEA;IAAW,EACtD,EACAC,QAAQ;EAAA,EACL;AAEV;AAEAN,kBAAkB,CAACS,SAAS,GAAG;EAC7BL,WAAW,EAAEN,WAAW,CAACY,SAAS,CAACC,UAAU;EAC7CT,UAAU,EAAEN,SAAS,CAACgB,MAAM;EAC5BT,UAAU,EAAEP,SAAS,CAACgB,MAAM;EAC5BP,WAAW,EAAET,SAAS,CAACgB,MAAM;EAC7BN,QAAQ,EAAEV,SAAS,CAACiB;AACtB,CAAC;AAEDb,kBAAkB,CAACc,YAAY,GAAG;EAChCZ,UAAU,EAAE,EAAE;EACdC,UAAU,EAAE,EAAE;EACdE,WAAW,EAAE,IAAI;EACjBC,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeN,kBAAkB"}
1
+ {"version":3,"file":"WidgetPanelTooltip.js","names":["React","PropTypes","CopyButton","GLPropTypes","LayoutUtils","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","WidgetPanelTooltip","props","widgetType","widgetName","glContainer","description","children","panelTitle","getTitleFromContainer","className","tooltip","copy","propTypes","Container","isRequired","string","node","defaultProps"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport { CopyButton } from '@deephaven/components';\nimport { GLPropTypes, LayoutUtils } from '@deephaven/dashboard';\nimport './WidgetPanelTooltip.scss';\nimport { ReactElement } from 'react-markdown';\nimport type { Container } from '@deephaven/golden-layout';\n\ninterface WidgetPanelTooltipProps {\n glContainer: Container;\n widgetType: string;\n widgetName: string;\n description: string;\n children: ReactNode;\n}\nfunction WidgetPanelTooltip(props: WidgetPanelTooltipProps): ReactElement {\n const { widgetType, widgetName, glContainer, description, children } = props;\n const panelTitle = LayoutUtils.getTitleFromContainer(glContainer);\n\n return (\n <div className=\"tab-tooltip-grid-container\">\n <span className=\"tab-tooltip-title\">{widgetType} Name</span>\n <div className=\"tab-tooltip-name-wrapper\">\n <span className=\"tab-tooltip-name\">{widgetName}</span>\n <CopyButton\n className=\"tab-tooltip-copy\"\n tooltip=\"Copy name\"\n copy={widgetName}\n />\n </div>\n {widgetName !== panelTitle && (\n <>\n <span className=\"tab-tooltip-title\">Display Name</span>\n <span className=\"tab-tooltip-name\">{panelTitle}</span>\n </>\n )}\n {description && (\n <div className=\"tab-tooltip-description\">{description}</div>\n )}\n {children}\n </div>\n );\n}\n\nWidgetPanelTooltip.propTypes = {\n glContainer: GLPropTypes.Container.isRequired,\n widgetType: PropTypes.string,\n widgetName: PropTypes.string,\n description: PropTypes.string,\n children: PropTypes.node,\n};\n\nWidgetPanelTooltip.defaultProps = {\n widgetType: '',\n widgetName: '',\n description: null,\n children: null,\n};\n\nexport default WidgetPanelTooltip;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqB,OAAO;AACxC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,uBAAuB;AAClD,SAASC,WAAW,EAAEC,WAAW,QAAQ,sBAAsB;AAAC;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAYhE,SAASC,kBAAkBA,CAACC,KAA8B,EAAgB;EACxE,IAAM;IAAEC,UAAU;IAAEC,UAAU;IAAEC,WAAW;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGL,KAAK;EAC5E,IAAMM,UAAU,GAAGd,WAAW,CAACe,qBAAqB,CAACJ,WAAW,CAAC;EAEjE,oBACET,KAAA;IAAKc,SAAS,EAAC,4BAA4B;IAAAH,QAAA,gBACzCX,KAAA;MAAMc,SAAS,EAAC,mBAAmB;MAAAH,QAAA,GAAEJ,UAAU,EAAC,OAAK;IAAA,CAAM,CAAC,eAC5DP,KAAA;MAAKc,SAAS,EAAC,0BAA0B;MAAAH,QAAA,gBACvCT,IAAA;QAAMY,SAAS,EAAC,kBAAkB;QAAAH,QAAA,EAAEH;MAAU,CAAO,CAAC,eACtDN,IAAA,CAACN,UAAU;QACTkB,SAAS,EAAC,kBAAkB;QAC5BC,OAAO,EAAC,WAAW;QACnBC,IAAI,EAAER;MAAW,CAClB,CAAC;IAAA,CACC,CAAC,EACLA,UAAU,KAAKI,UAAU,iBACxBZ,KAAA,CAAAI,SAAA;MAAAO,QAAA,gBACET,IAAA;QAAMY,SAAS,EAAC,mBAAmB;QAAAH,QAAA,EAAC;MAAY,CAAM,CAAC,eACvDT,IAAA;QAAMY,SAAS,EAAC,kBAAkB;QAAAH,QAAA,EAAEC;MAAU,CAAO,CAAC;IAAA,CACtD,CACH,EACAF,WAAW,iBACVR,IAAA;MAAKY,SAAS,EAAC,yBAAyB;MAAAH,QAAA,EAAED;IAAW,CAAM,CAC5D,EACAC,QAAQ;EAAA,CACN,CAAC;AAEV;AAEAN,kBAAkB,CAACY,SAAS,GAAG;EAC7BR,WAAW,EAAEZ,WAAW,CAACqB,SAAS,CAACC,UAAU;EAC7CZ,UAAU,EAAEZ,SAAS,CAACyB,MAAM;EAC5BZ,UAAU,EAAEb,SAAS,CAACyB,MAAM;EAC5BV,WAAW,EAAEf,SAAS,CAACyB,MAAM;EAC7BT,QAAQ,EAAEhB,SAAS,CAAC0B;AACtB,CAAC;AAEDhB,kBAAkB,CAACiB,YAAY,GAAG;EAChCf,UAAU,EAAE,EAAE;EACdC,UAAU,EAAE,EAAE;EACdE,WAAW,EAAE,IAAI;EACjBC,QAAQ,EAAE;AACZ,CAAC;AAED,eAAeN,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommonPropTypes.js","names":["PropTypes","nullableBoolean","props","propName","bool","nullableString","string","CommonPropTypes","Object","freeze"],"sources":["../../src/prop-types/CommonPropTypes.ts"],"sourcesContent":["import PropTypes from 'prop-types';\n\nconst nullableBoolean = (\n props: Record<string, unknown>,\n propName: string\n): PropTypes.Requireable<boolean> | null =>\n props[propName] === null ? null : PropTypes.bool;\n\nconst nullableString = (\n props: Record<string, unknown>,\n propName: string\n): PropTypes.Requireable<string> | null =>\n props[propName] === null ? null : PropTypes.string;\n\nconst CommonPropTypes = Object.freeze({ nullableBoolean, nullableString });\n\nexport default CommonPropTypes;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,YAAY;AAElC,IAAMC,eAAe,GAAG,CACtBC,KAA8B,EAC9BC,QAAgB,KAEhBD,KAAK,CAACC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,GAAGH,SAAS,CAACI,IAAI;AAElD,IAAMC,cAAc,GAAG,CACrBH,KAA8B,EAC9BC,QAAgB,KAEhBD,KAAK,CAACC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,GAAGH,SAAS,CAACM,MAAM;AAEpD,IAAMC,eAAe,GAAGC,MAAM,CAACC,MAAM,CAAC;EAAER,eAAe;EAAEI;AAAe,CAAC,CAAC;AAE1E,eAAeE,eAAe"}
1
+ {"version":3,"file":"CommonPropTypes.js","names":["PropTypes","nullableBoolean","props","propName","bool","nullableString","string","CommonPropTypes","Object","freeze"],"sources":["../../src/prop-types/CommonPropTypes.ts"],"sourcesContent":["import PropTypes from 'prop-types';\n\nconst nullableBoolean = (\n props: Record<string, unknown>,\n propName: string\n): PropTypes.Requireable<boolean> | null =>\n props[propName] === null ? null : PropTypes.bool;\n\nconst nullableString = (\n props: Record<string, unknown>,\n propName: string\n): PropTypes.Requireable<string> | null =>\n props[propName] === null ? null : PropTypes.string;\n\nconst CommonPropTypes = Object.freeze({ nullableBoolean, nullableString });\n\nexport default CommonPropTypes;\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,YAAY;AAElC,IAAMC,eAAe,GAAGA,CACtBC,KAA8B,EAC9BC,QAAgB,KAEhBD,KAAK,CAACC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,GAAGH,SAAS,CAACI,IAAI;AAElD,IAAMC,cAAc,GAAGA,CACrBH,KAA8B,EAC9BC,QAAgB,KAEhBD,KAAK,CAACC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,GAAGH,SAAS,CAACM,MAAM;AAEpD,IAAMC,eAAe,GAAGC,MAAM,CAACC,MAAM,CAAC;EAAER,eAAe;EAAEI;AAAe,CAAC,CAAC;AAE1E,eAAeE,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardConnection","id","connection","dispatch","setDashboardSessionWrapper","sessionWrapper","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"sources":["../../src/redux/actions.ts"],"sourcesContent":["import deepEqual from 'deep-equal';\nimport { ThunkAction } from 'redux-thunk';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { Action } from 'redux';\nimport type { IdeConnection } from '@deephaven/jsapi-types';\nimport { getLinksForDashboard } from './selectors';\nimport { FilterSet } from '../panels';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\n/**\n * Set the connection for the dashboard specified\n * @param id The ID of the dashboard to set the connection for\n * @param connection The connection object to set for the dashboard\n */\nexport const setDashboardConnection =\n (\n id: string,\n connection: IdeConnection\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { connection }));\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param id The ID of the dashboard to set the session for\n * @param sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper =\n (\n id: string,\n sessionWrapper: SessionWrapper\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param id The ID of the dashboard to set the links for\n * @param links The links to set\n */\nexport const setDashboardLinks =\n (\n id: string,\n links: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param id The ID of the dashboard to add links to\n * @param newLinks The new links to add\n */\nexport const addDashboardLinks =\n (\n id: string,\n newLinks: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n };\n\n/**\n * Delete links from a dashboard\n * @param id The ID of the dashboard to delete links from\n * @param linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks =\n (\n id: string,\n linkIds: string[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n };\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param id The ID of the dashboard to set the isolated linker panel ID in\n * @param isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId =\n (\n id: string,\n isolatedLinkerPanelId: string | string[] | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param id The ID of the dashboard to set the column selection validator on\n * @param columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator =\n (\n id: string,\n columnSelectionValidator: ColumnSelectionValidator | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param id The ID of the dashboard to set the console settings on\n * @param consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings =\n (\n id: string,\n consoleSettings: Record<string, unknown>\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param id The ID of the dashboard to set the filter sets for\n * @param filterSets The filter sets to set\n */\nexport const setDashboardFilterSets =\n (\n id: string,\n filterSets: FilterSet[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardConnection","id","connection","dispatch","setDashboardSessionWrapper","sessionWrapper","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"sources":["../../src/redux/actions.ts"],"sourcesContent":["import deepEqual from 'deep-equal';\nimport { ThunkAction } from 'redux-thunk';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { Action } from 'redux';\nimport type { IdeConnection } from '@deephaven/jsapi-types';\nimport { getLinksForDashboard } from './selectors';\nimport { FilterSet } from '../panels';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\n/**\n * Set the connection for the dashboard specified\n * @param id The ID of the dashboard to set the connection for\n * @param connection The connection object to set for the dashboard\n */\nexport const setDashboardConnection =\n (\n id: string,\n connection: IdeConnection\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { connection }));\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param id The ID of the dashboard to set the session for\n * @param sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper =\n (\n id: string,\n sessionWrapper: SessionWrapper\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param id The ID of the dashboard to set the links for\n * @param links The links to set\n */\nexport const setDashboardLinks =\n (\n id: string,\n links: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param id The ID of the dashboard to add links to\n * @param newLinks The new links to add\n */\nexport const addDashboardLinks =\n (\n id: string,\n newLinks: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n };\n\n/**\n * Delete links from a dashboard\n * @param id The ID of the dashboard to delete links from\n * @param linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks =\n (\n id: string,\n linkIds: string[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n };\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param id The ID of the dashboard to set the isolated linker panel ID in\n * @param isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId =\n (\n id: string,\n isolatedLinkerPanelId: string | string[] | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param id The ID of the dashboard to set the column selection validator on\n * @param columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator =\n (\n id: string,\n columnSelectionValidator: ColumnSelectionValidator | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param id The ID of the dashboard to set the console settings on\n * @param consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings =\n (\n id: string,\n consoleSettings: Record<string, unknown>\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param id The ID of the dashboard to set the filter sets for\n * @param filterSets The filter sets to set\n */\nexport const setDashboardFilterSets =\n (\n id: string,\n filterSets: FilterSet[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_MAP","Map","EMPTY_ARRAY","Object","freeze","getColumnsForDashboard","store","dashboardId","columns","getFilterSetsForDashboard","filterSets","getInputFiltersForDashboard","filters","getTableMapForDashboard","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { Column, IdeConnection, Table } from '@deephaven/jsapi-types';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { FilterChangeEvent } from '../FilterPlugin';\nimport { Link } from '../linker/LinkerUtils';\nimport { FilterSet } from '../panels';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n getDashboardData(store, dashboardId).consoleSettings as Record<\n string,\n unknown\n >;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): IdeConnection =>\n getDashboardData(store, dashboardId).connection as IdeConnection;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper =>\n getDashboardData(store, dashboardId).sessionWrapper as SessionWrapper;\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,sBAAsB;AASvD,IAAMC,SAAS,GAAG,IAAIC,GAAG,EAAE;AAE3B,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC,EAAE,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAG,CACpCC,KAAgB,EAChBC,WAAmB;EAAA;EAAA,gCAElBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACC,OAAO,yEAAIN,WAAW;AAAA,CAAa;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMO,yBAAyB,GAAG,CACvCH,KAAgB,EAChBC,WAAmB;EAAA;EAAA,gCAElBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACG,UAAU,yEAC9CR,WAAW;AAAA,CAAgB;;AAE/B;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMS,2BAA2B,GAAG,CACzCL,KAAgB,EAChBC,WAAmB;EAAA;EAAA,iCAElBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACK,OAAO,2EAC3CV,WAAW;AAAA,CAAwB;;AAEvC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMW,uBAAuB,GAAG,CACrCP,KAAgB,EAChBC,WAAmB;EAAA;EAAA,gCAElBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACO,QAAQ,yEAAId,SAAS;AAAA,CAG1D;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMe,oCAAoC,GAAG,CAClDT,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACS,qBAExB;;AAEf;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,oBAAoB,GAAG,CAClCX,KAAgB,EAChBC,WAAmB;EAAA;EAAA,gCAElBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACW,KAAK,yEAAIhB,WAAW;AAAA,CAAW;;AAEvE;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMiB,uCAAuC,GAAG,CACrDb,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACa,wBAExB;;AAEf;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,2BAA2B,GAAG,CACzCf,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACe,eAGpC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAG,CACpCjB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACiB,UAA2B;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,0BAA0B,GAAG,CACxCnB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACmB,cAAgC"}
1
+ {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_MAP","Map","EMPTY_ARRAY","Object","freeze","getColumnsForDashboard","store","dashboardId","_getDashboardData$col","columns","getFilterSetsForDashboard","_getDashboardData$fil","filterSets","getInputFiltersForDashboard","_getDashboardData$fil2","filters","getTableMapForDashboard","_getDashboardData$tab","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","_getDashboardData$lin","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { Column, IdeConnection, Table } from '@deephaven/jsapi-types';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { FilterChangeEvent } from '../FilterPlugin';\nimport { Link } from '../linker/LinkerUtils';\nimport { FilterSet } from '../panels';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n getDashboardData(store, dashboardId).consoleSettings as Record<\n string,\n unknown\n >;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): IdeConnection =>\n getDashboardData(store, dashboardId).connection as IdeConnection;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper =>\n getDashboardData(store, dashboardId).sessionWrapper as SessionWrapper;\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,sBAAsB;AASvD,IAAMC,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC;AAE3B,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC,EAAE,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAGA,CACpCC,KAAgB,EAChBC,WAAmB;EAAA,IAAAC,qBAAA;EAAA,QAAAA,qBAAA,GAElBT,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACE,OAAO,cAAAD,qBAAA,cAAAA,qBAAA,GAAIN,WAAW;AAAA,CAAa;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMQ,yBAAyB,GAAGA,CACvCJ,KAAgB,EAChBC,WAAmB;EAAA,IAAAI,qBAAA;EAAA,QAAAA,qBAAA,GAElBZ,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACK,UAAU,cAAAD,qBAAA,cAAAA,qBAAA,GAC9CT,WAAW;AAAA,CAAgB;;AAE/B;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMW,2BAA2B,GAAGA,CACzCP,KAAgB,EAChBC,WAAmB;EAAA,IAAAO,sBAAA;EAAA,QAAAA,sBAAA,GAElBf,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACQ,OAAO,cAAAD,sBAAA,cAAAA,sBAAA,GAC3CZ,WAAW;AAAA,CAAwB;;AAEvC;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMc,uBAAuB,GAAGA,CACrCV,KAAgB,EAChBC,WAAmB;EAAA,IAAAU,qBAAA;EAAA,QAAAA,qBAAA,GAElBlB,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACW,QAAQ,cAAAD,qBAAA,cAAAA,qBAAA,GAAIjB,SAAS;AAAA,CAG1D;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMmB,oCAAoC,GAAGA,CAClDb,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACa,qBAExB;;AAEf;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,oBAAoB,GAAGA,CAClCf,KAAgB,EAChBC,WAAmB;EAAA,IAAAe,qBAAA;EAAA,QAAAA,qBAAA,GAElBvB,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACgB,KAAK,cAAAD,qBAAA,cAAAA,qBAAA,GAAIpB,WAAW;AAAA,CAAW;;AAEvE;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMsB,uCAAuC,GAAGA,CACrDlB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACkB,wBAExB;;AAEf;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,2BAA2B,GAAGA,CACzCpB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACoB,eAGpC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GAAGA,CACpCtB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACsB,UAA2B;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,0BAA0B,GAAGA,CACxCxB,KAAgB,EAChBC,WAAmB,KAEnBR,gBAAgB,CAACO,KAAK,EAAEC,WAAW,CAAC,CAACwB,cAAgC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHydrateGrid.d.ts","sourceRoot":"","sources":["../src/useHydrateGrid.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAEL,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAElB,wBAAgB,cAAc,CAC5B,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,KACpE,oBAAoB,CACvB,CAAC,EACD,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,WAAW,CAAC,CACzD,CAuCA;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"useHydrateGrid.d.ts","sourceRoot":"","sources":["../src/useHydrateGrid.ts"],"names":[],"mappings":"AACA,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAEL,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAGlB,wBAAgB,cAAc,CAC5B,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,KACpE,oBAAoB,CACvB,CAAC,EACD,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,WAAW,CAAC,CACzD,CAuCA;AAED,eAAe,cAAc,CAAC"}
@@ -7,9 +7,10 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
7
7
  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); }
8
8
  import { useCallback } from 'react';
9
9
  import { useApi } from '@deephaven/jsapi-bootstrap';
10
- import { useConnection, useLoadTablePlugin } from '@deephaven/app-utils';
10
+ import { useConnection } from '@deephaven/jsapi-components';
11
11
  import { IrisGridModelFactory } from '@deephaven/iris-grid';
12
12
  import { isIrisGridPanelMetadata, isLegacyIrisGridPanelMetadata } from "./panels/index.js";
13
+ import { useLoadTablePlugin } from "./useLoadTablePlugin.js";
13
14
  export function useHydrateGrid() {
14
15
  var dh = useApi();
15
16
  var connection = useConnection();
@@ -1 +1 @@
1
- {"version":3,"file":"useHydrateGrid.js","names":["useCallback","useApi","useConnection","useLoadTablePlugin","IrisGridModelFactory","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","useHydrateGrid","dh","connection","loadPlugin","hydrate","hydrateProps","id","metadata","name","table","type","VariableType","TABLE","Error","localDashboardId","makeModel","tableName","definition","title","getObject"],"sources":["../src/useHydrateGrid.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n DehydratedDashboardPanelProps,\n PanelHydrateFunction,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection, useLoadTablePlugin } from '@deephaven/app-utils';\nimport { Table } from '@deephaven/jsapi-types';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport {\n IrisGridPanelMetadata,\n IrisGridPanelProps,\n isIrisGridPanelMetadata,\n isLegacyIrisGridPanelMetadata,\n} from './panels';\n\nexport function useHydrateGrid<\n P extends DehydratedDashboardPanelProps = DehydratedDashboardPanelProps,\n>(): PanelHydrateFunction<\n P,\n P & Pick<IrisGridPanelProps, 'loadPlugin' | 'makeModel'>\n> {\n const dh = useApi();\n const connection = useConnection();\n const loadPlugin = useLoadTablePlugin();\n\n const hydrate = useCallback(\n (hydrateProps: P, id: string) => {\n let metadata: IrisGridPanelMetadata;\n if (isIrisGridPanelMetadata(hydrateProps.metadata)) {\n metadata = hydrateProps.metadata;\n } else if (isLegacyIrisGridPanelMetadata(hydrateProps.metadata)) {\n metadata = {\n name: hydrateProps.metadata.table,\n type: hydrateProps.metadata.type ?? dh.VariableType.TABLE,\n };\n } else {\n throw new Error('Metadata is required for table panel');\n }\n\n return {\n ...hydrateProps,\n loadPlugin,\n localDashboardId: id,\n makeModel: async () => {\n const { name: tableName, type } = metadata;\n const definition = {\n title: tableName,\n name: tableName,\n type,\n };\n const table = (await connection.getObject(definition)) as Table;\n return IrisGridModelFactory.makeModel(dh, table);\n },\n };\n },\n [dh, connection, loadPlugin]\n );\n\n return hydrate;\n}\n\nexport default useHydrateGrid;\n"],"mappings":";;;;;;;AAAA,SAASA,WAAW,QAAQ,OAAO;AAKnC,SAASC,MAAM,QAAQ,4BAA4B;AACnD,SAASC,aAAa,EAAEC,kBAAkB,QAAQ,sBAAsB;AAExE,SAASC,oBAAoB,QAAQ,sBAAsB;AAAC,SAI1DC,uBAAuB,EACvBC,6BAA6B;AAG/B,OAAO,SAASC,cAAc,GAK5B;EACA,IAAMC,EAAE,GAAGP,MAAM,EAAE;EACnB,IAAMQ,UAAU,GAAGP,aAAa,EAAE;EAClC,IAAMQ,UAAU,GAAGP,kBAAkB,EAAE;EAEvC,IAAMQ,OAAO,GAAGX,WAAW,CACzB,CAACY,YAAe,EAAEC,EAAU,KAAK;IAC/B,IAAIC,QAA+B;IACnC,IAAIT,uBAAuB,CAACO,YAAY,CAACE,QAAQ,CAAC,EAAE;MAClDA,QAAQ,GAAGF,YAAY,CAACE,QAAQ;IAClC,CAAC,MAAM,IAAIR,6BAA6B,CAACM,YAAY,CAACE,QAAQ,CAAC,EAAE;MAAA;MAC/DA,QAAQ,GAAG;QACTC,IAAI,EAAEH,YAAY,CAACE,QAAQ,CAACE,KAAK;QACjCC,IAAI,2BAAEL,YAAY,CAACE,QAAQ,CAACG,IAAI,yEAAIT,EAAE,CAACU,YAAY,CAACC;MACtD,CAAC;IACH,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CAAC,sCAAsC,CAAC;IACzD;IAEA,uCACKR,YAAY;MACfF,UAAU;MACVW,gBAAgB,EAAER,EAAE;MACpBS,SAAS;QAAA,mCAAE,aAAY;UACrB,IAAM;YAAEP,IAAI,EAAEQ,SAAS;YAAEN;UAAK,CAAC,GAAGH,QAAQ;UAC1C,IAAMU,UAAU,GAAG;YACjBC,KAAK,EAAEF,SAAS;YAChBR,IAAI,EAAEQ,SAAS;YACfN;UACF,CAAC;UACD,IAAMD,KAAK,SAAUP,UAAU,CAACiB,SAAS,CAACF,UAAU,CAAW;UAC/D,OAAOpB,oBAAoB,CAACkB,SAAS,CAACd,EAAE,EAAEQ,KAAK,CAAC;QAClD,CAAC;QAAA;UAAA;QAAA;QAAA;MAAA;IAAA;EAEL,CAAC,EACD,CAACR,EAAE,EAAEC,UAAU,EAAEC,UAAU,CAAC,CAC7B;EAED,OAAOC,OAAO;AAChB;AAEA,eAAeJ,cAAc"}
1
+ {"version":3,"file":"useHydrateGrid.js","names":["useCallback","useApi","useConnection","IrisGridModelFactory","isIrisGridPanelMetadata","isLegacyIrisGridPanelMetadata","useLoadTablePlugin","useHydrateGrid","dh","connection","loadPlugin","hydrate","hydrateProps","id","metadata","_hydrateProps$metadat","name","table","type","VariableType","TABLE","Error","_objectSpread","localDashboardId","makeModel","_makeModel","_asyncToGenerator","tableName","definition","title","getObject","apply","arguments"],"sources":["../src/useHydrateGrid.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n DehydratedDashboardPanelProps,\n PanelHydrateFunction,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useConnection } from '@deephaven/jsapi-components';\nimport { Table } from '@deephaven/jsapi-types';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport {\n IrisGridPanelMetadata,\n IrisGridPanelProps,\n isIrisGridPanelMetadata,\n isLegacyIrisGridPanelMetadata,\n} from './panels';\nimport { useLoadTablePlugin } from './useLoadTablePlugin';\n\nexport function useHydrateGrid<\n P extends DehydratedDashboardPanelProps = DehydratedDashboardPanelProps,\n>(): PanelHydrateFunction<\n P,\n P & Pick<IrisGridPanelProps, 'loadPlugin' | 'makeModel'>\n> {\n const dh = useApi();\n const connection = useConnection();\n const loadPlugin = useLoadTablePlugin();\n\n const hydrate = useCallback(\n (hydrateProps: P, id: string) => {\n let metadata: IrisGridPanelMetadata;\n if (isIrisGridPanelMetadata(hydrateProps.metadata)) {\n metadata = hydrateProps.metadata;\n } else if (isLegacyIrisGridPanelMetadata(hydrateProps.metadata)) {\n metadata = {\n name: hydrateProps.metadata.table,\n type: hydrateProps.metadata.type ?? dh.VariableType.TABLE,\n };\n } else {\n throw new Error('Metadata is required for table panel');\n }\n\n return {\n ...hydrateProps,\n loadPlugin,\n localDashboardId: id,\n makeModel: async () => {\n const { name: tableName, type } = metadata;\n const definition = {\n title: tableName,\n name: tableName,\n type,\n };\n const table = (await connection.getObject(definition)) as Table;\n return IrisGridModelFactory.makeModel(dh, table);\n },\n };\n },\n [dh, connection, loadPlugin]\n );\n\n return hydrate;\n}\n\nexport default useHydrateGrid;\n"],"mappings":";;;;;;;AAAA,SAASA,WAAW,QAAQ,OAAO;AAKnC,SAASC,MAAM,QAAQ,4BAA4B;AACnD,SAASC,aAAa,QAAQ,6BAA6B;AAE3D,SAASC,oBAAoB,QAAQ,sBAAsB;AAAC,SAI1DC,uBAAuB,EACvBC,6BAA6B;AAAA,SAEtBC,kBAAkB;AAE3B,OAAO,SAASC,cAAcA,CAAA,EAK5B;EACA,IAAMC,EAAE,GAAGP,MAAM,CAAC,CAAC;EACnB,IAAMQ,UAAU,GAAGP,aAAa,CAAC,CAAC;EAClC,IAAMQ,UAAU,GAAGJ,kBAAkB,CAAC,CAAC;EAEvC,IAAMK,OAAO,GAAGX,WAAW,CACzB,CAACY,YAAe,EAAEC,EAAU,KAAK;IAC/B,IAAIC,QAA+B;IACnC,IAAIV,uBAAuB,CAACQ,YAAY,CAACE,QAAQ,CAAC,EAAE;MAClDA,QAAQ,GAAGF,YAAY,CAACE,QAAQ;IAClC,CAAC,MAAM,IAAIT,6BAA6B,CAACO,YAAY,CAACE,QAAQ,CAAC,EAAE;MAAA,IAAAC,qBAAA;MAC/DD,QAAQ,GAAG;QACTE,IAAI,EAAEJ,YAAY,CAACE,QAAQ,CAACG,KAAK;QACjCC,IAAI,GAAAH,qBAAA,GAAEH,YAAY,CAACE,QAAQ,CAACI,IAAI,cAAAH,qBAAA,cAAAA,qBAAA,GAAIP,EAAE,CAACW,YAAY,CAACC;MACtD,CAAC;IACH,CAAC,MAAM;MACL,MAAM,IAAIC,KAAK,CAAC,sCAAsC,CAAC;IACzD;IAEA,OAAAC,aAAA,CAAAA,aAAA,KACKV,YAAY;MACfF,UAAU;MACVa,gBAAgB,EAAEV,EAAE;MACpBW,SAAS;QAAA,IAAAC,UAAA,GAAAC,iBAAA,CAAE,aAAY;UACrB,IAAM;YAAEV,IAAI,EAAEW,SAAS;YAAET;UAAK,CAAC,GAAGJ,QAAQ;UAC1C,IAAMc,UAAU,GAAG;YACjBC,KAAK,EAAEF,SAAS;YAChBX,IAAI,EAAEW,SAAS;YACfT;UACF,CAAC;UACD,IAAMD,KAAK,SAAUR,UAAU,CAACqB,SAAS,CAACF,UAAU,CAAW;UAC/D,OAAOzB,oBAAoB,CAACqB,SAAS,CAAChB,EAAE,EAAES,KAAK,CAAC;QAClD,CAAC;QAAA,SAAAO,UAAA;UAAA,OAAAC,UAAA,CAAAM,KAAA,OAAAC,SAAA;QAAA;QAAA,OAAAR,SAAA;MAAA;IAAA;EAEL,CAAC,EACD,CAAChB,EAAE,EAAEC,UAAU,EAAEC,UAAU,CAC7B,CAAC;EAED,OAAOC,OAAO;AAChB;AAEA,eAAeJ,cAAc"}
@@ -0,0 +1,8 @@
1
+ import { type TablePluginComponent } from '@deephaven/plugin';
2
+ /**
3
+ * Creates a table plugin loader function.
4
+ * @returns A function to load a Table plugin element by name
5
+ */
6
+ export declare function useLoadTablePlugin(): (name: string) => TablePluginComponent;
7
+ export default useLoadTablePlugin;
8
+ //# sourceMappingURL=useLoadTablePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoadTablePlugin.d.ts","sourceRoot":"","sources":["../src/useLoadTablePlugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,mBAAmB,CAAC;AAK3B;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,oBAAoB,CAwB3E;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { useCallback } from 'react';
2
+ import { isTablePlugin, isLegacyTablePlugin, usePlugins } from '@deephaven/plugin';
3
+ import Log from '@deephaven/log';
4
+ var log = Log.module('@deephaven/app-utils/useTablePlugin');
5
+
6
+ /**
7
+ * Creates a table plugin loader function.
8
+ * @returns A function to load a Table plugin element by name
9
+ */
10
+ export function useLoadTablePlugin() {
11
+ var plugins = usePlugins();
12
+ var plugin = useCallback(name => {
13
+ // First check if we have any plugin modules loaded that match the TablePlugin.
14
+ var pluginModule = plugins.get(name);
15
+ if (pluginModule != null) {
16
+ if (isTablePlugin(pluginModule)) {
17
+ return pluginModule.component;
18
+ }
19
+ if (isLegacyTablePlugin(pluginModule)) {
20
+ return pluginModule.TablePlugin;
21
+ }
22
+ }
23
+ var errorMessage = "Unable to find table plugin ".concat(name, ".");
24
+ log.error(errorMessage);
25
+ throw new Error(errorMessage);
26
+ }, [plugins]);
27
+ return plugin;
28
+ }
29
+ export default useLoadTablePlugin;
30
+ //# sourceMappingURL=useLoadTablePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoadTablePlugin.js","names":["useCallback","isTablePlugin","isLegacyTablePlugin","usePlugins","Log","log","module","useLoadTablePlugin","plugins","plugin","name","pluginModule","get","component","TablePlugin","errorMessage","concat","error","Error"],"sources":["../src/useLoadTablePlugin.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n type TablePluginComponent,\n isTablePlugin,\n isLegacyTablePlugin,\n usePlugins,\n} from '@deephaven/plugin';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('@deephaven/app-utils/useTablePlugin');\n\n/**\n * Creates a table plugin loader function.\n * @returns A function to load a Table plugin element by name\n */\nexport function useLoadTablePlugin(): (name: string) => TablePluginComponent {\n const plugins = usePlugins();\n\n const plugin = useCallback(\n (name: string) => {\n // First check if we have any plugin modules loaded that match the TablePlugin.\n const pluginModule = plugins.get(name);\n if (pluginModule != null) {\n if (isTablePlugin(pluginModule)) {\n return pluginModule.component;\n }\n if (isLegacyTablePlugin(pluginModule)) {\n return pluginModule.TablePlugin;\n }\n }\n\n const errorMessage = `Unable to find table plugin ${name}.`;\n log.error(errorMessage);\n throw new Error(errorMessage);\n },\n [plugins]\n );\n\n return plugin;\n}\n\nexport default useLoadTablePlugin;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAEEC,aAAa,EACbC,mBAAmB,EACnBC,UAAU,QACL,mBAAmB;AAC1B,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,qCAAqC,CAAC;;AAE7D;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAA2C;EAC3E,IAAMC,OAAO,GAAGL,UAAU,CAAC,CAAC;EAE5B,IAAMM,MAAM,GAAGT,WAAW,CACvBU,IAAY,IAAK;IAChB;IACA,IAAMC,YAAY,GAAGH,OAAO,CAACI,GAAG,CAACF,IAAI,CAAC;IACtC,IAAIC,YAAY,IAAI,IAAI,EAAE;MACxB,IAAIV,aAAa,CAACU,YAAY,CAAC,EAAE;QAC/B,OAAOA,YAAY,CAACE,SAAS;MAC/B;MACA,IAAIX,mBAAmB,CAACS,YAAY,CAAC,EAAE;QACrC,OAAOA,YAAY,CAACG,WAAW;MACjC;IACF;IAEA,IAAMC,YAAY,kCAAAC,MAAA,CAAkCN,IAAI,MAAG;IAC3DL,GAAG,CAACY,KAAK,CAACF,YAAY,CAAC;IACvB,MAAM,IAAIG,KAAK,CAACH,YAAY,CAAC;EAC/B,CAAC,EACD,CAACP,OAAO,CACV,CAAC;EAED,OAAOC,MAAM;AACf;AAEA,eAAeF,kBAAkB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.50.1-beta.4+f440a383",
3
+ "version": "0.51.0",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,26 +22,26 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/app-utils": "^0.50.1-beta.4+f440a383",
26
- "@deephaven/chart": "^0.50.1-beta.4+f440a383",
27
- "@deephaven/components": "^0.50.1-beta.4+f440a383",
28
- "@deephaven/console": "^0.50.1-beta.4+f440a383",
29
- "@deephaven/dashboard": "^0.50.1-beta.4+f440a383",
30
- "@deephaven/file-explorer": "^0.50.1-beta.4+f440a383",
31
- "@deephaven/filters": "^0.50.1-beta.4+f440a383",
32
- "@deephaven/golden-layout": "^0.50.1-beta.4+f440a383",
33
- "@deephaven/grid": "^0.50.1-beta.4+f440a383",
34
- "@deephaven/icons": "^0.50.1-beta.4+f440a383",
35
- "@deephaven/iris-grid": "^0.50.1-beta.4+f440a383",
36
- "@deephaven/jsapi-bootstrap": "^0.50.1-beta.4+f440a383",
37
- "@deephaven/jsapi-types": "^0.50.1-beta.4+f440a383",
38
- "@deephaven/jsapi-utils": "^0.50.1-beta.4+f440a383",
39
- "@deephaven/log": "^0.50.1-beta.4+f440a383",
40
- "@deephaven/plugin": "^0.50.1-beta.4+f440a383",
41
- "@deephaven/react-hooks": "^0.50.1-beta.4+f440a383",
42
- "@deephaven/redux": "^0.50.1-beta.4+f440a383",
43
- "@deephaven/storage": "^0.50.1-beta.4+f440a383",
44
- "@deephaven/utils": "^0.50.1-beta.4+f440a383",
25
+ "@deephaven/chart": "^0.51.0",
26
+ "@deephaven/components": "^0.51.0",
27
+ "@deephaven/console": "^0.51.0",
28
+ "@deephaven/dashboard": "^0.51.0",
29
+ "@deephaven/file-explorer": "^0.51.0",
30
+ "@deephaven/filters": "^0.51.0",
31
+ "@deephaven/golden-layout": "^0.51.0",
32
+ "@deephaven/grid": "^0.51.0",
33
+ "@deephaven/icons": "^0.51.0",
34
+ "@deephaven/iris-grid": "^0.51.0",
35
+ "@deephaven/jsapi-bootstrap": "^0.51.0",
36
+ "@deephaven/jsapi-components": "^0.51.0",
37
+ "@deephaven/jsapi-types": "^0.51.0",
38
+ "@deephaven/jsapi-utils": "^0.51.0",
39
+ "@deephaven/log": "^0.51.0",
40
+ "@deephaven/plugin": "^0.51.0",
41
+ "@deephaven/react-hooks": "^0.51.0",
42
+ "@deephaven/redux": "^0.51.0",
43
+ "@deephaven/storage": "^0.51.0",
44
+ "@deephaven/utils": "^0.51.0",
45
45
  "@fortawesome/react-fontawesome": "^0.2.0",
46
46
  "classnames": "^2.3.1",
47
47
  "deep-equal": "^2.0.5",
@@ -64,8 +64,8 @@
64
64
  "react-redux": "^7.2.4"
65
65
  },
66
66
  "devDependencies": {
67
- "@deephaven/jsapi-shim": "^0.50.1-beta.4+f440a383",
68
- "@deephaven/mocks": "^0.50.1-beta.4+f440a383"
67
+ "@deephaven/jsapi-shim": "^0.51.0",
68
+ "@deephaven/mocks": "^0.51.0"
69
69
  },
70
70
  "files": [
71
71
  "dist"
@@ -76,5 +76,5 @@
76
76
  "publishConfig": {
77
77
  "access": "public"
78
78
  },
79
- "gitHead": "f440a383bc5ddc7c8beb06d858d6e0bf4ad1da29"
79
+ "gitHead": "54f7cc5d08a9c1a390b2e89a9fb84fe1018008eb"
80
80
  }