@deephaven/dashboard-core-plugins 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.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 (105) hide show
  1. package/dist/ChartBuilderPlugin.js +8 -15
  2. package/dist/ChartBuilderPlugin.js.map +1 -1
  3. package/dist/ChartPanelPlugin.js +13 -6
  4. package/dist/ChartPanelPlugin.js.map +1 -1
  5. package/dist/ChartWidgetPlugin.js +11 -4
  6. package/dist/ChartWidgetPlugin.js.map +1 -1
  7. package/dist/ConsolePlugin.js +38 -46
  8. package/dist/ConsolePlugin.js.map +1 -1
  9. package/dist/FilterPlugin.js +63 -44
  10. package/dist/FilterPlugin.js.map +1 -1
  11. package/dist/GridPanelPlugin.js +3 -5
  12. package/dist/GridPanelPlugin.js.map +1 -1
  13. package/dist/GridWidgetPlugin.d.ts +18 -1
  14. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  15. package/dist/GridWidgetPlugin.js +54 -30
  16. package/dist/GridWidgetPlugin.js.map +1 -1
  17. package/dist/LinkerPlugin.js +3 -5
  18. package/dist/LinkerPlugin.js.map +1 -1
  19. package/dist/MarkdownPlugin.js +18 -17
  20. package/dist/MarkdownPlugin.js.map +1 -1
  21. package/dist/PandasPanelPlugin.js +3 -5
  22. package/dist/PandasPanelPlugin.js.map +1 -1
  23. package/dist/PandasWidgetPlugin.js +3 -7
  24. package/dist/PandasWidgetPlugin.js.map +1 -1
  25. package/dist/TablePluginWrapper.js +8 -10
  26. package/dist/TablePluginWrapper.js.map +1 -1
  27. package/dist/WidgetLoaderPlugin.js +24 -29
  28. package/dist/WidgetLoaderPlugin.js.map +1 -1
  29. package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
  30. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  31. package/dist/controls/input-filter/InputFilter.js +32 -58
  32. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownContainer.js +4 -5
  34. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownEditor.js +7 -10
  36. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  37. package/dist/controls/markdown/MarkdownStartPage.js +8 -12
  38. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  39. package/dist/linker/Linker.js +100 -192
  40. package/dist/linker/Linker.js.map +1 -1
  41. package/dist/linker/LinkerLink.js +23 -31
  42. package/dist/linker/LinkerLink.js.map +1 -1
  43. package/dist/linker/LinkerOverlayContent.js +65 -66
  44. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  45. package/dist/linker/LinkerUtils.js +6 -14
  46. package/dist/linker/LinkerUtils.js.map +1 -1
  47. package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
  48. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  49. package/dist/panels/ChartFilterOverlay.js +7 -9
  50. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  51. package/dist/panels/ChartPanel.js +136 -220
  52. package/dist/panels/ChartPanel.js.map +1 -1
  53. package/dist/panels/ChartPanelUtils.js +3 -4
  54. package/dist/panels/ChartPanelUtils.js.map +1 -1
  55. package/dist/panels/CommandHistoryPanel.js +33 -52
  56. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  57. package/dist/panels/ConsolePanel.js +68 -130
  58. package/dist/panels/ConsolePanel.js.map +1 -1
  59. package/dist/panels/CorePanel.js +6 -18
  60. package/dist/panels/CorePanel.js.map +1 -1
  61. package/dist/panels/DropdownFilterPanel.js +109 -165
  62. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  63. package/dist/panels/FileExplorerPanel.js +30 -55
  64. package/dist/panels/FileExplorerPanel.js.map +1 -1
  65. package/dist/panels/FilterSetManager.js +81 -141
  66. package/dist/panels/FilterSetManager.js.map +1 -1
  67. package/dist/panels/FilterSetManagerPanel.js +68 -87
  68. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  69. package/dist/panels/InputFilterPanel.js +45 -68
  70. package/dist/panels/InputFilterPanel.js.map +1 -1
  71. package/dist/panels/IrisGridPanel.d.ts +28 -6
  72. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  73. package/dist/panels/IrisGridPanel.js +224 -280
  74. package/dist/panels/IrisGridPanel.js.map +1 -1
  75. package/dist/panels/IrisGridPanelTooltip.js +1 -3
  76. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  77. package/dist/panels/LogPanel.js +6 -13
  78. package/dist/panels/LogPanel.js.map +1 -1
  79. package/dist/panels/MarkdownNotebook.js +28 -50
  80. package/dist/panels/MarkdownNotebook.js.map +1 -1
  81. package/dist/panels/MarkdownPanel.js +19 -38
  82. package/dist/panels/MarkdownPanel.js.map +1 -1
  83. package/dist/panels/NotebookPanel.js +157 -292
  84. package/dist/panels/NotebookPanel.js.map +1 -1
  85. package/dist/panels/PandasPanel.js +5 -15
  86. package/dist/panels/PandasPanel.js.map +1 -1
  87. package/dist/panels/PandasReloadButton.js +1 -3
  88. package/dist/panels/PandasReloadButton.js.map +1 -1
  89. package/dist/panels/WidgetPanel.js +42 -51
  90. package/dist/panels/WidgetPanel.js.map +1 -1
  91. package/dist/panels/WidgetPanelTooltip.js +6 -10
  92. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  93. package/dist/useConfigureRuff.js +8 -9
  94. package/dist/useConfigureRuff.js.map +1 -1
  95. package/dist/useDashboardColumnFilters.js +4 -7
  96. package/dist/useDashboardColumnFilters.js.map +1 -1
  97. package/dist/useGridLinker.js +9 -16
  98. package/dist/useGridLinker.js.map +1 -1
  99. package/dist/useIrisGridModel.d.ts +2 -2
  100. package/dist/useIrisGridModel.d.ts.map +1 -1
  101. package/dist/useIrisGridModel.js +34 -6
  102. package/dist/useIrisGridModel.js.map +1 -1
  103. package/dist/useTablePlugin.js +27 -14
  104. package/dist/useTablePlugin.js.map +1 -1
  105. package/package.json +24 -24
@@ -42,22 +42,18 @@ class WidgetPanel extends PureComponent {
42
42
  };
43
43
  }
44
44
  handleCopyName() {
45
- var {
46
- descriptor
47
- } = this.props;
45
+ var descriptor = this.props.descriptor;
48
46
  copyToClipboard(descriptor.name);
49
47
  }
50
48
  getErrorMessage() {
51
- var {
52
- descriptor,
53
- errorMessage
54
- } = this.props;
55
- var {
56
- isClientDisconnected,
57
- isPanelDisconnected,
58
- isWidgetDisconnected,
59
- isWaitingForReconnect
60
- } = this.state;
49
+ var _this$props = this.props,
50
+ descriptor = _this$props.descriptor,
51
+ errorMessage = _this$props.errorMessage;
52
+ var _this$state = this.state,
53
+ isClientDisconnected = _this$state.isClientDisconnected,
54
+ isPanelDisconnected = _this$state.isPanelDisconnected,
55
+ isWidgetDisconnected = _this$state.isWidgetDisconnected,
56
+ isWaitingForReconnect = _this$state.isWaitingForReconnect;
61
57
  if (errorMessage != null && errorMessage !== '') {
62
58
  return "".concat(errorMessage);
63
59
  }
@@ -68,10 +64,8 @@ class WidgetPanel extends PureComponent {
68
64
  return 'Disconnected from server.';
69
65
  }
70
66
  if (isPanelDisconnected) {
71
- var {
72
- name,
73
- type
74
- } = descriptor;
67
+ var name = descriptor.name,
68
+ type = descriptor.type;
75
69
  return "Variable \"".concat(name, "\" not set.\n").concat(type, " does not exist yet.");
76
70
  }
77
71
  if (isWidgetDisconnected) {
@@ -80,9 +74,7 @@ class WidgetPanel extends PureComponent {
80
74
  return undefined;
81
75
  }
82
76
  handleSessionClosed(session) {
83
- var {
84
- onSessionClose
85
- } = this.props;
77
+ var onSessionClose = this.props.onSessionClose;
86
78
  // The session has closed and we won't be able to reconnect, as this widget isn't persisted
87
79
  this.setState({
88
80
  isPanelDisconnected: true,
@@ -91,37 +83,36 @@ class WidgetPanel extends PureComponent {
91
83
  onSessionClose === null || onSessionClose === void 0 || onSessionClose(session);
92
84
  }
93
85
  render() {
94
- var {
95
- children,
96
- className,
97
- componentPanel,
98
- descriptor,
99
- isLoaded,
100
- isLoading,
101
- glContainer,
102
- glEventHub,
103
- isDisconnected,
104
- isClonable,
105
- isRenamable,
106
- showTabTooltip = false,
107
- renderTabTooltip,
108
- onClearAllFilters,
109
- onHide,
110
- onFocus,
111
- onBlur,
112
- onResize,
113
- onSessionOpen,
114
- onShow,
115
- onTabBlur,
116
- onTabFocus,
117
- onTabClicked,
118
- additionalActions: propsAdditionalActions
119
- } = this.props;
120
- var {
121
- isPanelDisconnected,
122
- isWidgetDisconnected,
123
- isPanelInactive
124
- } = this.state;
86
+ var _this$props2 = this.props,
87
+ children = _this$props2.children,
88
+ className = _this$props2.className,
89
+ componentPanel = _this$props2.componentPanel,
90
+ descriptor = _this$props2.descriptor,
91
+ isLoaded = _this$props2.isLoaded,
92
+ isLoading = _this$props2.isLoading,
93
+ glContainer = _this$props2.glContainer,
94
+ glEventHub = _this$props2.glEventHub,
95
+ isDisconnected = _this$props2.isDisconnected,
96
+ isClonable = _this$props2.isClonable,
97
+ isRenamable = _this$props2.isRenamable,
98
+ _this$props2$showTabT = _this$props2.showTabTooltip,
99
+ showTabTooltip = _this$props2$showTabT === void 0 ? false : _this$props2$showTabT,
100
+ renderTabTooltip = _this$props2.renderTabTooltip,
101
+ onClearAllFilters = _this$props2.onClearAllFilters,
102
+ onHide = _this$props2.onHide,
103
+ onFocus = _this$props2.onFocus,
104
+ onBlur = _this$props2.onBlur,
105
+ onResize = _this$props2.onResize,
106
+ onSessionOpen = _this$props2.onSessionOpen,
107
+ onShow = _this$props2.onShow,
108
+ onTabBlur = _this$props2.onTabBlur,
109
+ onTabFocus = _this$props2.onTabFocus,
110
+ onTabClicked = _this$props2.onTabClicked,
111
+ propsAdditionalActions = _this$props2.additionalActions;
112
+ var _this$state2 = this.state,
113
+ isPanelDisconnected = _this$state2.isPanelDisconnected,
114
+ isWidgetDisconnected = _this$state2.isWidgetDisconnected,
115
+ isPanelInactive = _this$state2.isPanelInactive;
125
116
  var errorMessage = this.getErrorMessage();
126
117
  var doRenderTabTooltip = renderTabTooltip !== null && renderTabTooltip !== void 0 ? renderTabTooltip : this.getCachedRenderTabTooltip(showTabTooltip, descriptor);
127
118
  var additionalActions = this.getCachedActions(descriptor, propsAdditionalActions);
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","createXComponent","copyToClipboard","EMPTY_ARRAY","Panel","WidgetPanelTooltip","jsx","_jsx","jsxs","_jsxs","WidgetPanel","constructor","props","_this","this","_defineProperty","showTabTooltip","descriptor","undefined","_descriptor$displayTy","propsAdditionalActions","arguments","length","title","concat","displayType","type","group","groups","medium","order","action","handleCopyName","handleSessionClosed","bind","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","name","getErrorMessage","errorMessage","session","onSessionClose","setState","render","children","className","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","additionalActions","doRenderTabTooltip","getCachedRenderTabTooltip","getCachedActions","disconnected","inactive","XWidgetPanel"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextActions,\n createXComponent,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { copyToClipboard, EMPTY_ARRAY } from '@deephaven/utils';\nimport Panel, { type CorePanelProps } from './CorePanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\n\nexport type WidgetPanelProps = CorePanelProps & {\n descriptor: WidgetPanelDescriptor;\n showTabTooltip?: boolean;\n isDisconnected?: boolean;\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 isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.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 { descriptor } = this.props;\n copyToClipboard(descriptor.name);\n }\n\n getErrorMessage(): string | undefined {\n const { descriptor, errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage != null && 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 { name, type } = descriptor;\n return `Variable \"${name}\" not set.\\n${type} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n return `${descriptor.name} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (showTabTooltip: boolean, descriptor: WidgetPanelDescriptor) =>\n showTabTooltip\n ? () => <WidgetPanelTooltip descriptor={descriptor} />\n : undefined\n );\n\n getCachedActions = memoize(\n (\n descriptor: WidgetPanelDescriptor,\n propsAdditionalActions: readonly ResolvableContextAction[] = EMPTY_ARRAY\n ) => [\n ...propsAdditionalActions,\n {\n title: `Copy ${descriptor.displayType ?? descriptor.type} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ]\n );\n\n handleSessionClosed(session: dh.IdeSession): 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?.(session);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n descriptor,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip = false,\n renderTabTooltip,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onSessionOpen,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n\n additionalActions: propsAdditionalActions,\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(showTabTooltip, descriptor);\n\n const additionalActions = this.getCachedActions(\n descriptor,\n propsAdditionalActions\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={onSessionOpen}\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\nconst XWidgetPanel = createXComponent<WidgetPanelProps>(WidgetPanel);\n\nexport default XWidgetPanel;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","createXComponent","copyToClipboard","EMPTY_ARRAY","Panel","WidgetPanelTooltip","jsx","_jsx","jsxs","_jsxs","WidgetPanel","constructor","props","_this","this","_defineProperty","showTabTooltip","descriptor","undefined","_descriptor$displayTy","propsAdditionalActions","arguments","length","title","concat","displayType","type","group","groups","medium","order","action","handleCopyName","handleSessionClosed","bind","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","name","getErrorMessage","_this$props","errorMessage","_this$state","session","onSessionClose","setState","render","_this$props2","children","className","componentPanel","isLoaded","isLoading","glContainer","glEventHub","isDisconnected","isClonable","isRenamable","_this$props2$showTabT","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onSessionOpen","onShow","onTabBlur","onTabFocus","onTabClicked","additionalActions","_this$state2","doRenderTabTooltip","getCachedRenderTabTooltip","getCachedActions","disconnected","inactive","XWidgetPanel"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextActions,\n createXComponent,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { copyToClipboard, EMPTY_ARRAY } from '@deephaven/utils';\nimport Panel, { type CorePanelProps } from './CorePanel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\nimport { type WidgetPanelDescriptor } from './WidgetPanelTypes';\n\nexport type WidgetPanelProps = CorePanelProps & {\n descriptor: WidgetPanelDescriptor;\n showTabTooltip?: boolean;\n isDisconnected?: boolean;\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 isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.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 { descriptor } = this.props;\n copyToClipboard(descriptor.name);\n }\n\n getErrorMessage(): string | undefined {\n const { descriptor, errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage != null && 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 { name, type } = descriptor;\n return `Variable \"${name}\" not set.\\n${type} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n return `${descriptor.name} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (showTabTooltip: boolean, descriptor: WidgetPanelDescriptor) =>\n showTabTooltip\n ? () => <WidgetPanelTooltip descriptor={descriptor} />\n : undefined\n );\n\n getCachedActions = memoize(\n (\n descriptor: WidgetPanelDescriptor,\n propsAdditionalActions: readonly ResolvableContextAction[] = EMPTY_ARRAY\n ) => [\n ...propsAdditionalActions,\n {\n title: `Copy ${descriptor.displayType ?? descriptor.type} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ]\n );\n\n handleSessionClosed(session: dh.IdeSession): 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?.(session);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n descriptor,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip = false,\n renderTabTooltip,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onSessionOpen,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n\n additionalActions: propsAdditionalActions,\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(showTabTooltip, descriptor);\n\n const additionalActions = this.getCachedActions(\n descriptor,\n propsAdditionalActions\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={onSessionOpen}\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\nconst XWidgetPanel = createXComponent<WidgetPanelProps>(WidgetPanel);\n\nexport default XWidgetPanel;\n"],"mappings":"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","ignoreList":[]}
@@ -3,16 +3,12 @@ import { CopyButton, createXComponent } from '@deephaven/components';
3
3
  import "./WidgetPanelTooltip.css";
4
4
  import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
5
5
  function WidgetPanelTooltip(props) {
6
- var {
7
- children,
8
- descriptor
9
- } = props;
10
- var {
11
- name,
12
- type,
13
- description,
14
- displayName
15
- } = descriptor;
6
+ var children = props.children,
7
+ descriptor = props.descriptor;
8
+ var name = descriptor.name,
9
+ type = descriptor.type,
10
+ description = descriptor.description,
11
+ displayName = descriptor.displayName;
16
12
 
17
13
  // Convert PascalCase to Title Case
18
14
  // ex. PartitionedTable -> Partitioned Table
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanelTooltip.js","names":["React","CopyButton","createXComponent","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","WidgetPanelTooltip","props","children","descriptor","name","type","description","displayName","formattedType","replace","className","UNSAFE_className","tooltip","copy","isQuiet","Boolean","XWidgetPanelTooltip"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { type ReactElement } from 'react';\nimport { CopyButton, createXComponent } from '@deephaven/components';\nimport './WidgetPanelTooltip.scss';\nimport { type WidgetPanelTooltipProps } from './WidgetPanelTypes';\n\nfunction WidgetPanelTooltip(props: WidgetPanelTooltipProps): ReactElement {\n const { children, descriptor } = props;\n const { name, type, description, displayName } = descriptor;\n\n // Convert PascalCase to Title Case\n // ex. PartitionedTable -> Partitioned Table\n const formattedType = type.replace(/([a-z])([A-Z])/g, '$1 $2');\n\n return (\n <div className=\"tab-tooltip-grid-container\">\n <span className=\"tab-tooltip-title\">{formattedType} Name</span>\n <div className=\"tab-tooltip-name-wrapper\">\n <span className=\"tab-tooltip-name\">{name}</span>\n <CopyButton\n UNSAFE_className=\"tab-tooltip-copy\"\n tooltip=\"Copy name\"\n copy={name}\n isQuiet\n />\n </div>\n {name !== displayName && Boolean(displayName) && (\n <>\n <span className=\"tab-tooltip-title\">Display Name</span>\n <span className=\"tab-tooltip-name\">{displayName}</span>\n </>\n )}\n {Boolean(description) && (\n <div className=\"tab-tooltip-description\">{description}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst XWidgetPanelTooltip = createXComponent(WidgetPanelTooltip);\n\nexport default XWidgetPanelTooltip;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6B,OAAO;AAChD,SAASC,UAAU,EAAEC,gBAAgB,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AAIrE,SAASC,kBAAkBA,CAACC,KAA8B,EAAgB;EACxE,IAAM;IAAEC,QAAQ;IAAEC;EAAW,CAAC,GAAGF,KAAK;EACtC,IAAM;IAAEG,IAAI;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAY,CAAC,GAAGJ,UAAU;;EAE3D;EACA;EACA,IAAMK,aAAa,GAAGH,IAAI,CAACI,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;EAE9D,oBACEd,KAAA;IAAKe,SAAS,EAAC,4BAA4B;IAAAR,QAAA,gBACzCP,KAAA;MAAMe,SAAS,EAAC,mBAAmB;MAAAR,QAAA,GAAEM,aAAa,EAAC,OAAK;IAAA,CAAM,CAAC,eAC/Db,KAAA;MAAKe,SAAS,EAAC,0BAA0B;MAAAR,QAAA,gBACvCL,IAAA;QAAMa,SAAS,EAAC,kBAAkB;QAAAR,QAAA,EAAEE;MAAI,CAAO,CAAC,eAChDP,IAAA,CAACL,UAAU;QACTmB,gBAAgB,EAAC,kBAAkB;QACnCC,OAAO,EAAC,WAAW;QACnBC,IAAI,EAAET,IAAK;QACXU,OAAO;MAAA,CACR,CAAC;IAAA,CACC,CAAC,EACLV,IAAI,KAAKG,WAAW,IAAIQ,OAAO,CAACR,WAAW,CAAC,iBAC3CZ,KAAA,CAAAI,SAAA;MAAAG,QAAA,gBACEL,IAAA;QAAMa,SAAS,EAAC,mBAAmB;QAAAR,QAAA,EAAC;MAAY,CAAM,CAAC,eACvDL,IAAA;QAAMa,SAAS,EAAC,kBAAkB;QAAAR,QAAA,EAAEK;MAAW,CAAO,CAAC;IAAA,CACvD,CACH,EACAQ,OAAO,CAACT,WAAW,CAAC,iBACnBT,IAAA;MAAKa,SAAS,EAAC,yBAAyB;MAAAR,QAAA,EAAEI;IAAW,CAAM,CAC5D,EACAJ,QAAQ;EAAA,CACN,CAAC;AAEV;AAEA,IAAMc,mBAAmB,GAAGvB,gBAAgB,CAACO,kBAAkB,CAAC;AAEhE,eAAegB,mBAAmB","ignoreList":[]}
1
+ {"version":3,"file":"WidgetPanelTooltip.js","names":["React","CopyButton","createXComponent","jsxs","_jsxs","jsx","_jsx","Fragment","_Fragment","WidgetPanelTooltip","props","children","descriptor","name","type","description","displayName","formattedType","replace","className","UNSAFE_className","tooltip","copy","isQuiet","Boolean","XWidgetPanelTooltip"],"sources":["../../src/panels/WidgetPanelTooltip.tsx"],"sourcesContent":["import React, { type ReactElement } from 'react';\nimport { CopyButton, createXComponent } from '@deephaven/components';\nimport './WidgetPanelTooltip.scss';\nimport { type WidgetPanelTooltipProps } from './WidgetPanelTypes';\n\nfunction WidgetPanelTooltip(props: WidgetPanelTooltipProps): ReactElement {\n const { children, descriptor } = props;\n const { name, type, description, displayName } = descriptor;\n\n // Convert PascalCase to Title Case\n // ex. PartitionedTable -> Partitioned Table\n const formattedType = type.replace(/([a-z])([A-Z])/g, '$1 $2');\n\n return (\n <div className=\"tab-tooltip-grid-container\">\n <span className=\"tab-tooltip-title\">{formattedType} Name</span>\n <div className=\"tab-tooltip-name-wrapper\">\n <span className=\"tab-tooltip-name\">{name}</span>\n <CopyButton\n UNSAFE_className=\"tab-tooltip-copy\"\n tooltip=\"Copy name\"\n copy={name}\n isQuiet\n />\n </div>\n {name !== displayName && Boolean(displayName) && (\n <>\n <span className=\"tab-tooltip-title\">Display Name</span>\n <span className=\"tab-tooltip-name\">{displayName}</span>\n </>\n )}\n {Boolean(description) && (\n <div className=\"tab-tooltip-description\">{description}</div>\n )}\n {children}\n </div>\n );\n}\n\nconst XWidgetPanelTooltip = createXComponent(WidgetPanelTooltip);\n\nexport default XWidgetPanelTooltip;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6B,OAAO;AAChD,SAASC,UAAU,EAAEC,gBAAgB,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AAIrE,SAASC,kBAAkBA,CAACC,KAA8B,EAAgB;EACxE,IAAQC,QAAQ,GAAiBD,KAAK,CAA9BC,QAAQ;IAAEC,UAAU,GAAKF,KAAK,CAApBE,UAAU;EAC5B,IAAQC,IAAI,GAAqCD,UAAU,CAAnDC,IAAI;IAAEC,IAAI,GAA+BF,UAAU,CAA7CE,IAAI;IAAEC,WAAW,GAAkBH,UAAU,CAAvCG,WAAW;IAAEC,WAAW,GAAKJ,UAAU,CAA1BI,WAAW;;EAE5C;EACA;EACA,IAAMC,aAAa,GAAGH,IAAI,CAACI,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;EAE9D,oBACEd,KAAA;IAAKe,SAAS,EAAC,4BAA4B;IAAAR,QAAA,gBACzCP,KAAA;MAAMe,SAAS,EAAC,mBAAmB;MAAAR,QAAA,GAAEM,aAAa,EAAC,OAAK;IAAA,CAAM,CAAC,eAC/Db,KAAA;MAAKe,SAAS,EAAC,0BAA0B;MAAAR,QAAA,gBACvCL,IAAA;QAAMa,SAAS,EAAC,kBAAkB;QAAAR,QAAA,EAAEE;MAAI,CAAO,CAAC,eAChDP,IAAA,CAACL,UAAU;QACTmB,gBAAgB,EAAC,kBAAkB;QACnCC,OAAO,EAAC,WAAW;QACnBC,IAAI,EAAET,IAAK;QACXU,OAAO;MAAA,CACR,CAAC;IAAA,CACC,CAAC,EACLV,IAAI,KAAKG,WAAW,IAAIQ,OAAO,CAACR,WAAW,CAAC,iBAC3CZ,KAAA,CAAAI,SAAA;MAAAG,QAAA,gBACEL,IAAA;QAAMa,SAAS,EAAC,mBAAmB;QAAAR,QAAA,EAAC;MAAY,CAAM,CAAC,eACvDL,IAAA;QAAMa,SAAS,EAAC,kBAAkB;QAAAR,QAAA,EAAEK;MAAW,CAAO,CAAC;IAAA,CACvD,CACH,EACAQ,OAAO,CAACT,WAAW,CAAC,iBACnBT,IAAA;MAAKa,SAAS,EAAC,yBAAyB;MAAAR,QAAA,EAAEI;IAAW,CAAM,CAC5D,EACAJ,QAAQ;EAAA,CACN,CAAC;AAEV;AAEA,IAAMc,mBAAmB,GAAGvB,gBAAgB,CAACO,kBAAkB,CAAC;AAEhE,eAAegB,mBAAmB","ignoreList":[]}
@@ -9,15 +9,14 @@ import { getNotebookSettings } from '@deephaven/redux';
9
9
  * Any changes to the redux values will be applied to the Monaco providers.
10
10
  */
11
11
  export function useConfigureRuff() {
12
- var {
13
- python: {
14
- linter = {}
15
- } = {}
16
- } = useAppSelector(getNotebookSettings);
17
- var {
18
- isEnabled: ruffEnabled = false,
19
- config: ruffConfig
20
- } = linter;
12
+ var _useAppSelector = useAppSelector(getNotebookSettings),
13
+ _useAppSelector$pytho = _useAppSelector.python,
14
+ _useAppSelector$pytho2 = _useAppSelector$pytho === void 0 ? {} : _useAppSelector$pytho,
15
+ _useAppSelector$pytho3 = _useAppSelector$pytho2.linter,
16
+ linter = _useAppSelector$pytho3 === void 0 ? {} : _useAppSelector$pytho3;
17
+ var _linter$isEnabled = linter.isEnabled,
18
+ ruffEnabled = _linter$isEnabled === void 0 ? false : _linter$isEnabled,
19
+ ruffConfig = linter.config;
21
20
  useEffect(function setRuffSettings() {
22
21
  MonacoProviders.isRuffEnabled = ruffEnabled;
23
22
  MonacoProviders.setRuffSettings(ruffConfig); // Also inits Ruff if needed
@@ -1 +1 @@
1
- {"version":3,"file":"useConfigureRuff.js","names":["useEffect","MonacoProviders","useAppSelector","getNotebookSettings","useConfigureRuff","python","linter","isEnabled","ruffEnabled","config","ruffConfig","setRuffSettings","isRuffEnabled"],"sources":["../src/useConfigureRuff.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { MonacoProviders } from '@deephaven/console';\nimport { useAppSelector } from '@deephaven/dashboard';\nimport { getNotebookSettings } from '@deephaven/redux';\n\n/**\n * Hook to configure Ruff settings in Monaco.\n * The enabled status and settings are read from redux.\n * Any changes to the redux values will be applied to the Monaco providers.\n */\nexport function useConfigureRuff(): void {\n const { python: { linter = {} } = {} } = useAppSelector(getNotebookSettings);\n const { isEnabled: ruffEnabled = false, config: ruffConfig } = linter;\n useEffect(\n function setRuffSettings() {\n MonacoProviders.isRuffEnabled = ruffEnabled;\n MonacoProviders.setRuffSettings(ruffConfig); // Also inits Ruff if needed\n },\n [ruffEnabled, ruffConfig]\n );\n}\n\nexport default useConfigureRuff;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,eAAe,QAAQ,oBAAoB;AACpD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,mBAAmB,QAAQ,kBAAkB;;AAEtD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAAS;EACvC,IAAM;IAAEC,MAAM,EAAE;MAAEC,MAAM,GAAG,CAAC;IAAE,CAAC,GAAG,CAAC;EAAE,CAAC,GAAGJ,cAAc,CAACC,mBAAmB,CAAC;EAC5E,IAAM;IAAEI,SAAS,EAAEC,WAAW,GAAG,KAAK;IAAEC,MAAM,EAAEC;EAAW,CAAC,GAAGJ,MAAM;EACrEN,SAAS,CACP,SAASW,eAAeA,CAAA,EAAG;IACzBV,eAAe,CAACW,aAAa,GAAGJ,WAAW;IAC3CP,eAAe,CAACU,eAAe,CAACD,UAAU,CAAC,CAAC,CAAC;EAC/C,CAAC,EACD,CAACF,WAAW,EAAEE,UAAU,CAC1B,CAAC;AACH;AAEA,eAAeN,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"useConfigureRuff.js","names":["useEffect","MonacoProviders","useAppSelector","getNotebookSettings","useConfigureRuff","_useAppSelector","_useAppSelector$pytho","python","_useAppSelector$pytho2","_useAppSelector$pytho3","linter","_linter$isEnabled","isEnabled","ruffEnabled","ruffConfig","config","setRuffSettings","isRuffEnabled"],"sources":["../src/useConfigureRuff.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { MonacoProviders } from '@deephaven/console';\nimport { useAppSelector } from '@deephaven/dashboard';\nimport { getNotebookSettings } from '@deephaven/redux';\n\n/**\n * Hook to configure Ruff settings in Monaco.\n * The enabled status and settings are read from redux.\n * Any changes to the redux values will be applied to the Monaco providers.\n */\nexport function useConfigureRuff(): void {\n const { python: { linter = {} } = {} } = useAppSelector(getNotebookSettings);\n const { isEnabled: ruffEnabled = false, config: ruffConfig } = linter;\n useEffect(\n function setRuffSettings() {\n MonacoProviders.isRuffEnabled = ruffEnabled;\n MonacoProviders.setRuffSettings(ruffConfig); // Also inits Ruff if needed\n },\n [ruffEnabled, ruffConfig]\n );\n}\n\nexport default useConfigureRuff;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,eAAe,QAAQ,oBAAoB;AACpD,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,mBAAmB,QAAQ,kBAAkB;;AAEtD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAAS;EACvC,IAAAC,eAAA,GAAyCH,cAAc,CAACC,mBAAmB,CAAC;IAAAG,qBAAA,GAAAD,eAAA,CAApEE,MAAM;IAAAC,sBAAA,GAAAF,qBAAA,cAAoB,CAAC,CAAC,GAAAA,qBAAA;IAAAG,sBAAA,GAAAD,sBAAA,CAAlBE,MAAM;IAANA,MAAM,GAAAD,sBAAA,cAAG,CAAC,CAAC,GAAAA,sBAAA;EAC7B,IAAAE,iBAAA,GAA+DD,MAAM,CAA7DE,SAAS;IAAEC,WAAW,GAAAF,iBAAA,cAAG,KAAK,GAAAA,iBAAA;IAAUG,UAAU,GAAKJ,MAAM,CAA7BK,MAAM;EAC9Cf,SAAS,CACP,SAASgB,eAAeA,CAAA,EAAG;IACzBf,eAAe,CAACgB,aAAa,GAAGJ,WAAW;IAC3CZ,eAAe,CAACe,eAAe,CAACF,UAAU,CAAC,CAAC,CAAC;EAC/C,CAAC,EACD,CAACD,WAAW,EAAEC,UAAU,CAC1B,CAAC;AACH;AAEA,eAAeV,gBAAgB","ignoreList":[]}
@@ -15,9 +15,8 @@ import { emitFilterColumnsChanged, emitFilterTableChanged } from "./FilterEvents
15
15
  * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.
16
16
  */
17
17
  export function useDashboardColumnFilters(columns, table) {
18
- var {
19
- eventHub
20
- } = useLayoutManager();
18
+ var _useLayoutManager = useLayoutManager(),
19
+ eventHub = _useLayoutManager.eventHub;
21
20
  var dashboardId = useDashboardId();
22
21
  var panelId = useDhId();
23
22
  useEffect(function columnsChanged() {
@@ -49,10 +48,8 @@ export function useDashboardColumnFilters(columns, table) {
49
48
  var inputFilters = useMemo(() => IrisGridUtils.getInputFiltersForColumns(columns !== null && columns !== void 0 ? columns : [],
50
49
  // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.
51
50
  reduxInputFilters.filter(_ref => {
52
- var {
53
- value,
54
- excludePanelIds
55
- } = _ref;
51
+ var value = _ref.value,
52
+ excludePanelIds = _ref.excludePanelIds;
56
53
  return value != null && (excludePanelIds == null || panelId != null && !excludePanelIds.includes(panelId));
57
54
  })), [columns, panelId, reduxInputFilters]);
58
55
  return inputFilters;
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardColumnFilters.js","names":["useCallback","useEffect","useMemo","IrisGridUtils","useLayoutManager","useDashboardId","useAppSelector","useDhId","getInputFiltersForDashboard","emitFilterColumnsChanged","emitFilterTableChanged","useDashboardColumnFilters","columns","table","eventHub","dashboardId","panelId","columnsChanged","tableChanged","cleanupOnUnmount","getInputFilters","s","reduxInputFilters","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","includes"],"sources":["../src/useDashboardColumnFilters.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { IrisGridUtils, type InputFilter } from '@deephaven/iris-grid';\nimport {\n useLayoutManager,\n useDashboardId,\n useAppSelector,\n useDhId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport { getInputFiltersForDashboard } from './redux';\nimport {\n type FilterColumnSourceId,\n emitFilterColumnsChanged,\n emitFilterTableChanged,\n} from './FilterEvents';\n\n/**\n * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and\n * adds the columns provided to the filter options in the dashboard.\n * @param columns The columns this source has available for filtering.\n * These are used to populate filter options in the UI (InputFilter, DropdownFilter).\n * null can be used to indicate the source is not yet ready which is useful\n * to preserve\n * @param table The table for this source if applicable.\n * This is used to enable ChartBuilder from IrisGrid.\n * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.\n */\nexport function useDashboardColumnFilters(\n columns: readonly { name: string; type: string }[] | null,\n table?: dh.Table\n): InputFilter[] {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const panelId = useDhId() as FilterColumnSourceId | null;\n\n useEffect(\n function columnsChanged() {\n if (panelId == null || columns == null) {\n return;\n }\n emitFilterColumnsChanged(eventHub, panelId, columns);\n },\n [eventHub, panelId, columns]\n );\n\n useEffect(\n function tableChanged() {\n if (table == null || panelId == null) {\n return;\n }\n emitFilterTableChanged(eventHub, panelId, table);\n },\n [eventHub, panelId, table]\n );\n\n // Cleanup separately because filtering the table or other operations can get a new columns array,\n // and we are using null to indicate unmount, not change\n useEffect(\n function cleanupOnUnmount() {\n if (panelId == null) {\n return;\n }\n return () => {\n emitFilterColumnsChanged(eventHub, panelId, null);\n emitFilterTableChanged(eventHub, panelId, null);\n };\n },\n [eventHub, panelId]\n );\n\n const getInputFilters = useCallback(\n (s: RootState) => getInputFiltersForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const reduxInputFilters = useAppSelector(getInputFilters);\n\n const inputFilters = useMemo(\n () =>\n IrisGridUtils.getInputFiltersForColumns(\n columns ?? [],\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n reduxInputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n (panelId != null && !excludePanelIds.includes(panelId)))\n )\n ),\n [columns, panelId, reduxInputFilters]\n );\n\n return inputFilters;\n}\n\nexport default useDashboardColumnFilters;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEvD,SAASC,aAAa,QAA0B,sBAAsB;AACtE,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,sBAAsB;AAAC,SAErBC,2BAA2B;AAAA,SAGlCC,wBAAwB,EACxBC,sBAAsB;AAGxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,OAAyD,EACzDC,KAAgB,EACD;EACf,IAAM;IAAEC;EAAS,CAAC,GAAGV,gBAAgB,CAAC,CAAC;EACvC,IAAMW,WAAW,GAAGV,cAAc,CAAC,CAAC;EACpC,IAAMW,OAAO,GAAGT,OAAO,CAAC,CAAgC;EAExDN,SAAS,CACP,SAASgB,cAAcA,CAAA,EAAG;IACxB,IAAID,OAAO,IAAI,IAAI,IAAIJ,OAAO,IAAI,IAAI,EAAE;MACtC;IACF;IACAH,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAAC;EACtD,CAAC,EACD,CAACE,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAC7B,CAAC;EAEDX,SAAS,CACP,SAASiB,YAAYA,CAAA,EAAG;IACtB,IAAIL,KAAK,IAAI,IAAI,IAAIG,OAAO,IAAI,IAAI,EAAE;MACpC;IACF;IACAN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAAC;EAClD,CAAC,EACD,CAACC,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAC3B,CAAC;;EAED;EACA;EACAZ,SAAS,CACP,SAASkB,gBAAgBA,CAAA,EAAG;IAC1B,IAAIH,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACA,OAAO,MAAM;MACXP,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;MACjDN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;IACjD,CAAC;EACH,CAAC,EACD,CAACF,QAAQ,EAAEE,OAAO,CACpB,CAAC;EAED,IAAMI,eAAe,GAAGpB,WAAW,CAChCqB,CAAY,IAAKb,2BAA2B,CAACa,CAAC,EAAEN,WAAW,CAAC,EAC7D,CAACA,WAAW,CACd,CAAC;EAED,IAAMO,iBAAiB,GAAGhB,cAAc,CAACc,eAAe,CAAC;EAEzD,IAAMG,YAAY,GAAGrB,OAAO,CAC1B,MACEC,aAAa,CAACqB,yBAAyB,CACrCZ,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE;EACb;EACAU,iBAAiB,CAACG,MAAM,CACtBC,IAAA;IAAA,IAAC;MAAEC,KAAK;MAAEC;IAAgB,CAAC,GAAAF,IAAA;IAAA,OACzBC,KAAK,IAAI,IAAI,KACZC,eAAe,IAAI,IAAI,IACrBZ,OAAO,IAAI,IAAI,IAAI,CAACY,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAE,CAAC;EAAA,CAC9D,CACF,CAAC,EACH,CAACJ,OAAO,EAAEI,OAAO,EAAEM,iBAAiB,CACtC,CAAC;EAED,OAAOC,YAAY;AACrB;AAEA,eAAeZ,yBAAyB","ignoreList":[]}
1
+ {"version":3,"file":"useDashboardColumnFilters.js","names":["useCallback","useEffect","useMemo","IrisGridUtils","useLayoutManager","useDashboardId","useAppSelector","useDhId","getInputFiltersForDashboard","emitFilterColumnsChanged","emitFilterTableChanged","useDashboardColumnFilters","columns","table","_useLayoutManager","eventHub","dashboardId","panelId","columnsChanged","tableChanged","cleanupOnUnmount","getInputFilters","s","reduxInputFilters","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","includes"],"sources":["../src/useDashboardColumnFilters.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { IrisGridUtils, type InputFilter } from '@deephaven/iris-grid';\nimport {\n useLayoutManager,\n useDashboardId,\n useAppSelector,\n useDhId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport { getInputFiltersForDashboard } from './redux';\nimport {\n type FilterColumnSourceId,\n emitFilterColumnsChanged,\n emitFilterTableChanged,\n} from './FilterEvents';\n\n/**\n * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and\n * adds the columns provided to the filter options in the dashboard.\n * @param columns The columns this source has available for filtering.\n * These are used to populate filter options in the UI (InputFilter, DropdownFilter).\n * null can be used to indicate the source is not yet ready which is useful\n * to preserve\n * @param table The table for this source if applicable.\n * This is used to enable ChartBuilder from IrisGrid.\n * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.\n */\nexport function useDashboardColumnFilters(\n columns: readonly { name: string; type: string }[] | null,\n table?: dh.Table\n): InputFilter[] {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const panelId = useDhId() as FilterColumnSourceId | null;\n\n useEffect(\n function columnsChanged() {\n if (panelId == null || columns == null) {\n return;\n }\n emitFilterColumnsChanged(eventHub, panelId, columns);\n },\n [eventHub, panelId, columns]\n );\n\n useEffect(\n function tableChanged() {\n if (table == null || panelId == null) {\n return;\n }\n emitFilterTableChanged(eventHub, panelId, table);\n },\n [eventHub, panelId, table]\n );\n\n // Cleanup separately because filtering the table or other operations can get a new columns array,\n // and we are using null to indicate unmount, not change\n useEffect(\n function cleanupOnUnmount() {\n if (panelId == null) {\n return;\n }\n return () => {\n emitFilterColumnsChanged(eventHub, panelId, null);\n emitFilterTableChanged(eventHub, panelId, null);\n };\n },\n [eventHub, panelId]\n );\n\n const getInputFilters = useCallback(\n (s: RootState) => getInputFiltersForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const reduxInputFilters = useAppSelector(getInputFilters);\n\n const inputFilters = useMemo(\n () =>\n IrisGridUtils.getInputFiltersForColumns(\n columns ?? [],\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n reduxInputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n (panelId != null && !excludePanelIds.includes(panelId)))\n )\n ),\n [columns, panelId, reduxInputFilters]\n );\n\n return inputFilters;\n}\n\nexport default useDashboardColumnFilters;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEvD,SAASC,aAAa,QAA0B,sBAAsB;AACtE,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,sBAAsB;AAAC,SAErBC,2BAA2B;AAAA,SAGlCC,wBAAwB,EACxBC,sBAAsB;AAGxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,OAAyD,EACzDC,KAAgB,EACD;EACf,IAAAC,iBAAA,GAAqBV,gBAAgB,CAAC,CAAC;IAA/BW,QAAQ,GAAAD,iBAAA,CAARC,QAAQ;EAChB,IAAMC,WAAW,GAAGX,cAAc,CAAC,CAAC;EACpC,IAAMY,OAAO,GAAGV,OAAO,CAAC,CAAgC;EAExDN,SAAS,CACP,SAASiB,cAAcA,CAAA,EAAG;IACxB,IAAID,OAAO,IAAI,IAAI,IAAIL,OAAO,IAAI,IAAI,EAAE;MACtC;IACF;IACAH,wBAAwB,CAACM,QAAQ,EAAEE,OAAO,EAAEL,OAAO,CAAC;EACtD,CAAC,EACD,CAACG,QAAQ,EAAEE,OAAO,EAAEL,OAAO,CAC7B,CAAC;EAEDX,SAAS,CACP,SAASkB,YAAYA,CAAA,EAAG;IACtB,IAAIN,KAAK,IAAI,IAAI,IAAII,OAAO,IAAI,IAAI,EAAE;MACpC;IACF;IACAP,sBAAsB,CAACK,QAAQ,EAAEE,OAAO,EAAEJ,KAAK,CAAC;EAClD,CAAC,EACD,CAACE,QAAQ,EAAEE,OAAO,EAAEJ,KAAK,CAC3B,CAAC;;EAED;EACA;EACAZ,SAAS,CACP,SAASmB,gBAAgBA,CAAA,EAAG;IAC1B,IAAIH,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACA,OAAO,MAAM;MACXR,wBAAwB,CAACM,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;MACjDP,sBAAsB,CAACK,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;IACjD,CAAC;EACH,CAAC,EACD,CAACF,QAAQ,EAAEE,OAAO,CACpB,CAAC;EAED,IAAMI,eAAe,GAAGrB,WAAW,CAChCsB,CAAY,IAAKd,2BAA2B,CAACc,CAAC,EAAEN,WAAW,CAAC,EAC7D,CAACA,WAAW,CACd,CAAC;EAED,IAAMO,iBAAiB,GAAGjB,cAAc,CAACe,eAAe,CAAC;EAEzD,IAAMG,YAAY,GAAGtB,OAAO,CAC1B,MACEC,aAAa,CAACsB,yBAAyB,CACrCb,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE;EACb;EACAW,iBAAiB,CAACG,MAAM,CACtBC,IAAA;IAAA,IAAGC,KAAK,GAAAD,IAAA,CAALC,KAAK;MAAEC,eAAe,GAAAF,IAAA,CAAfE,eAAe;IAAA,OACvBD,KAAK,IAAI,IAAI,KACZC,eAAe,IAAI,IAAI,IACrBZ,OAAO,IAAI,IAAI,IAAI,CAACY,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAE,CAAC;EAAA,CAC9D,CACF,CAAC,EACH,CAACL,OAAO,EAAEK,OAAO,EAAEM,iBAAiB,CACtC,CAAC;EAED,OAAOC,YAAY;AACrB;AAEA,eAAeb,yBAAyB","ignoreList":[]}
@@ -5,9 +5,8 @@ import { assertNotNull } from '@deephaven/utils';
5
5
  import { emitLinkPointSelected, emitLinkSourceDataSelected, emitRegisterLinkTarget } from "./linker/LinkerEvent.js";
6
6
  import { getColumnSelectionValidatorForDashboard, getLinksForDashboard } from "./redux/index.js";
7
7
  export function useGridLinker(model, irisGrid) {
8
- var {
9
- eventHub
10
- } = useLayoutManager();
8
+ var _useLayoutManager = useLayoutManager(),
9
+ eventHub = _useLayoutManager.eventHub;
11
10
  var dashboardId = useDashboardId();
12
11
  var dhId = useDhId();
13
12
  var panelId = usePanelId();
@@ -44,24 +43,18 @@ export function useGridLinker(model, irisGrid) {
44
43
  if (!model || !irisGrid) {
45
44
  return null;
46
45
  }
47
- var {
48
- gridWrapper
49
- } = irisGrid;
46
+ var gridWrapper = irisGrid.gridWrapper;
50
47
  var rect = (_gridWrapper$getBound = gridWrapper === null || gridWrapper === void 0 ? void 0 : gridWrapper.getBoundingClientRect()) !== null && _gridWrapper$getBound !== void 0 ? _gridWrapper$getBound : null;
51
48
  if (rect == null || rect.width <= 0 || rect.height <= 0) {
52
49
  return null;
53
50
  }
54
- var {
55
- metrics
56
- } = irisGrid.state;
51
+ var metrics = irisGrid.state.metrics;
57
52
  assertNotNull(metrics);
58
- var {
59
- columnHeaderHeight,
60
- allColumnXs,
61
- allColumnWidths,
62
- right,
63
- columnHeaderMaxDepth
64
- } = metrics;
53
+ var columnHeaderHeight = metrics.columnHeaderHeight,
54
+ allColumnXs = metrics.allColumnXs,
55
+ allColumnWidths = metrics.allColumnWidths,
56
+ right = metrics.right,
57
+ columnHeaderMaxDepth = metrics.columnHeaderMaxDepth;
65
58
  var columnIndex = model.getColumnIndexByName(columnName);
66
59
  assertNotNull(columnIndex);
67
60
  var visibleIndex = irisGrid.getVisibleColumn(columnIndex);
@@ -1 +1 @@
1
- {"version":3,"file":"useGridLinker.js","names":["useCallback","useEffect","useMemo","clamp","useAppSelector","useDashboardId","useDhId","useLayoutManager","usePanelId","assertNotNull","emitLinkPointSelected","emitLinkSourceDataSelected","emitRegisterLinkTarget","getColumnSelectionValidatorForDashboard","getLinksForDashboard","useGridLinker","model","irisGrid","eventHub","dashboardId","dhId","panelId","getLinks","s","links","linkColumns","columnSet","Set","forEach","link","start","add","columnName","getColumnSelectionValidator","columnSelectionValidator","isColumnSelectionValid","column","type","isSelectingColumn","onDataSelected","row","dataMap","getCoordinates","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","rect","getBoundingClientRect","width","height","metrics","state","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","getColumnIndexByName","visibleIndex","getVisibleColumn","columnX","get","columnWidth","x","left","y","top","onColumnSelected","registerTarget","setFilterValues","setFilterMap","unsetFilterValue","alwaysFetchColumns"],"sources":["../src/useGridLinker.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport clamp from 'lodash.clamp';\nimport {\n useAppSelector,\n useDashboardId,\n useDhId,\n useLayoutManager,\n usePanelId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport {\n type IrisGridProps,\n type IrisGridModel,\n type IrisGridType,\n} from '@deephaven/iris-grid';\nimport { type ModelIndex } from '@deephaven/grid';\nimport { type RowDataMap } from '@deephaven/jsapi-utils';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport {\n emitLinkPointSelected,\n emitLinkSourceDataSelected,\n emitRegisterLinkTarget,\n} from './linker/LinkerEvent';\nimport {\n getColumnSelectionValidatorForDashboard,\n getLinksForDashboard,\n} from './redux';\n\nexport function useGridLinker(\n model: IrisGridModel | null,\n irisGrid: IrisGridType | null\n): Pick<\n IrisGridProps,\n | 'alwaysFetchColumns'\n | 'columnSelectionValidator'\n | 'isSelectingColumn'\n | 'onColumnSelected'\n | 'onDataSelected'\n> {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const dhId = useDhId();\n const panelId = usePanelId();\n\n const getLinks = useCallback(\n (s: RootState) => getLinksForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const links = useAppSelector(getLinks);\n const linkColumns = useMemo(() => {\n const columnSet = new Set<string>();\n links.forEach(link => {\n if (link.start.panelId === dhId) {\n columnSet.add(link.start.columnName);\n }\n });\n return [...columnSet];\n }, [links, dhId]);\n\n const getColumnSelectionValidator = useCallback(\n (s: RootState) => getColumnSelectionValidatorForDashboard(s, dashboardId),\n [dashboardId]\n );\n const columnSelectionValidator = useAppSelector(getColumnSelectionValidator);\n\n const isColumnSelectionValid = useCallback(\n (column: dh.Column | null) => {\n if (columnSelectionValidator && column && dhId != null) {\n return columnSelectionValidator(dhId, column, { type: 'tableLink' });\n }\n return false;\n },\n [columnSelectionValidator, dhId]\n );\n const isSelectingColumn = columnSelectionValidator != null;\n\n const onDataSelected = useCallback(\n (row: ModelIndex, dataMap: RowDataMap) => {\n if (dhId == null) {\n return;\n }\n emitLinkSourceDataSelected(eventHub, dhId, dataMap);\n },\n [eventHub, dhId]\n );\n\n const getCoordinates = useCallback(\n (columnName: string): [number, number] | null => {\n if (!model || !irisGrid) {\n return null;\n }\n\n const { gridWrapper } = irisGrid;\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const { metrics } = irisGrid.state;\n assertNotNull(metrics);\n const {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth,\n } = metrics;\n const columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n const visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n const columnX = allColumnXs.get(visibleIndex) ?? 0;\n const columnWidth = allColumnWidths.get(visibleIndex) ?? 0;\n\n const x = clamp(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.left,\n rect.right\n );\n const y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n\n return [x, y];\n },\n [model, irisGrid]\n );\n\n const onColumnSelected = useCallback(\n (column: dh.Column) => {\n if (dhId == null) {\n return;\n }\n emitLinkPointSelected(eventHub, dhId, column, {\n type: 'tableLink',\n });\n },\n [eventHub, dhId]\n );\n\n useEffect(\n function registerTarget() {\n if (!irisGrid || panelId == null || dhId == null) {\n return;\n }\n emitRegisterLinkTarget(eventHub, dhId, {\n getCoordinates,\n setFilterValues: irisGrid.setFilterMap,\n unsetFilterValue: () => {\n // No-op\n },\n panelId,\n });\n return () => {\n emitRegisterLinkTarget(eventHub, dhId, null);\n };\n },\n [eventHub, dhId, getCoordinates, irisGrid, panelId]\n );\n\n return {\n alwaysFetchColumns: linkColumns,\n columnSelectionValidator: isColumnSelectionValid,\n isSelectingColumn,\n onColumnSelected,\n onDataSelected,\n };\n}\n\nexport default useGridLinker;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useGridLinker.js","names":["useCallback","useEffect","useMemo","clamp","useAppSelector","useDashboardId","useDhId","useLayoutManager","usePanelId","assertNotNull","emitLinkPointSelected","emitLinkSourceDataSelected","emitRegisterLinkTarget","getColumnSelectionValidatorForDashboard","getLinksForDashboard","useGridLinker","model","irisGrid","_useLayoutManager","eventHub","dashboardId","dhId","panelId","getLinks","s","links","linkColumns","columnSet","Set","forEach","link","start","add","columnName","getColumnSelectionValidator","columnSelectionValidator","isColumnSelectionValid","column","type","isSelectingColumn","onDataSelected","row","dataMap","getCoordinates","_gridWrapper$getBound","_allColumnXs$get","_allColumnWidths$get","gridWrapper","rect","getBoundingClientRect","width","height","metrics","state","columnHeaderHeight","allColumnXs","allColumnWidths","right","columnHeaderMaxDepth","columnIndex","getColumnIndexByName","visibleIndex","getVisibleColumn","columnX","get","columnWidth","x","left","y","top","onColumnSelected","registerTarget","setFilterValues","setFilterMap","unsetFilterValue","alwaysFetchColumns"],"sources":["../src/useGridLinker.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport clamp from 'lodash.clamp';\nimport {\n useAppSelector,\n useDashboardId,\n useDhId,\n useLayoutManager,\n usePanelId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport {\n type IrisGridProps,\n type IrisGridModel,\n type IrisGridType,\n} from '@deephaven/iris-grid';\nimport { type ModelIndex } from '@deephaven/grid';\nimport { type RowDataMap } from '@deephaven/jsapi-utils';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { assertNotNull } from '@deephaven/utils';\nimport {\n emitLinkPointSelected,\n emitLinkSourceDataSelected,\n emitRegisterLinkTarget,\n} from './linker/LinkerEvent';\nimport {\n getColumnSelectionValidatorForDashboard,\n getLinksForDashboard,\n} from './redux';\n\nexport function useGridLinker(\n model: IrisGridModel | null,\n irisGrid: IrisGridType | null\n): Pick<\n IrisGridProps,\n | 'alwaysFetchColumns'\n | 'columnSelectionValidator'\n | 'isSelectingColumn'\n | 'onColumnSelected'\n | 'onDataSelected'\n> {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const dhId = useDhId();\n const panelId = usePanelId();\n\n const getLinks = useCallback(\n (s: RootState) => getLinksForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const links = useAppSelector(getLinks);\n const linkColumns = useMemo(() => {\n const columnSet = new Set<string>();\n links.forEach(link => {\n if (link.start.panelId === dhId) {\n columnSet.add(link.start.columnName);\n }\n });\n return [...columnSet];\n }, [links, dhId]);\n\n const getColumnSelectionValidator = useCallback(\n (s: RootState) => getColumnSelectionValidatorForDashboard(s, dashboardId),\n [dashboardId]\n );\n const columnSelectionValidator = useAppSelector(getColumnSelectionValidator);\n\n const isColumnSelectionValid = useCallback(\n (column: dh.Column | null) => {\n if (columnSelectionValidator && column && dhId != null) {\n return columnSelectionValidator(dhId, column, { type: 'tableLink' });\n }\n return false;\n },\n [columnSelectionValidator, dhId]\n );\n const isSelectingColumn = columnSelectionValidator != null;\n\n const onDataSelected = useCallback(\n (row: ModelIndex, dataMap: RowDataMap) => {\n if (dhId == null) {\n return;\n }\n emitLinkSourceDataSelected(eventHub, dhId, dataMap);\n },\n [eventHub, dhId]\n );\n\n const getCoordinates = useCallback(\n (columnName: string): [number, number] | null => {\n if (!model || !irisGrid) {\n return null;\n }\n\n const { gridWrapper } = irisGrid;\n const rect = gridWrapper?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const { metrics } = irisGrid.state;\n assertNotNull(metrics);\n const {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n right,\n columnHeaderMaxDepth,\n } = metrics;\n const columnIndex = model.getColumnIndexByName(columnName);\n assertNotNull(columnIndex);\n const visibleIndex = irisGrid.getVisibleColumn(columnIndex);\n const columnX = allColumnXs.get(visibleIndex) ?? 0;\n const columnWidth = allColumnWidths.get(visibleIndex) ?? 0;\n\n const x = clamp(\n visibleIndex > right\n ? rect.right\n : rect.left + columnX + columnWidth * 0.5,\n rect.left,\n rect.right\n );\n const y = rect.top + columnHeaderHeight * columnHeaderMaxDepth;\n\n return [x, y];\n },\n [model, irisGrid]\n );\n\n const onColumnSelected = useCallback(\n (column: dh.Column) => {\n if (dhId == null) {\n return;\n }\n emitLinkPointSelected(eventHub, dhId, column, {\n type: 'tableLink',\n });\n },\n [eventHub, dhId]\n );\n\n useEffect(\n function registerTarget() {\n if (!irisGrid || panelId == null || dhId == null) {\n return;\n }\n emitRegisterLinkTarget(eventHub, dhId, {\n getCoordinates,\n setFilterValues: irisGrid.setFilterMap,\n unsetFilterValue: () => {\n // No-op\n },\n panelId,\n });\n return () => {\n emitRegisterLinkTarget(eventHub, dhId, null);\n };\n },\n [eventHub, dhId, getCoordinates, irisGrid, panelId]\n );\n\n return {\n alwaysFetchColumns: linkColumns,\n columnSelectionValidator: isColumnSelectionValid,\n isSelectingColumn,\n onColumnSelected,\n onDataSelected,\n };\n}\n\nexport default useGridLinker;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { type dh } from '@deephaven/jsapi-types';
2
- import { IrisGridModel } from '@deephaven/iris-grid';
2
+ import { IrisGridModel, type IrisGridModelTransform } from '@deephaven/iris-grid';
3
3
  export type IrisGridModelFetch = () => Promise<dh.Table>;
4
4
  export type IrisGridModelFetchErrorResult = {
5
5
  error: NonNullable<unknown>;
@@ -16,5 +16,5 @@ export type IrisGridModelFetchResult = (IrisGridModelFetchErrorResult | IrisGrid
16
16
  reload: () => void;
17
17
  };
18
18
  /** Pass in a table `fetch` function, will load the model and handle any errors */
19
- export declare function useIrisGridModel(fetch: IrisGridModelFetch): IrisGridModelFetchResult;
19
+ export declare function useIrisGridModel(fetch: IrisGridModelFetch, transformModel?: IrisGridModelTransform): IrisGridModelFetchResult;
20
20
  //# sourceMappingURL=useIrisGridModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAG3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA0F1B"}
1
+ {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EACL,aAAa,EAEb,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,cAAc,CAAC,EAAE,sBAAsB,GACtC,wBAAwB,CAuG1B"}
@@ -1,18 +1,46 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import { useApi } from '@deephaven/jsapi-bootstrap';
4
10
  import { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';
5
11
  import { useCallback, useEffect, useMemo, useState } from 'react';
6
12
  /** Pass in a table `fetch` function, will load the model and handle any errors */
7
- export function useIrisGridModel(fetch) {
13
+ export function useIrisGridModel(fetch, transformModel) {
8
14
  var dh = useApi();
9
- var [model, setModel] = useState();
10
- var [error, setError] = useState();
11
- var [isLoading, setIsLoading] = useState(true);
15
+ var _useState = useState(),
16
+ _useState2 = _slicedToArray(_useState, 2),
17
+ model = _useState2[0],
18
+ setModel = _useState2[1];
19
+ var _useState3 = useState(),
20
+ _useState4 = _slicedToArray(_useState3, 2),
21
+ error = _useState4[0],
22
+ setError = _useState4[1];
23
+ var _useState5 = useState(true),
24
+ _useState6 = _slicedToArray(_useState5, 2),
25
+ isLoading = _useState6[0],
26
+ setIsLoading = _useState6[1];
12
27
  var makeModel = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
13
28
  var table = yield fetch();
14
- return IrisGridModelFactory.makeModel(dh, table);
15
- }), [dh, fetch]);
29
+ var newModel = yield IrisGridModelFactory.makeModel(dh, table);
30
+ if (transformModel == null) {
31
+ return newModel;
32
+ }
33
+ try {
34
+ var transformedModel = yield transformModel(newModel);
35
+ return transformedModel;
36
+ } catch (e) {
37
+ // The host owns the base model's lifecycle; if the transform rejects it
38
+ // never returns a model for us to close, so close the base model here to
39
+ // avoid leaking it.
40
+ newModel.close();
41
+ throw e;
42
+ }
43
+ }), [dh, fetch, transformModel]);
16
44
  var reload = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
17
45
  setIsLoading(true);
18
46
  setError(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useMemo","useState","useIrisGridModel","fetch","dh","model","setModel","error","setError","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","reload","undefined","newModel","e","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","result","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }, [dh, fetch]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n const result: IrisGridModelFetchResult = useMemo(() => {\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n\n return result;\n}\n"],"mappings":";;AACA,SAASA,MAAM,QAAQ,4BAA4B;AACnD,SAASC,aAAa,EAAEC,oBAAoB,QAAQ,sBAAsB;AAC1E,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AA0BjE;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,KAAyB,EACC;EAC1B,IAAMC,EAAE,GAAGT,MAAM,CAAC,CAAC;EACnB,IAAM,CAACU,KAAK,EAAEC,QAAQ,CAAC,GAAGL,QAAQ,CAAgB,CAAC;EACnD,IAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAU,CAAC;EAC7C,IAAM,CAACQ,SAAS,EAAEC,YAAY,CAAC,GAAGT,QAAQ,CAAC,IAAI,CAAC;EAEhD,IAAMU,SAAS,GAAGb,WAAW,cAAAc,iBAAA,CAAC,aAAY;IACxC,IAAMC,KAAK,SAASV,KAAK,CAAC,CAAC;IAC3B,OAAON,oBAAoB,CAACc,SAAS,CAACP,EAAE,EAAES,KAAK,CAAC;EAClD,CAAC,GAAE,CAACT,EAAE,EAAED,KAAK,CAAC,CAAC;EAEf,IAAMW,MAAM,GAAGhB,WAAW,cAAAc,iBAAA,CAAC,aAAY;IACrCF,YAAY,CAAC,IAAI,CAAC;IAClBF,QAAQ,CAACO,SAAS,CAAC;IACnB,IAAI;MACF,IAAMC,QAAQ,SAASL,SAAS,CAAC,CAAC;MAClCL,QAAQ,CAACU,QAAQ,CAAC;MAClBN,YAAY,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC,OAAOO,CAAC,EAAE;MACVT,QAAQ,CAACS,CAAC,CAAC;MACXP,YAAY,CAAC,KAAK,CAAC;IACrB;EACF,CAAC,GAAE,CAACC,SAAS,CAAC,CAAC;EAEfZ,SAAS,CAAC,MAAM;IACd,IAAImB,SAAS,GAAG,KAAK;IAAC,SACPC,IAAIA,CAAA;MAAA,OAAAC,KAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,MAAA;MAAAA,KAAA,GAAAR,iBAAA,CAAnB,aAAsB;QACpBF,YAAY,CAAC,IAAI,CAAC;QAClBF,QAAQ,CAACO,SAAS,CAAC;QACnB,IAAI;UACF,IAAMC,QAAQ,SAASL,SAAS,CAAC,CAAC;UAClC,IAAI,CAACO,SAAS,EAAE;YACdZ,QAAQ,CAACU,QAAQ,CAAC;YAClBN,YAAY,CAAC,KAAK,CAAC;UACrB;QACF,CAAC,CAAC,OAAOO,CAAC,EAAE;UACV,IAAI,CAACC,SAAS,EAAE;YACdV,QAAQ,CAACS,CAAC,CAAC;YACXP,YAAY,CAAC,KAAK,CAAC;UACrB;QACF;MACF,CAAC;MAAA,OAAAU,KAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAEDH,IAAI,CAAC,CAAC;IAEN,OAAO,MAAM;MACXD,SAAS,GAAG,IAAI;IAClB,CAAC;EACH,CAAC,EAAE,CAACP,SAAS,CAAC,CAAC;EAEfZ,SAAS,CACP,SAASwB,mBAAmBA,CAAA,EAAG;IAC7B,IAAI,CAAClB,KAAK,EAAE;MACV;IACF;;IAEA;IACA;IACA,SAASmB,gBAAgBA,CAAA,EAAG;MAC1BhB,QAAQ,CAAC,IAAIiB,KAAK,CAAC,oBAAoB,CAAC,CAAC;MACzCnB,QAAQ,CAACS,SAAS,CAAC;MACnBL,YAAY,CAAC,KAAK,CAAC;IACrB;IAEAL,KAAK,CAACqB,gBAAgB,CAAC9B,aAAa,CAAC+B,KAAK,CAACC,UAAU,EAAEJ,gBAAgB,CAAC;IAExE,OAAO,MAAM;MACXnB,KAAK,CAACwB,mBAAmB,CACvBjC,aAAa,CAAC+B,KAAK,CAACC,UAAU,EAC9BJ,gBACF,CAAC;IACH,CAAC;EACH,CAAC,EACD,CAACnB,KAAK,CACR,CAAC;EAED,IAAMyB,MAAgC,GAAG9B,OAAO,CAAC,MAAM;IACrD,IAAIS,SAAS,EAAE;MACb,OAAO;QAAEK,MAAM;QAAEiB,MAAM,EAAE;MAAU,CAAC;IACtC;IACA,IAAIxB,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO;QAAEA,KAAK;QAAEO,MAAM;QAAEiB,MAAM,EAAE;MAAQ,CAAC;IAC3C;IACA,IAAI1B,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO;QAAEA,KAAK;QAAES,MAAM;QAAEiB,MAAM,EAAE;MAAU,CAAC;IAC7C;IACA,MAAM,IAAIN,KAAK,CAAC,eAAe,CAAC;EAClC,CAAC,EAAE,CAAClB,KAAK,EAAEE,SAAS,EAAEJ,KAAK,EAAES,MAAM,CAAC,CAAC;EAErC,OAAOgB,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useMemo","useState","useIrisGridModel","fetch","transformModel","dh","_useState","_useState2","_slicedToArray","model","setModel","_useState3","_useState4","error","setError","_useState5","_useState6","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","newModel","transformedModel","e","close","reload","undefined","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","result","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport {\n IrisGridModel,\n IrisGridModelFactory,\n type IrisGridModelTransform,\n} from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch,\n transformModel?: IrisGridModelTransform\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n const newModel = await IrisGridModelFactory.makeModel(dh, table);\n if (transformModel == null) {\n return newModel;\n }\n try {\n const transformedModel = await transformModel(newModel);\n return transformedModel;\n } catch (e) {\n // The host owns the base model's lifecycle; if the transform rejects it\n // never returns a model for us to close, so close the base model here to\n // avoid leaking it.\n newModel.close();\n throw e;\n }\n }, [dh, fetch, transformModel]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n const result: IrisGridModelFetchResult = useMemo(() => {\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useCallback, useMemo, useRef, useState } from 'react';
2
8
  import { usePersistentState } from '@deephaven/dashboard';
3
9
  import { isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
@@ -13,22 +19,29 @@ import { jsx as _jsx } from "react/jsx-runtime";
13
19
  * The remaining object keys are IrisGrid props associated with the plugin.
14
20
  */
15
21
  export function useTablePlugin(_ref) {
16
- var {
17
- model,
18
- irisGridRef,
19
- irisGridUtils,
20
- selectedRanges
21
- } = _ref;
22
- var [pluginFilters, setPluginFilters] = useState([]);
22
+ var model = _ref.model,
23
+ irisGridRef = _ref.irisGridRef,
24
+ irisGridUtils = _ref.irisGridUtils,
25
+ selectedRanges = _ref.selectedRanges;
26
+ var _useState = useState([]),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ pluginFilters = _useState2[0],
29
+ setPluginFilters = _useState2[1];
23
30
  var customFilters = useMemo(() => model != null && irisGridUtils != null && isIrisGridTableModelTemplate(model) ? irisGridUtils.getFiltersFromInputFilters(model.table.columns, pluginFilters, model.formatter.timeZone) : [], [model, irisGridUtils, pluginFilters]);
24
- var [alwaysFetchColumns, setAlwaysFetchColumns] = useState([]);
31
+ var _useState3 = useState([]),
32
+ _useState4 = _slicedToArray(_useState3, 2),
33
+ alwaysFetchColumns = _useState4[0],
34
+ setAlwaysFetchColumns = _useState4[1];
25
35
  var pluginRef = useRef(null);
26
- var [pluginState, setPluginState] = usePersistentState(undefined, {
27
- version: 1,
28
- // pluginName will be undefined on first call when re-hydrating,
29
- // so use a constant type to avoid re-hydration issues with the persistent state type
30
- type: 'GridWidgetTablePluginState'
31
- });
36
+ var _usePersistentState = usePersistentState(undefined, {
37
+ version: 1,
38
+ // pluginName will be undefined on first call when re-hydrating,
39
+ // so use a constant type to avoid re-hydration issues with the persistent state type
40
+ type: 'GridWidgetTablePluginState'
41
+ }),
42
+ _usePersistentState2 = _slicedToArray(_usePersistentState, 2),
43
+ pluginState = _usePersistentState2[0],
44
+ setPluginState = _usePersistentState2[1];
32
45
  var Plugin = useMemo(() => model != null && isIrisGridTableModelTemplate(model) && model.table.pluginName != null ? /*#__PURE__*/_jsx(TablePluginWrapper, {
33
46
  ref: pluginRef,
34
47
  name: model.table.pluginName,