@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.
- package/dist/ChartBuilderPlugin.js +8 -15
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPanelPlugin.js +13 -6
- package/dist/ChartPanelPlugin.js.map +1 -1
- package/dist/ChartWidgetPlugin.js +11 -4
- package/dist/ChartWidgetPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js +38 -46
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +63 -44
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPanelPlugin.js +3 -5
- package/dist/GridPanelPlugin.js.map +1 -1
- package/dist/GridWidgetPlugin.d.ts +18 -1
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +54 -30
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js +3 -5
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js +18 -17
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPanelPlugin.js +3 -5
- package/dist/PandasPanelPlugin.js.map +1 -1
- package/dist/PandasWidgetPlugin.js +3 -7
- package/dist/PandasWidgetPlugin.js.map +1 -1
- package/dist/TablePluginWrapper.js +8 -10
- package/dist/TablePluginWrapper.js.map +1 -1
- package/dist/WidgetLoaderPlugin.js +24 -29
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -58
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +4 -5
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +7 -10
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +8 -12
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/linker/Linker.js +100 -192
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js +23 -31
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +65 -66
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +6 -14
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +7 -9
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js +136 -220
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js +3 -4
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +33 -52
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js +68 -130
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/CorePanel.js +6 -18
- package/dist/panels/CorePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +109 -165
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +30 -55
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js +81 -141
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +68 -87
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +45 -68
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +28 -6
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +224 -280
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +1 -3
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +6 -13
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +28 -50
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +19 -38
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.js +157 -292
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +5 -15
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/PandasReloadButton.js +1 -3
- package/dist/panels/PandasReloadButton.js.map +1 -1
- package/dist/panels/WidgetPanel.js +42 -51
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +6 -10
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/useConfigureRuff.js +8 -9
- package/dist/useConfigureRuff.js.map +1 -1
- package/dist/useDashboardColumnFilters.js +4 -7
- package/dist/useDashboardColumnFilters.js.map +1 -1
- package/dist/useGridLinker.js +9 -16
- package/dist/useGridLinker.js.map +1 -1
- package/dist/useIrisGridModel.d.ts +2 -2
- package/dist/useIrisGridModel.d.ts.map +1 -1
- package/dist/useIrisGridModel.js +34 -6
- package/dist/useIrisGridModel.js.map +1 -1
- package/dist/useTablePlugin.js +27 -14
- package/dist/useTablePlugin.js.map +1 -1
- package/package.json +24 -24
package/dist/FilterPlugin.js
CHANGED
|
@@ -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, useEffect, useState } from 'react';
|
|
2
8
|
import { useDispatch } from 'react-redux';
|
|
3
9
|
import { nanoid } from 'nanoid';
|
|
@@ -10,15 +16,19 @@ import { useFilterChangedListener, useFilterColumnsChangedListener, useFilterTab
|
|
|
10
16
|
var log = Log.module('FilterPlugin');
|
|
11
17
|
export function FilterPlugin(props) {
|
|
12
18
|
assertIsDashboardPluginProps(props);
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
registerComponent
|
|
17
|
-
} = props;
|
|
19
|
+
var localDashboardId = props.id,
|
|
20
|
+
layout = props.layout,
|
|
21
|
+
registerComponent = props.registerComponent;
|
|
18
22
|
var dispatch = useDispatch();
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
var _useState = useState(() => new Map()),
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
25
|
+
panelColumns = _useState2[0];
|
|
26
|
+
var _useState3 = useState(() => new Map()),
|
|
27
|
+
_useState4 = _slicedToArray(_useState3, 1),
|
|
28
|
+
panelFilters = _useState4[0];
|
|
29
|
+
var _useState5 = useState(() => new Map()),
|
|
30
|
+
_useState6 = _slicedToArray(_useState5, 1),
|
|
31
|
+
panelTables = _useState6[0];
|
|
22
32
|
var sendUpdate = useCallback(() => {
|
|
23
33
|
var columns = Array.from(panelColumns.values()).flat().sort((a, b) => {
|
|
24
34
|
var aName = TextUtils.toLower(a.name);
|
|
@@ -101,15 +111,20 @@ export function FilterPlugin(props) {
|
|
|
101
111
|
sendUpdate();
|
|
102
112
|
}, [panelColumns, panelFilters, panelTables, sendUpdate]);
|
|
103
113
|
var handleOpenDropdown = useCallback(_ref => {
|
|
104
|
-
var
|
|
105
|
-
title = 'DropdownFilter',
|
|
106
|
-
metadata =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
var _ref$title = _ref.title,
|
|
115
|
+
title = _ref$title === void 0 ? 'DropdownFilter' : _ref$title,
|
|
116
|
+
_ref$metadata = _ref.metadata,
|
|
117
|
+
metadata = _ref$metadata === void 0 ? {} : _ref$metadata,
|
|
118
|
+
_ref$panelState = _ref.panelState,
|
|
119
|
+
panelState = _ref$panelState === void 0 ? null : _ref$panelState,
|
|
120
|
+
_ref$id = _ref.id,
|
|
121
|
+
id = _ref$id === void 0 ? nanoid() : _ref$id,
|
|
122
|
+
_ref$focusElement = _ref.focusElement,
|
|
123
|
+
focusElement = _ref$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref$focusElement,
|
|
124
|
+
_ref$createNewStack = _ref.createNewStack,
|
|
125
|
+
createNewStack = _ref$createNewStack === void 0 ? false : _ref$createNewStack,
|
|
126
|
+
_ref$dragEvent = _ref.dragEvent,
|
|
127
|
+
dragEvent = _ref$dragEvent === void 0 ? undefined : _ref$dragEvent;
|
|
113
128
|
var config = {
|
|
114
129
|
type: 'react-component',
|
|
115
130
|
component: DropdownFilterPanel.COMPONENT,
|
|
@@ -122,9 +137,7 @@ export function FilterPlugin(props) {
|
|
|
122
137
|
title,
|
|
123
138
|
id
|
|
124
139
|
};
|
|
125
|
-
var
|
|
126
|
-
root
|
|
127
|
-
} = layout;
|
|
140
|
+
var root = layout.root;
|
|
128
141
|
LayoutUtils.openComponent({
|
|
129
142
|
root,
|
|
130
143
|
config,
|
|
@@ -134,15 +147,20 @@ export function FilterPlugin(props) {
|
|
|
134
147
|
});
|
|
135
148
|
}, [layout, localDashboardId]);
|
|
136
149
|
var handleOpenInput = useCallback(_ref2 => {
|
|
137
|
-
var
|
|
138
|
-
title = 'InputFilter',
|
|
139
|
-
metadata =
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
150
|
+
var _ref2$title = _ref2.title,
|
|
151
|
+
title = _ref2$title === void 0 ? 'InputFilter' : _ref2$title,
|
|
152
|
+
_ref2$metadata = _ref2.metadata,
|
|
153
|
+
metadata = _ref2$metadata === void 0 ? {} : _ref2$metadata,
|
|
154
|
+
_ref2$panelState = _ref2.panelState,
|
|
155
|
+
panelState = _ref2$panelState === void 0 ? null : _ref2$panelState,
|
|
156
|
+
_ref2$id = _ref2.id,
|
|
157
|
+
id = _ref2$id === void 0 ? nanoid() : _ref2$id,
|
|
158
|
+
_ref2$focusElement = _ref2.focusElement,
|
|
159
|
+
focusElement = _ref2$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref2$focusElement,
|
|
160
|
+
_ref2$createNewStack = _ref2.createNewStack,
|
|
161
|
+
createNewStack = _ref2$createNewStack === void 0 ? false : _ref2$createNewStack,
|
|
162
|
+
_ref2$dragEvent = _ref2.dragEvent,
|
|
163
|
+
dragEvent = _ref2$dragEvent === void 0 ? undefined : _ref2$dragEvent;
|
|
146
164
|
var config = {
|
|
147
165
|
type: 'react-component',
|
|
148
166
|
component: InputFilterPanel.COMPONENT,
|
|
@@ -155,9 +173,7 @@ export function FilterPlugin(props) {
|
|
|
155
173
|
title,
|
|
156
174
|
id
|
|
157
175
|
};
|
|
158
|
-
var
|
|
159
|
-
root
|
|
160
|
-
} = layout;
|
|
176
|
+
var root = layout.root;
|
|
161
177
|
LayoutUtils.openComponent({
|
|
162
178
|
root,
|
|
163
179
|
config,
|
|
@@ -167,15 +183,20 @@ export function FilterPlugin(props) {
|
|
|
167
183
|
});
|
|
168
184
|
}, [layout, localDashboardId]);
|
|
169
185
|
var handleOpenFilterSetManager = useCallback(_ref3 => {
|
|
170
|
-
var
|
|
171
|
-
title = 'FilterSets',
|
|
172
|
-
metadata =
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
186
|
+
var _ref3$title = _ref3.title,
|
|
187
|
+
title = _ref3$title === void 0 ? 'FilterSets' : _ref3$title,
|
|
188
|
+
_ref3$metadata = _ref3.metadata,
|
|
189
|
+
metadata = _ref3$metadata === void 0 ? {} : _ref3$metadata,
|
|
190
|
+
_ref3$panelState = _ref3.panelState,
|
|
191
|
+
panelState = _ref3$panelState === void 0 ? null : _ref3$panelState,
|
|
192
|
+
_ref3$id = _ref3.id,
|
|
193
|
+
id = _ref3$id === void 0 ? nanoid() : _ref3$id,
|
|
194
|
+
_ref3$focusElement = _ref3.focusElement,
|
|
195
|
+
focusElement = _ref3$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref3$focusElement,
|
|
196
|
+
_ref3$createNewStack = _ref3.createNewStack,
|
|
197
|
+
createNewStack = _ref3$createNewStack === void 0 ? false : _ref3$createNewStack,
|
|
198
|
+
_ref3$dragEvent = _ref3.dragEvent,
|
|
199
|
+
dragEvent = _ref3$dragEvent === void 0 ? undefined : _ref3$dragEvent;
|
|
179
200
|
var config = {
|
|
180
201
|
type: 'react-component',
|
|
181
202
|
component: FilterSetManagerPanel.COMPONENT,
|
|
@@ -188,9 +209,7 @@ export function FilterPlugin(props) {
|
|
|
188
209
|
title,
|
|
189
210
|
id
|
|
190
211
|
};
|
|
191
|
-
var
|
|
192
|
-
root
|
|
193
|
-
} = layout;
|
|
212
|
+
var root = layout.root;
|
|
194
213
|
LayoutUtils.openComponent({
|
|
195
214
|
root,
|
|
196
215
|
config,
|
package/dist/FilterPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","nanoid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","useFilterChangedListener","useFilterColumnsChangedListener","useFilterTableChangedListener","log","module","FilterPlugin","props","id","localDashboardId","layout","registerComponent","dispatch","panelColumns","Map","panelFilters","panelTables","sendUpdate","columns","Array","from","values","flat","sort","a","b","aName","toLower","name","bName","aType","type","bType","reduce","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","sourceId","debug2","delete","set","concat","handleFiltersChanged","handleTableChanged","table","handlePanelUnmount","panel","panelId","getIdFromPanel","handleOpenDropdown","_ref","title","metadata","panelState","focusElement","DEFAULT_FOCUS_SELECTOR","createNewStack","dragEvent","undefined","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","handleOpenFilterSetManager","_ref3","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n LayoutUtils,\n type PanelComponent,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\nimport {\n type FilterColumn,\n type FilterChangeEvent,\n type FilterColumnSourceId,\n useFilterChangedListener,\n useFilterColumnsChangedListener,\n useFilterTableChangedListener,\n} from './FilterEvents';\n\nconst log = Log.module('FilterPlugin');\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function FilterPlugin(props: FilterPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(\n () => new Map<FilterColumnSourceId, FilterColumn[]>()\n );\n const [panelFilters] = useState(\n () => new Map<FilterColumnSourceId, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(\n () => new Map<FilterColumnSourceId, dh.Table>()\n );\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .flat()\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as FilterColumn[]);\n\n const filters = Array.from(panelFilters.values())\n .flat()\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param columns The columns in this panel. Null to clear the columns.\n */\n const handleColumnsChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n columns: readonly FilterColumn[] | null\n ) => {\n log.debug2('handleColumnsChanged', sourceId, columns);\n if (columns == null) {\n panelColumns.delete(sourceId);\n } else {\n panelColumns.set(sourceId, ([] as FilterColumn[]).concat(columns));\n }\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n filters: FilterChangeEvent | FilterChangeEvent[] | null\n ) => {\n log.debug2('handleFiltersChanged', sourceId, filters);\n if (filters == null) {\n panelFilters.delete(sourceId);\n } else {\n panelFilters.set(\n sourceId,\n ([] as FilterChangeEvent[]).concat(filters ?? [])\n );\n }\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (sourceId: FilterColumnSourceId, table: dh.Table | null) => {\n log.debug2('handleTableChanged', sourceId, table);\n if (table == null) {\n panelTables.delete(sourceId);\n } else {\n panelTables.set(sourceId, table);\n }\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n (panel: PanelComponent) => {\n log.debug2('handlePanelUnmount', panel);\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId != null) {\n panelColumns.delete(panelId);\n panelTables.delete(panelId);\n panelFilters.delete(panelId);\n }\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useFilterColumnsChangedListener(layout.eventHub, handleColumnsChanged);\n useFilterChangedListener(layout.eventHub, handleFiltersChanged);\n useFilterTableChangedListener(layout.eventHub, handleTableChanged);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return null;\n}\n\nexport default FilterPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACxD,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SACEC,4BAA4B,EAE5BC,WAAW,EAEXC,UAAU,EACVC,mBAAmB,EACnBC,WAAW,QACN,sBAAsB;AAC7B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,QAAQ,kBAAkB;AAAC,SAEpCC,gBAAgB;AAAA,SAEvBC,mBAAmB,EACnBC,qBAAqB,EACrBC,gBAAgB;AAAA,SAMhBC,wBAAwB,EACxBC,+BAA+B,EAC/BC,6BAA6B;AAG/B,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAM,CAAC,cAAc,CAAC;AAItC,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAsB;EACzEjB,4BAA4B,CAACiB,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE,EAAEC,gBAAgB;IAAEC,MAAM;IAAEC;EAAkB,CAAC,GAAGJ,KAAK;EACjE,IAAMK,QAAQ,GAAGxB,WAAW,CAAC,CAAC;EAC9B,IAAM,CAACyB,YAAY,CAAC,GAAG1B,QAAQ,CAC7B,MAAM,IAAI2B,GAAG,CAAuC,CACtD,CAAC;EACD,IAAM,CAACC,YAAY,CAAC,GAAG5B,QAAQ,CAC7B,MAAM,IAAI2B,GAAG,CAA4C,CAC3D,CAAC;EACD,IAAM,CAACE,WAAW,CAAC,GAAG7B,QAAQ,CAC5B,MAAM,IAAI2B,GAAG,CAAiC,CAChD,CAAC;EAED,IAAMG,UAAU,GAAGhC,WAAW,CAAC,MAAM;IACnC,IAAMiC,OAAO,GAAGC,KAAK,CAACC,IAAI,CAACP,YAAY,CAACQ,MAAM,CAAC,CAAC,CAAC,CAC9CC,IAAI,CAAC,CAAC,CACNC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;MACd,IAAMC,KAAK,GAAG9B,SAAS,CAAC+B,OAAO,CAACH,CAAC,CAACI,IAAI,CAAC;MACvC,IAAMC,KAAK,GAAGjC,SAAS,CAAC+B,OAAO,CAACF,CAAC,CAACG,IAAI,CAAC;MACvC,IAAIF,KAAK,KAAKG,KAAK,EAAE;QACnB,OAAOH,KAAK,GAAGG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;MAC/B;MAEA,IAAMC,KAAK,GAAGlC,SAAS,CAAC+B,OAAO,CAACH,CAAC,CAACO,IAAI,CAAC;MACvC,IAAMC,KAAK,GAAGpC,SAAS,CAAC+B,OAAO,CAACF,CAAC,CAACM,IAAI,CAAC;MACvC,IAAID,KAAK,KAAKE,KAAK,EAAE;QACnB,OAAOF,KAAK,GAAGE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;MAC/B;MAEA,OAAO,CAAC;IACV,CAAC,CAAC,CACDC,MAAM,CAAC,CAACC,KAAK,EAAEC,MAAM,KAAK;MACzB,IACED,KAAK,CAACE,MAAM,KAAK,CAAC,IAClBxC,SAAS,CAAC+B,OAAO,CAACO,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,CAACR,IAAI,CAAC,KAC7ChC,SAAS,CAAC+B,OAAO,CAACQ,MAAM,CAACP,IAAI,CAAC,IAChChC,SAAS,CAAC+B,OAAO,CAACO,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,CAACL,IAAI,CAAC,KAC7CnC,SAAS,CAAC+B,OAAO,CAACQ,MAAM,CAACJ,IAAI,CAAC,EAChC;QACAG,KAAK,CAACG,IAAI,CAACF,MAAM,CAAC;MACpB;MAEA,OAAOD,KAAK;IACd,CAAC,EAAE,EAAoB,CAAC;IAE1B,IAAMI,OAAO,GAAGnB,KAAK,CAACC,IAAI,CAACL,YAAY,CAACM,MAAM,CAAC,CAAC,CAAC,CAC9CC,IAAI,CAAC,CAAC,CACNC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACe,SAAS,GAAGd,CAAC,CAACc,SAAS,CAAC;IAC5C,IAAMC,QAAQ,GAAG,IAAI1B,GAAG,CAACE,WAAW,CAAC;IAErCZ,GAAG,CAACqC,KAAK,CAAC,YAAY,EAAE;MAAEvB,OAAO;MAAEoB,OAAO;MAAEE;IAAS,CAAC,CAAC;IACvD5B,QAAQ,CACNnB,mBAAmB,CAACgB,gBAAgB,EAAE;MAAES,OAAO;MAAEoB,OAAO;MAAEE;IAAS,CAAC,CACtE,CAAC;EACH,CAAC,EAAE,CAAC5B,QAAQ,EAAEH,gBAAgB,EAAEI,YAAY,EAAEE,YAAY,EAAEC,WAAW,CAAC,CAAC;;EAEzE;AACF;AACA;AACA;AACA;EACE,IAAM0B,oBAAoB,GAAGzD,WAAW,CACtC,CACE0D,QAA8B,EAC9BzB,OAAuC,KACpC;IACHd,GAAG,CAACwC,MAAM,CAAC,sBAAsB,EAAED,QAAQ,EAAEzB,OAAO,CAAC;IACrD,IAAIA,OAAO,IAAI,IAAI,EAAE;MACnBL,YAAY,CAACgC,MAAM,CAACF,QAAQ,CAAC;IAC/B,CAAC,MAAM;MACL9B,YAAY,CAACiC,GAAG,CAACH,QAAQ,EAAG,EAAE,CAAoBI,MAAM,CAAC7B,OAAO,CAAC,CAAC;IACpE;IACAD,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACJ,YAAY,EAAEI,UAAU,CAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAM+B,oBAAoB,GAAG/D,WAAW,CACtC,CACE0D,QAA8B,EAC9BL,OAAuD,KACpD;IACHlC,GAAG,CAACwC,MAAM,CAAC,sBAAsB,EAAED,QAAQ,EAAEL,OAAO,CAAC;IACrD,IAAIA,OAAO,IAAI,IAAI,EAAE;MACnBvB,YAAY,CAAC8B,MAAM,CAACF,QAAQ,CAAC;IAC/B,CAAC,MAAM;MACL5B,YAAY,CAAC+B,GAAG,CACdH,QAAQ,EACP,EAAE,CAAyBI,MAAM,CAACT,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,CAClD,CAAC;IACH;IACArB,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACF,YAAY,EAAEE,UAAU,CAC3B,CAAC;EAED,IAAMgC,kBAAkB,GAAGhE,WAAW,CACpC,CAAC0D,QAA8B,EAAEO,KAAsB,KAAK;IAC1D9C,GAAG,CAACwC,MAAM,CAAC,oBAAoB,EAAED,QAAQ,EAAEO,KAAK,CAAC;IACjD,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjBlC,WAAW,CAAC6B,MAAM,CAACF,QAAQ,CAAC;IAC9B,CAAC,MAAM;MACL3B,WAAW,CAAC8B,GAAG,CAACH,QAAQ,EAAEO,KAAK,CAAC;IAClC;IACAjC,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACD,WAAW,EAAEC,UAAU,CAC1B,CAAC;EAED,IAAMkC,kBAAkB,GAAGlE,WAAW,CACnCmE,KAAqB,IAAK;IACzBhD,GAAG,CAACwC,MAAM,CAAC,oBAAoB,EAAEQ,KAAK,CAAC;IACvC,IAAMC,OAAO,GAAG9D,WAAW,CAAC+D,cAAc,CAACF,KAAK,CAAC;IACjD,IAAIC,OAAO,IAAI,IAAI,EAAE;MACnBxC,YAAY,CAACgC,MAAM,CAACQ,OAAO,CAAC;MAC5BrC,WAAW,CAAC6B,MAAM,CAACQ,OAAO,CAAC;MAC3BtC,YAAY,CAAC8B,MAAM,CAACQ,OAAO,CAAC;IAC9B;IACApC,UAAU,CAAC,CAAC;EACd,CAAC,EACD,CAACJ,YAAY,EAAEE,YAAY,EAAEC,WAAW,EAAEC,UAAU,CACtD,CAAC;EAED,IAAMsC,kBAAkB,GAAGtE,WAAW,CACpCuE,IAAA,IAQM;IAAA,IARL;MACCC,KAAK,GAAG,gBAAgB;MACxBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjBnD,EAAE,GAAGnB,MAAM,CAAC,CAAC;MACbuE,YAAY,GAAGrE,WAAW,CAACsE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAGC;IACd,CAAC,GAAAR,IAAA;IACC,IAAMS,MAAM,GAAG;MACblC,IAAI,EAAE,iBAA0B;MAChCmC,SAAS,EAAEpE,mBAAmB,CAACqE,SAAS;MACxC5D,KAAK,EAAE;QAAEC,EAAE;QAAEkD,QAAQ;QAAEC,UAAU;QAAElD;MAAiB,CAAC;MACrDgD,KAAK;MACLjD;IACF,CAAC;IAED,IAAM;MAAE4D;IAAK,CAAC,GAAG1D,MAAM;IACvBnB,WAAW,CAAC8E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNL,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACrD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAED,IAAM6D,eAAe,GAAGrF,WAAW,CACjCsF,KAAA,IAQM;IAAA,IARL;MACCd,KAAK,GAAG,aAAa;MACrBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjBnD,EAAE,GAAGnB,MAAM,CAAC,CAAC;MACbuE,YAAY,GAAGrE,WAAW,CAACsE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAGC;IACd,CAAC,GAAAO,KAAA;IACC,IAAMN,MAAM,GAAG;MACblC,IAAI,EAAE,iBAA0B;MAChCmC,SAAS,EAAElE,gBAAgB,CAACmE,SAAS;MACrC5D,KAAK,EAAE;QAAEC,EAAE;QAAEkD,QAAQ;QAAEC,UAAU;QAAElD;MAAiB,CAAC;MACrDgD,KAAK;MACLjD;IACF,CAAC;IAED,IAAM;MAAE4D;IAAK,CAAC,GAAG1D,MAAM;IACvBnB,WAAW,CAAC8E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNL,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACrD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAED,IAAM+D,0BAA0B,GAAGvF,WAAW,CAC5CwF,KAAA,IAQM;IAAA,IARL;MACChB,KAAK,GAAG,YAAY;MACpBC,QAAQ,GAAG,CAAC,CAAC;MACbC,UAAU,GAAG,IAAI;MACjBnD,EAAE,GAAGnB,MAAM,CAAC,CAAC;MACbuE,YAAY,GAAGrE,WAAW,CAACsE,sBAAsB;MACjDC,cAAc,GAAG,KAAK;MACtBC,SAAS,GAAGC;IACd,CAAC,GAAAS,KAAA;IACC,IAAMR,MAAM,GAAG;MACblC,IAAI,EAAE,iBAA0B;MAChCmC,SAAS,EAAEnE,qBAAqB,CAACoE,SAAS;MAC1C5D,KAAK,EAAE;QAAEC,EAAE;QAAEkD,QAAQ;QAAEC,UAAU;QAAElD;MAAiB,CAAC;MACrDgD,KAAK;MACLjD;IACF,CAAC;IAED,IAAM;MAAE4D;IAAK,CAAC,GAAG1D,MAAM;IACvBnB,WAAW,CAAC8E,aAAa,CAAC;MACxBD,IAAI;MACJH,MAAM;MACNL,YAAY;MACZE,cAAc;MACdC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAACrD,MAAM,EAAED,gBAAgB,CAC3B,CAAC;EAEDvB,SAAS,CACP,SAASwF,kCAAkCA,CAAA,EAAG;IAC5C,IAAMC,QAAQ,GAAG,CACfhE,iBAAiB,CAACb,mBAAmB,CAACqE,SAAS,EAAErE,mBAAmB,CAAC,EACrEa,iBAAiB,CAACX,gBAAgB,CAACmE,SAAS,EAAEnE,gBAAgB,CAAC,EAC/DW,iBAAiB,CACfZ,qBAAqB,CAACoE,SAAS,EAC/BpE,qBACF,CAAC,CACF;IAED,OAAO,MAAM;MACX4E,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAClE,iBAAiB,CACpB,CAAC;EAEDT,+BAA+B,CAACQ,MAAM,CAACoE,QAAQ,EAAEpC,oBAAoB,CAAC;EACtEzC,wBAAwB,CAACS,MAAM,CAACoE,QAAQ,EAAE9B,oBAAoB,CAAC;EAC/D7C,6BAA6B,CAACO,MAAM,CAACoE,QAAQ,EAAE7B,kBAAkB,CAAC;EAClEvD,WAAW,CACTgB,MAAM,CAACoE,QAAQ,EACfjF,gBAAgB,CAACkF,aAAa,EAC9BxB,kBACF,CAAC;EACD7D,WAAW,CAACgB,MAAM,CAACoE,QAAQ,EAAEjF,gBAAgB,CAACmF,UAAU,EAAEV,eAAe,CAAC;EAC1E5E,WAAW,CACTgB,MAAM,CAACoE,QAAQ,EACfjF,gBAAgB,CAACoF,uBAAuB,EACxCT,0BACF,CAAC;EACD9E,WAAW,CAACgB,MAAM,CAACoE,QAAQ,EAAEtF,UAAU,CAAC0F,OAAO,EAAE/B,kBAAkB,CAAC;EAEpE,OAAO,IAAI;AACb;AAEA,eAAe7C,YAAY","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FilterPlugin.js","names":["useCallback","useEffect","useState","useDispatch","nanoid","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","updateDashboardData","useListener","Log","TextUtils","InputFilterEvent","DropdownFilterPanel","FilterSetManagerPanel","InputFilterPanel","useFilterChangedListener","useFilterColumnsChangedListener","useFilterTableChangedListener","log","module","FilterPlugin","props","localDashboardId","id","layout","registerComponent","dispatch","_useState","Map","_useState2","_slicedToArray","panelColumns","_useState3","_useState4","panelFilters","_useState5","_useState6","panelTables","sendUpdate","columns","Array","from","values","flat","sort","a","b","aName","toLower","name","bName","aType","type","bType","reduce","array","column","length","push","filters","timestamp","tableMap","debug","handleColumnsChanged","sourceId","debug2","delete","set","concat","handleFiltersChanged","handleTableChanged","table","handlePanelUnmount","panel","panelId","getIdFromPanel","handleOpenDropdown","_ref","_ref$title","title","_ref$metadata","metadata","_ref$panelState","panelState","_ref$id","_ref$focusElement","focusElement","DEFAULT_FOCUS_SELECTOR","_ref$createNewStack","createNewStack","_ref$dragEvent","dragEvent","undefined","config","component","COMPONENT","root","openComponent","handleOpenInput","_ref2","_ref2$title","_ref2$metadata","_ref2$panelState","_ref2$id","_ref2$focusElement","_ref2$createNewStack","_ref2$dragEvent","handleOpenFilterSetManager","_ref3","_ref3$title","_ref3$metadata","_ref3$panelState","_ref3$id","_ref3$focusElement","_ref3$createNewStack","_ref3$dragEvent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN_DROPDOWN","OPEN_INPUT","OPEN_FILTER_SET_MANAGER","UNMOUNT"],"sources":["../src/FilterPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n LayoutUtils,\n type PanelComponent,\n PanelEvent,\n updateDashboardData,\n useListener,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { TextUtils } from '@deephaven/utils';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { InputFilterEvent } from './events';\nimport {\n DropdownFilterPanel,\n FilterSetManagerPanel,\n InputFilterPanel,\n} from './panels';\nimport {\n type FilterColumn,\n type FilterChangeEvent,\n type FilterColumnSourceId,\n useFilterChangedListener,\n useFilterColumnsChangedListener,\n useFilterTableChangedListener,\n} from './FilterEvents';\n\nconst log = Log.module('FilterPlugin');\n\nexport type FilterPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function FilterPlugin(props: FilterPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id: localDashboardId, layout, registerComponent } = props;\n const dispatch = useDispatch();\n const [panelColumns] = useState(\n () => new Map<FilterColumnSourceId, FilterColumn[]>()\n );\n const [panelFilters] = useState(\n () => new Map<FilterColumnSourceId, FilterChangeEvent[]>()\n );\n const [panelTables] = useState(\n () => new Map<FilterColumnSourceId, dh.Table>()\n );\n\n const sendUpdate = useCallback(() => {\n const columns = Array.from(panelColumns.values())\n .flat()\n .sort((a, b) => {\n const aName = TextUtils.toLower(a.name);\n const bName = TextUtils.toLower(b.name);\n if (aName !== bName) {\n return aName > bName ? 1 : -1;\n }\n\n const aType = TextUtils.toLower(a.type);\n const bType = TextUtils.toLower(b.type);\n if (aType !== bType) {\n return aType > bType ? 1 : -1;\n }\n\n return 0;\n })\n .reduce((array, column) => {\n if (\n array.length === 0 ||\n TextUtils.toLower(array[array.length - 1].name) !==\n TextUtils.toLower(column.name) ||\n TextUtils.toLower(array[array.length - 1].type) !==\n TextUtils.toLower(column.type)\n ) {\n array.push(column);\n }\n\n return array;\n }, [] as FilterColumn[]);\n\n const filters = Array.from(panelFilters.values())\n .flat()\n .sort((a, b) => a.timestamp - b.timestamp);\n const tableMap = new Map(panelTables);\n\n log.debug('sendUpdate', { columns, filters, tableMap });\n dispatch(\n updateDashboardData(localDashboardId, { columns, filters, tableMap })\n );\n }, [dispatch, localDashboardId, panelColumns, panelFilters, panelTables]);\n\n /**\n * Handler for the COLUMNS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param columns The columns in this panel. Null to clear the columns.\n */\n const handleColumnsChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n columns: readonly FilterColumn[] | null\n ) => {\n log.debug2('handleColumnsChanged', sourceId, columns);\n if (columns == null) {\n panelColumns.delete(sourceId);\n } else {\n panelColumns.set(sourceId, ([] as FilterColumn[]).concat(columns));\n }\n sendUpdate();\n },\n [panelColumns, sendUpdate]\n );\n\n /**\n * Handler for the FILTERS_CHANGED event.\n * @param sourceId The id of the component that's emitting the filter change\n * @param filters The input filters set by the panel\n */\n const handleFiltersChanged = useCallback(\n (\n sourceId: FilterColumnSourceId,\n filters: FilterChangeEvent | FilterChangeEvent[] | null\n ) => {\n log.debug2('handleFiltersChanged', sourceId, filters);\n if (filters == null) {\n panelFilters.delete(sourceId);\n } else {\n panelFilters.set(\n sourceId,\n ([] as FilterChangeEvent[]).concat(filters ?? [])\n );\n }\n sendUpdate();\n },\n [panelFilters, sendUpdate]\n );\n\n const handleTableChanged = useCallback(\n (sourceId: FilterColumnSourceId, table: dh.Table | null) => {\n log.debug2('handleTableChanged', sourceId, table);\n if (table == null) {\n panelTables.delete(sourceId);\n } else {\n panelTables.set(sourceId, table);\n }\n sendUpdate();\n },\n [panelTables, sendUpdate]\n );\n\n const handlePanelUnmount = useCallback(\n (panel: PanelComponent) => {\n log.debug2('handlePanelUnmount', panel);\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId != null) {\n panelColumns.delete(panelId);\n panelTables.delete(panelId);\n panelFilters.delete(panelId);\n }\n sendUpdate();\n },\n [panelColumns, panelFilters, panelTables, sendUpdate]\n );\n\n const handleOpenDropdown = useCallback(\n ({\n title = 'DropdownFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: DropdownFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenInput = useCallback(\n ({\n title = 'InputFilter',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: InputFilterPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n const handleOpenFilterSetManager = useCallback(\n ({\n title = 'FilterSets',\n metadata = {},\n panelState = null,\n id = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n }) => {\n const config = {\n type: 'react-component' as const,\n component: FilterSetManagerPanel.COMPONENT,\n props: { id, metadata, panelState, localDashboardId },\n title,\n id,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [layout, localDashboardId]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(DropdownFilterPanel.COMPONENT, DropdownFilterPanel),\n registerComponent(InputFilterPanel.COMPONENT, InputFilterPanel),\n registerComponent(\n FilterSetManagerPanel.COMPONENT,\n FilterSetManagerPanel\n ),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useFilterColumnsChangedListener(layout.eventHub, handleColumnsChanged);\n useFilterChangedListener(layout.eventHub, handleFiltersChanged);\n useFilterTableChangedListener(layout.eventHub, handleTableChanged);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_DROPDOWN,\n handleOpenDropdown\n );\n useListener(layout.eventHub, InputFilterEvent.OPEN_INPUT, handleOpenInput);\n useListener(\n layout.eventHub,\n InputFilterEvent.OPEN_FILTER_SET_MANAGER,\n handleOpenFilterSetManager\n );\n useListener(layout.eventHub, PanelEvent.UNMOUNT, handlePanelUnmount);\n\n return null;\n}\n\nexport default FilterPlugin;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/GridPanelPlugin.js
CHANGED
|
@@ -8,11 +8,9 @@ import useHydrateGrid from "./useHydrateGrid.js";
|
|
|
8
8
|
import ConnectedIrisGridPanel from "./panels/IrisGridPanel.js";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
export var GridPanelPlugin = /*#__PURE__*/forwardRef((props, ref) => {
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
metadata
|
|
15
|
-
} = props;
|
|
11
|
+
var localDashboardId = props.localDashboardId,
|
|
12
|
+
fetch = props.fetch,
|
|
13
|
+
metadata = props.metadata;
|
|
16
14
|
var hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);
|
|
17
15
|
|
|
18
16
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPanelPlugin.js","names":["forwardRef","useHydrateGrid","ConnectedIrisGridPanel","jsx","_jsx","GridPanelPlugin","props","ref","localDashboardId","fetch","metadata","hydratedProps","_objectSpread","displayName"],"sources":["../src/GridPanelPlugin.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { type WidgetPanelProps } from '@deephaven/plugin';\nimport { type dh } from '@deephaven/jsapi-types';\nimport useHydrateGrid from './useHydrateGrid';\nimport ConnectedIrisGridPanel, {\n type IrisGridPanel,\n} from './panels/IrisGridPanel';\n\nexport const GridPanelPlugin = forwardRef(\n (props: WidgetPanelProps<dh.Table>, ref: React.Ref<IrisGridPanel>) => {\n const { localDashboardId, fetch, metadata } = props;\n const hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <ConnectedIrisGridPanel ref={ref} {...props} {...hydratedProps} />;\n }\n);\n\nGridPanelPlugin.displayName = 'GridPanelPlugin';\n\nexport default GridPanelPlugin;\n"],"mappings":";;;;;AAAA,SAASA,UAAU,QAAQ,OAAO;AAAC,OAG5BC,cAAc;AAAA,OACdC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAI7B,OAAO,IAAMC,eAAe,gBAAGL,UAAU,CACvC,CAACM,KAAiC,EAAEC,GAA6B,KAAK;EACpE,
|
|
1
|
+
{"version":3,"file":"GridPanelPlugin.js","names":["forwardRef","useHydrateGrid","ConnectedIrisGridPanel","jsx","_jsx","GridPanelPlugin","props","ref","localDashboardId","fetch","metadata","hydratedProps","_objectSpread","displayName"],"sources":["../src/GridPanelPlugin.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { type WidgetPanelProps } from '@deephaven/plugin';\nimport { type dh } from '@deephaven/jsapi-types';\nimport useHydrateGrid from './useHydrateGrid';\nimport ConnectedIrisGridPanel, {\n type IrisGridPanel,\n} from './panels/IrisGridPanel';\n\nexport const GridPanelPlugin = forwardRef(\n (props: WidgetPanelProps<dh.Table>, ref: React.Ref<IrisGridPanel>) => {\n const { localDashboardId, fetch, metadata } = props;\n const hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <ConnectedIrisGridPanel ref={ref} {...props} {...hydratedProps} />;\n }\n);\n\nGridPanelPlugin.displayName = 'GridPanelPlugin';\n\nexport default GridPanelPlugin;\n"],"mappings":";;;;;AAAA,SAASA,UAAU,QAAQ,OAAO;AAAC,OAG5BC,cAAc;AAAA,OACdC,sBAAsB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAI7B,OAAO,IAAMC,eAAe,gBAAGL,UAAU,CACvC,CAACM,KAAiC,EAAEC,GAA6B,KAAK;EACpE,IAAQC,gBAAgB,GAAsBF,KAAK,CAA3CE,gBAAgB;IAAEC,KAAK,GAAeH,KAAK,CAAzBG,KAAK;IAAEC,QAAQ,GAAKJ,KAAK,CAAlBI,QAAQ;EACzC,IAAMC,aAAa,GAAGV,cAAc,CAACQ,KAAK,EAAED,gBAAgB,EAAEE,QAAQ,CAAC;;EAEvE;EACA,oBAAON,IAAA,CAACF,sBAAsB,EAAAU,aAAA,CAAAA,aAAA;IAACL,GAAG,EAAEA;EAAI,GAAKD,KAAK,GAAMK,aAAa,CAAG,CAAC;AAC3E,CACF,CAAC;AAEDN,eAAe,CAACQ,WAAW,GAAG,iBAAiB;AAE/C,eAAeR,eAAe","ignoreList":[]}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { type WidgetComponentProps } from '@deephaven/plugin';
|
|
2
2
|
import { type dh as DhType } from '@deephaven/jsapi-types';
|
|
3
|
-
|
|
3
|
+
import { type IrisGridViewProps, type IrisGridModel, type IrisGridTableOptionsWidgetProps, type IrisGridModelWidgetProps } from '@deephaven/iris-grid';
|
|
4
|
+
/**
|
|
5
|
+
* Props that can only be supplied by IrisGrid-aware middleware wrapping
|
|
6
|
+
* `GridWidgetPlugin` (regular plugins receive only `WidgetComponentProps`).
|
|
7
|
+
* Grouped together so the middleware-only surface is explicit; the component
|
|
8
|
+
* depends on `Partial` of this so each prop stays optional.
|
|
9
|
+
*/
|
|
10
|
+
export type GridWidgetPluginMiddlewareProps = IrisGridTableOptionsWidgetProps & IrisGridModelWidgetProps & {
|
|
11
|
+
/**
|
|
12
|
+
* View-concern overrides (theme, renderer, mouse handlers, metric
|
|
13
|
+
* calculator) forwarded as a single bag to `<IrisGrid>`. Lets a plugin
|
|
14
|
+
* contribute presentation without this host knowing each concern by name.
|
|
15
|
+
*/
|
|
16
|
+
irisGridProps?: Partial<IrisGridViewProps>;
|
|
17
|
+
/** Called once the model is built, so middleware can observe it. */
|
|
18
|
+
onModelChanged?: (model: IrisGridModel) => void;
|
|
19
|
+
};
|
|
20
|
+
export declare function GridWidgetPlugin({ fetch, transformTableOptions, transformModel, irisGridProps, onModelChanged, }: WidgetComponentProps<DhType.Table> & Partial<GridWidgetPluginMiddlewareProps>): JSX.Element | null;
|
|
4
21
|
export default GridWidgetPlugin;
|
|
5
22
|
//# sourceMappingURL=GridWidgetPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAOL,KAAK,iBAAiB,EAGtB,KAAK,aAAa,EAClB,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAkB9B;;;;;GAKG;AACH,MAAM,MAAM,+BAA+B,GAAG,+BAA+B,GAC3E,wBAAwB,GAAG;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,oEAAoE;IACpE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACjD,CAAC;AAEJ,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,cAAc,GACf,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GACnC,OAAO,CAAC,+BAA+B,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAgK9D;AAED,eAAe,gBAAgB,CAAC"}
|
package/dist/GridWidgetPlugin.js
CHANGED
|
@@ -6,7 +6,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
6
6
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
7
7
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
8
8
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
-
|
|
9
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
10
|
+
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."); }
|
|
11
|
+
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; } }
|
|
12
|
+
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; }
|
|
13
|
+
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; } }
|
|
14
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
15
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
16
|
import { IrisGrid, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
|
|
11
17
|
import { useSelector } from 'react-redux';
|
|
12
18
|
import { getSettings } from '@deephaven/redux';
|
|
@@ -19,24 +25,41 @@ import useDashboardColumnFilters from "./useDashboardColumnFilters.js";
|
|
|
19
25
|
import { InputFilterEvent } from "./events/index.js";
|
|
20
26
|
import useGridLinker from "./useGridLinker.js";
|
|
21
27
|
import { useTablePlugin } from "./useTablePlugin.js";
|
|
28
|
+
/**
|
|
29
|
+
* Props that can only be supplied by IrisGrid-aware middleware wrapping
|
|
30
|
+
* `GridWidgetPlugin` (regular plugins receive only `WidgetComponentProps`).
|
|
31
|
+
* Grouped together so the middleware-only surface is explicit; the component
|
|
32
|
+
* depends on `Partial` of this so each prop stays optional.
|
|
33
|
+
*/
|
|
22
34
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
35
|
export function GridWidgetPlugin(_ref) {
|
|
24
36
|
var _model$columns;
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
var fetch = _ref.fetch,
|
|
38
|
+
transformTableOptions = _ref.transformTableOptions,
|
|
39
|
+
transformModel = _ref.transformModel,
|
|
40
|
+
irisGridProps = _ref.irisGridProps,
|
|
41
|
+
onModelChanged = _ref.onModelChanged;
|
|
28
42
|
var settings = useSelector(getSettings);
|
|
29
|
-
var
|
|
30
|
-
eventHub
|
|
31
|
-
|
|
32
|
-
var fetchResult = useIrisGridModel(fetch);
|
|
43
|
+
var _useLayoutManager = useLayoutManager(),
|
|
44
|
+
eventHub = _useLayoutManager.eventHub;
|
|
45
|
+
var fetchResult = useIrisGridModel(fetch, transformModel);
|
|
33
46
|
var model = fetchResult.status === 'success' ? fetchResult.model : undefined;
|
|
47
|
+
|
|
48
|
+
// Notify observers (e.g. middleware) when the built model changes.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (model != null) {
|
|
51
|
+
onModelChanged === null || onModelChanged === void 0 || onModelChanged(model);
|
|
52
|
+
}
|
|
53
|
+
}, [model, onModelChanged]);
|
|
34
54
|
var dh = useApi();
|
|
35
55
|
var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
56
|
+
var _usePersistentState = usePersistentState(undefined, {
|
|
57
|
+
version: 1,
|
|
58
|
+
type: 'GridWidgetPlugin'
|
|
59
|
+
}),
|
|
60
|
+
_usePersistentState2 = _slicedToArray(_usePersistentState, 2),
|
|
61
|
+
state = _usePersistentState2[0],
|
|
62
|
+
setState = _usePersistentState2[1];
|
|
40
63
|
var initialState = useRef(state);
|
|
41
64
|
var hydratedState = useMemo(() => {
|
|
42
65
|
if (fetchResult.status !== 'success' || initialState.current === undefined) {
|
|
@@ -55,9 +78,7 @@ export function GridWidgetPlugin(_ref) {
|
|
|
55
78
|
var inputFilters = useDashboardColumnFilters((_model$columns = model === null || model === void 0 ? void 0 : model.columns) !== null && _model$columns !== void 0 ? _model$columns : null, model != null && isIrisGridTableModelTemplate(model) ? model.table : undefined);
|
|
56
79
|
var irisGridRef = useRef(null);
|
|
57
80
|
var _useGridLinker = useGridLinker(fetchResult.status === 'success' ? fetchResult.model : null, irisGridRef.current),
|
|
58
|
-
|
|
59
|
-
alwaysFetchColumns: linkerAlwaysFetchColumns
|
|
60
|
-
} = _useGridLinker,
|
|
81
|
+
linkerAlwaysFetchColumns = _useGridLinker.alwaysFetchColumns,
|
|
61
82
|
linkerProps = _objectWithoutProperties(_useGridLinker, _excluded);
|
|
62
83
|
var handleClearAllFilters = useCallback(() => {
|
|
63
84
|
if (irisGridRef.current == null) {
|
|
@@ -66,18 +87,20 @@ export function GridWidgetPlugin(_ref) {
|
|
|
66
87
|
irisGridRef.current.clearAllFilters();
|
|
67
88
|
}, []);
|
|
68
89
|
useListener(eventHub, InputFilterEvent.CLEAR_ALL_FILTERS, handleClearAllFilters);
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
var _useState = useState([]),
|
|
91
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
92
|
+
selection = _useState2[0],
|
|
93
|
+
setSelection = _useState2[1];
|
|
94
|
+
var _useTablePlugin = useTablePlugin({
|
|
95
|
+
model,
|
|
96
|
+
irisGridRef,
|
|
97
|
+
irisGridUtils,
|
|
98
|
+
selectedRanges: selection
|
|
99
|
+
}),
|
|
100
|
+
Plugin = _useTablePlugin.Plugin,
|
|
101
|
+
customFilters = _useTablePlugin.customFilters,
|
|
102
|
+
filterFetchColumns = _useTablePlugin.alwaysFetchColumns,
|
|
103
|
+
onContextMenu = _useTablePlugin.onContextMenu;
|
|
81
104
|
var alwaysFetchColumns = useMemo(() => {
|
|
82
105
|
var columnSet = new Set([...linkerAlwaysFetchColumns, ...filterFetchColumns]);
|
|
83
106
|
return [...columnSet];
|
|
@@ -96,7 +119,7 @@ export function GridWidgetPlugin(_ref) {
|
|
|
96
119
|
});
|
|
97
120
|
}
|
|
98
121
|
assertNotNull(model, 'Model should be defined when fetch is successful');
|
|
99
|
-
return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread({
|
|
122
|
+
return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
100
123
|
ref: irisGridRef,
|
|
101
124
|
model: model,
|
|
102
125
|
settings: settings,
|
|
@@ -104,9 +127,10 @@ export function GridWidgetPlugin(_ref) {
|
|
|
104
127
|
onSelectionChanged: setSelection,
|
|
105
128
|
onContextMenu: onContextMenu,
|
|
106
129
|
inputFilters: inputFilters,
|
|
107
|
-
customFilters: customFilters
|
|
130
|
+
customFilters: customFilters,
|
|
131
|
+
transformTableOptions: transformTableOptions
|
|
108
132
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
109
|
-
}, linkerProps), {}, {
|
|
133
|
+
}, irisGridProps), linkerProps), {}, {
|
|
110
134
|
alwaysFetchColumns: alwaysFetchColumns
|
|
111
135
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
112
136
|
}, hydratedState), {}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","useState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","usePersistentState","assertNotNull","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","useTablePlugin","jsx","_jsx","GridWidgetPlugin","_ref","_model$columns","fetch","settings","eventHub","fetchResult","model","status","undefined","dh","irisGridUtils","state","setState","version","type","initialState","hydratedState","current","_objectSpread","hydrateIrisGridState","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","_useGridLinker","alwaysFetchColumns","linkerAlwaysFetchColumns","linkerProps","_objectWithoutProperties","_excluded","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","selection","setSelection","Plugin","customFilters","filterFetchColumns","onContextMenu","selectedRanges","columnSet","Set","isLoading","errorMessage","error","ref","onStateChange","onSelectionChanged","children"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { type WidgetComponentProps } from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport {\n useLayoutManager,\n useListener,\n usePersistentState,\n} from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridRange, type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\nimport { useTablePlugin } from './useTablePlugin';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch);\n const model =\n fetchResult.status === 'success' ? fetchResult.model : undefined;\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n model?.columns ?? null,\n model != null && isIrisGridTableModelTemplate(model)\n ? model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const { alwaysFetchColumns: linkerAlwaysFetchColumns, ...linkerProps } =\n useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n const [selection, setSelection] = useState<readonly GridRange[]>([]);\n\n const {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu,\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection,\n });\n\n const alwaysFetchColumns = useMemo(() => {\n const columnSet = new Set([\n ...linkerAlwaysFetchColumns,\n ...filterFetchColumns,\n ]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n\n if (fetchResult.status === 'loading') {\n return (\n <LoadingOverlay isLoading data-testid=\"grid-widget-plugin-loading\" />\n );\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n data-testid=\"grid-widget-plugin-loading-error\"\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n assertNotNull(model, 'Model should be defined when fetch is successful');\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n onSelectionChanged={setSelection}\n onContextMenu={onContextMenu}\n inputFilters={inputFilters}\n customFilters={customFilters}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n alwaysFetchColumns={alwaysFetchColumns}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n >\n {Plugin}\n </IrisGrid>\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useEffect","useMemo","useRef","useState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","usePersistentState","assertNotNull","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","useTablePlugin","jsx","_jsx","GridWidgetPlugin","_ref","_model$columns","fetch","transformTableOptions","transformModel","irisGridProps","onModelChanged","settings","_useLayoutManager","eventHub","fetchResult","model","status","undefined","dh","irisGridUtils","_usePersistentState","version","type","_usePersistentState2","_slicedToArray","state","setState","initialState","hydratedState","current","_objectSpread","hydrateIrisGridState","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","_useGridLinker","linkerAlwaysFetchColumns","alwaysFetchColumns","linkerProps","_objectWithoutProperties","_excluded","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","_useState","_useState2","selection","setSelection","_useTablePlugin","selectedRanges","Plugin","customFilters","filterFetchColumns","onContextMenu","columnSet","Set","isLoading","errorMessage","error","ref","onStateChange","onSelectionChanged","children"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { type WidgetComponentProps } from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n type IrisGridViewProps,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n type IrisGridModel,\n type IrisGridTableOptionsWidgetProps,\n type IrisGridModelWidgetProps,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport {\n useLayoutManager,\n useListener,\n usePersistentState,\n} from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridRange, type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\nimport { useTablePlugin } from './useTablePlugin';\n\n/**\n * Props that can only be supplied by IrisGrid-aware middleware wrapping\n * `GridWidgetPlugin` (regular plugins receive only `WidgetComponentProps`).\n * Grouped together so the middleware-only surface is explicit; the component\n * depends on `Partial` of this so each prop stays optional.\n */\nexport type GridWidgetPluginMiddlewareProps = IrisGridTableOptionsWidgetProps &\n IrisGridModelWidgetProps & {\n /**\n * View-concern overrides (theme, renderer, mouse handlers, metric\n * calculator) forwarded as a single bag to `<IrisGrid>`. Lets a plugin\n * contribute presentation without this host knowing each concern by name.\n */\n irisGridProps?: Partial<IrisGridViewProps>;\n /** Called once the model is built, so middleware can observe it. */\n onModelChanged?: (model: IrisGridModel) => void;\n };\n\nexport function GridWidgetPlugin({\n fetch,\n transformTableOptions,\n transformModel,\n irisGridProps,\n onModelChanged,\n}: WidgetComponentProps<DhType.Table> &\n Partial<GridWidgetPluginMiddlewareProps>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch, transformModel);\n const model =\n fetchResult.status === 'success' ? fetchResult.model : undefined;\n\n // Notify observers (e.g. middleware) when the built model changes.\n useEffect(() => {\n if (model != null) {\n onModelChanged?.(model);\n }\n }, [model, onModelChanged]);\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n model?.columns ?? null,\n model != null && isIrisGridTableModelTemplate(model)\n ? model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const { alwaysFetchColumns: linkerAlwaysFetchColumns, ...linkerProps } =\n useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n const [selection, setSelection] = useState<readonly GridRange[]>([]);\n\n const {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu,\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection,\n });\n\n const alwaysFetchColumns = useMemo(() => {\n const columnSet = new Set([\n ...linkerAlwaysFetchColumns,\n ...filterFetchColumns,\n ]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n\n if (fetchResult.status === 'loading') {\n return (\n <LoadingOverlay isLoading data-testid=\"grid-widget-plugin-loading\" />\n );\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n data-testid=\"grid-widget-plugin-loading-error\"\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n assertNotNull(model, 'Model should be defined when fetch is successful');\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n onSelectionChanged={setSelection}\n onContextMenu={onContextMenu}\n inputFilters={inputFilters}\n customFilters={customFilters}\n transformTableOptions={transformTableOptions}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...irisGridProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n alwaysFetchColumns={alwaysFetchColumns}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n >\n {Plugin}\n </IrisGrid>\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGzE,SAGEC,QAAQ,EACRC,kBAAkB,EAIlBC,aAAa,EACbC,4BAA4B,QAIvB,sBAAsB;AAC7B,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,WAAW,QAAwB,kBAAkB;AAC9D,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SACEC,gBAAgB,EAChBC,WAAW,EACXC,kBAAkB,QACb,sBAAsB;AAC7B,SAASC,aAAa,EAAEC,eAAe,QAAQ,kBAAkB;AACjE,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAE3CC,gBAAgB;AAAA,OAClBC,yBAAyB;AAAA,SACvBC,gBAAgB;AAAA,OAClBC,aAAa;AAAA,SACXC,cAAc;AAEvB;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,GAAA,IAAAC,IAAA;AAkBA,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAOgC;EAAA,IAAAC,cAAA;EAAA,IAN9DC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,qBAAqB,GAAAH,IAAA,CAArBG,qBAAqB;IACrBC,cAAc,GAAAJ,IAAA,CAAdI,cAAc;IACdC,aAAa,GAAAL,IAAA,CAAbK,aAAa;IACbC,cAAc,GAAAN,IAAA,CAAdM,cAAc;EAGd,IAAMC,QAAQ,GAAGxB,WAAW,CAACC,WAAsB,CAAC;EACpD,IAAAwB,iBAAA,GAAqBtB,gBAAgB,CAAC,CAAC;IAA/BuB,QAAQ,GAAAD,iBAAA,CAARC,QAAQ;EAEhB,IAAMC,WAAW,GAAGlB,gBAAgB,CAACU,KAAK,EAAEE,cAAc,CAAC;EAC3D,IAAMO,KAAK,GACTD,WAAW,CAACE,MAAM,KAAK,SAAS,GAAGF,WAAW,CAACC,KAAK,GAAGE,SAAS;;EAElE;EACAtC,SAAS,CAAC,MAAM;IACd,IAAIoC,KAAK,IAAI,IAAI,EAAE;MACjBL,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAGK,KAAK,CAAC;IACzB;EACF,CAAC,EAAE,CAACA,KAAK,EAAEL,cAAc,CAAC,CAAC;EAE3B,IAAMQ,EAAE,GAAGvB,MAAM,CAAC,CAAC;EACnB,IAAMwB,aAAa,GAAGvC,OAAO,CAAC,MAAM,IAAIK,aAAa,CAACiC,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,CAAC;EAEhE,IAAAE,mBAAA,GAA0B5B,kBAAkB,CAE1CyB,SAAS,EAAE;MACXI,OAAO,EAAE,CAAC;MACVC,IAAI,EAAE;IACR,CAAC,CAAC;IAAAC,oBAAA,GAAAC,cAAA,CAAAJ,mBAAA;IALKK,KAAK,GAAAF,oBAAA;IAAEG,QAAQ,GAAAH,oBAAA;EAMtB,IAAMI,YAAY,GAAG9C,MAAM,CAAC4C,KAAK,CAAC;EAClC,IAAMG,aAAa,GAAGhD,OAAO,CAAC,MAAM;IAClC,IACEkC,WAAW,CAACE,MAAM,KAAK,SAAS,IAChCW,YAAY,CAACE,OAAO,KAAKZ,SAAS,EAClC;MACA;IACF;IACA,OAAAa,aAAA,CAAAA,aAAA,KACKX,aAAa,CAACY,oBAAoB,CACnCjB,WAAW,CAACC,KAAK,EACjBY,YAAY,CAACE,OACf,CAAC,GACE5C,aAAa,CAAC+C,gBAAgB,CAC/BlB,WAAW,CAACC,KAAK,EACjBY,YAAY,CAACE,OACf,CAAC;EAEL,CAAC,EAAE,CAACf,WAAW,EAAEK,aAAa,CAAC,CAAC;EAEhC,IAAMc,sBAAsB,GAAGrD,OAAO,CACpC,MAAMI,kBAAkB,CAACkD,uCAAuC,CAAC,CAAC,EAClE,EACF,CAAC;EAED,IAAMC,oBAAoB,GAAGzD,WAAW,CACtC,CAAC0D,aAA4B,EAAEC,SAAoB,KAAK;IACtD,IACEvB,WAAW,CAACE,MAAM,KAAK,SAAS,IAChCoB,aAAa,IAAI,IAAI,IACrBC,SAAS,IAAI,IAAI,EACjB;MACA;IACF;IAEA,IAAMC,QAAQ,GAAGL,sBAAsB,CACrCnB,WAAW,CAACC,KAAK,EACjBqB,aAAa,EACbC,SACF,CAAC;IAEDX,QAAQ,CAACY,QAAQ,CAAC;EACpB,CAAC,EACD,CAACxB,WAAW,EAAEY,QAAQ,EAAEO,sBAAsB,CAChD,CAAC;EAED,IAAMM,YAAY,GAAG1C,yBAAyB,EAAAQ,cAAA,GAC5CU,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEyB,OAAO,cAAAnC,cAAA,cAAAA,cAAA,GAAI,IAAI,EACtBU,KAAK,IAAI,IAAI,IAAI7B,4BAA4B,CAAC6B,KAAK,CAAC,GAChDA,KAAK,CAAC0B,KAAK,GACXxB,SACN,CAAC;EAED,IAAMyB,WAAW,GAAG7D,MAAM,CAAsB,IAAI,CAAC;EAErD,IAAA8D,cAAA,GACE5C,aAAa,CACXe,WAAW,CAACE,MAAM,KAAK,SAAS,GAAGF,WAAW,CAACC,KAAK,GAAG,IAAI,EAC3D2B,WAAW,CAACb,OACd,CAAC;IAJyBe,wBAAwB,GAAAD,cAAA,CAA5CE,kBAAkB;IAA+BC,WAAW,GAAAC,wBAAA,CAAAJ,cAAA,EAAAK,SAAA;EAMpE,IAAMC,qBAAqB,GAAGvE,WAAW,CAAC,MAAM;IAC9C,IAAIgE,WAAW,CAACb,OAAO,IAAI,IAAI,EAAE;MAC/B;IACF;IACAa,WAAW,CAACb,OAAO,CAACqB,eAAe,CAAC,CAAC;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN3D,WAAW,CACTsB,QAAQ,EACRf,gBAAgB,CAACqD,iBAAiB,EAClCF,qBACF,CAAC;EAED,IAAAG,SAAA,GAAkCtE,QAAQ,CAAuB,EAAE,CAAC;IAAAuE,UAAA,GAAA7B,cAAA,CAAA4B,SAAA;IAA7DE,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAE9B,IAAAG,eAAA,GAKIxD,cAAc,CAAC;MACjBe,KAAK;MACL2B,WAAW;MACXvB,aAAa;MACbsC,cAAc,EAAEH;IAClB,CAAC,CAAC;IATAI,MAAM,GAAAF,eAAA,CAANE,MAAM;IACNC,aAAa,GAAAH,eAAA,CAAbG,aAAa;IACOC,kBAAkB,GAAAJ,eAAA,CAAtCX,kBAAkB;IAClBgB,aAAa,GAAAL,eAAA,CAAbK,aAAa;EAQf,IAAMhB,kBAAkB,GAAGjE,OAAO,CAAC,MAAM;IACvC,IAAMkF,SAAS,GAAG,IAAIC,GAAG,CAAC,CACxB,GAAGnB,wBAAwB,EAC3B,GAAGgB,kBAAkB,CACtB,CAAC;IACF,OAAO,CAAC,GAAGE,SAAS,CAAC;EACvB,CAAC,EAAE,CAAClB,wBAAwB,EAAEgB,kBAAkB,CAAC,CAAC;EAElD,IAAI9C,WAAW,CAACE,MAAM,KAAK,SAAS,EAAE;IACpC,oBACEd,IAAA,CAACb,cAAc;MAAC2E,SAAS;MAAC,eAAY;IAA4B,CAAE,CAAC;EAEzE;EAEA,IAAIlD,WAAW,CAACE,MAAM,KAAK,OAAO,EAAE;IAClC,oBACEd,IAAA,CAACb,cAAc;MACb,eAAY,kCAAkC;MAC9C4E,YAAY,EAAEvE,eAAe,CAACoB,WAAW,CAACoD,KAAK,CAAE;MACjDF,SAAS,EAAE;IAAM,CAClB,CAAC;EAEN;EAEAvE,aAAa,CAACsB,KAAK,EAAE,kDAAkD,CAAC;EAExE,oBACEb,IAAA,CAACnB,QAAQ,EAAA+C,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAAA,aAAA;IACPqC,GAAG,EAAEzB,WAAY;IACjB3B,KAAK,EAAEA,KAAM;IACbJ,QAAQ,EAAEA,QAAS;IACnByD,aAAa,EAAEjC,oBAAqB;IACpCkC,kBAAkB,EAAEd,YAAa;IACjCM,aAAa,EAAEA,aAAc;IAC7BtB,YAAY,EAAEA,YAAa;IAC3BoB,aAAa,EAAEA,aAAc;IAC7BpD,qBAAqB,EAAEA;IACvB;EAAA,GACIE,aAAa,GAEbqC,WAAW;IACfD,kBAAkB,EAAEA;IACpB;EAAA,GACIjB,aAAa;IAAA0C,QAAA,EAEhBZ;EAAM,EACC,CAAC;AAEf;AAEA,eAAevD,gBAAgB","ignoreList":[]}
|
package/dist/LinkerPlugin.js
CHANGED
|
@@ -4,11 +4,9 @@ import Linker from "./linker/Linker.js";
|
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
5
|
export function LinkerPlugin(props) {
|
|
6
6
|
assertIsDashboardPluginProps(props);
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
panelManager
|
|
11
|
-
} = props;
|
|
7
|
+
var id = props.id,
|
|
8
|
+
layout = props.layout,
|
|
9
|
+
panelManager = props.panelManager;
|
|
12
10
|
return /*#__PURE__*/_jsx(Linker, {
|
|
13
11
|
layout: layout,
|
|
14
12
|
localDashboardId: id,
|
package/dist/LinkerPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","jsx","_jsx","LinkerPlugin","props","id","layout","panelManager","localDashboardId"],"sources":["../src/LinkerPlugin.tsx"],"sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function LinkerPlugin(props: LinkerPluginProps): JSX.Element {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager } = props;\n return (\n <Linker layout={layout} localDashboardId={id} panelManager={panelManager} />\n );\n}\n\nexport default LinkerPlugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,4BAA4B,QAEvB,sBAAsB;AAAC,OACvBC,MAAM;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAIb,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClEL,4BAA4B,CAACK,KAAK,CAAC;EACnC,
|
|
1
|
+
{"version":3,"file":"LinkerPlugin.js","names":["React","assertIsDashboardPluginProps","Linker","jsx","_jsx","LinkerPlugin","props","id","layout","panelManager","localDashboardId"],"sources":["../src/LinkerPlugin.tsx"],"sourcesContent":["import React from 'react';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n} from '@deephaven/dashboard';\nimport Linker from './linker/Linker';\n\nexport type LinkerPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport function LinkerPlugin(props: LinkerPluginProps): JSX.Element {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager } = props;\n return (\n <Linker layout={layout} localDashboardId={id} panelManager={panelManager} />\n );\n}\n\nexport default LinkerPlugin;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,4BAA4B,QAEvB,sBAAsB;AAAC,OACvBC,MAAM;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAIb,OAAO,SAASC,YAAYA,CAACC,KAAwB,EAAe;EAClEL,4BAA4B,CAACK,KAAK,CAAC;EACnC,IAAQC,EAAE,GAA2BD,KAAK,CAAlCC,EAAE;IAAEC,MAAM,GAAmBF,KAAK,CAA9BE,MAAM;IAAEC,YAAY,GAAKH,KAAK,CAAtBG,YAAY;EAChC,oBACEL,IAAA,CAACF,MAAM;IAACM,MAAM,EAAEA,MAAO;IAACE,gBAAgB,EAAEH,EAAG;IAACE,YAAY,EAAEA;EAAa,CAAE,CAAC;AAEhF;AAEA,eAAeJ,YAAY","ignoreList":[]}
|
package/dist/MarkdownPlugin.js
CHANGED
|
@@ -6,21 +6,24 @@ import MarkdownUtils from "./controls/markdown/MarkdownUtils.js";
|
|
|
6
6
|
import MarkdownEvent from "./events/MarkdownEvent.js";
|
|
7
7
|
export function MarkdownPlugin(props) {
|
|
8
8
|
assertIsDashboardPluginProps(props);
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
registerComponent
|
|
14
|
-
} = props;
|
|
9
|
+
var id = props.id,
|
|
10
|
+
layout = props.layout,
|
|
11
|
+
panelManager = props.panelManager,
|
|
12
|
+
registerComponent = props.registerComponent;
|
|
15
13
|
var handleOpen = useCallback(function () {
|
|
16
|
-
var {
|
|
17
|
-
title =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
15
|
+
_ref$title = _ref.title,
|
|
16
|
+
title = _ref$title === void 0 ? '' : _ref$title,
|
|
17
|
+
_ref$metadata = _ref.metadata,
|
|
18
|
+
metadata = _ref$metadata === void 0 ? {} : _ref$metadata,
|
|
19
|
+
_ref$id = _ref.id,
|
|
20
|
+
panelId = _ref$id === void 0 ? nanoid() : _ref$id,
|
|
21
|
+
_ref$focusElement = _ref.focusElement,
|
|
22
|
+
focusElement = _ref$focusElement === void 0 ? LayoutUtils.DEFAULT_FOCUS_SELECTOR : _ref$focusElement,
|
|
23
|
+
_ref$createNewStack = _ref.createNewStack,
|
|
24
|
+
createNewStack = _ref$createNewStack === void 0 ? false : _ref$createNewStack,
|
|
25
|
+
_ref$dragEvent = _ref.dragEvent,
|
|
26
|
+
dragEvent = _ref$dragEvent === void 0 ? undefined : _ref$dragEvent;
|
|
24
27
|
var openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(MarkdownPanel.COMPONENT);
|
|
25
28
|
var usedTitles = openedMarkdowns.map(markdown => {
|
|
26
29
|
var _markdown$title;
|
|
@@ -42,9 +45,7 @@ export function MarkdownPlugin(props) {
|
|
|
42
45
|
title: panelTitle,
|
|
43
46
|
id: panelId
|
|
44
47
|
};
|
|
45
|
-
var
|
|
46
|
-
root
|
|
47
|
-
} = layout;
|
|
48
|
+
var root = layout.root;
|
|
48
49
|
LayoutUtils.openComponent({
|
|
49
50
|
root,
|
|
50
51
|
config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","nanoid","assertIsDashboardPluginProps","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","handleOpen","title","metadata","panelId","focusElement","
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.js","names":["useCallback","useEffect","nanoid","assertIsDashboardPluginProps","LayoutUtils","useListener","MarkdownPanel","MarkdownUtils","MarkdownEvent","MarkdownPlugin","props","id","layout","panelManager","registerComponent","handleOpen","_ref","arguments","length","undefined","_ref$title","title","_ref$metadata","metadata","_ref$id","panelId","_ref$focusElement","focusElement","DEFAULT_FOCUS_SELECTOR","_ref$createNewStack","createNewStack","_ref$dragEvent","dragEvent","openedMarkdowns","getOpenedPanelConfigsOfType","COMPONENT","usedTitles","map","markdown","_markdown$title","panelTitle","getNewMarkdownTitle","content","config","type","component","panelState","localDashboardId","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/MarkdownPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { nanoid } from 'nanoid';\nimport {\n assertIsDashboardPluginProps,\n type DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { MarkdownPanel } from './panels';\nimport MarkdownUtils from './controls/markdown/MarkdownUtils';\nimport MarkdownEvent from './events/MarkdownEvent';\n\nexport type MarkdownPluginProps = Partial<DashboardPluginComponentProps>;\n\nexport type MarkdownComponentState = {\n panelState?: { content: string } | null;\n};\n\nexport function MarkdownPlugin(props: MarkdownPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id, layout, panelManager, registerComponent } = props;\n\n const handleOpen = useCallback(\n ({\n title = '',\n metadata = {},\n id: panelId = nanoid(),\n focusElement = LayoutUtils.DEFAULT_FOCUS_SELECTOR,\n createNewStack = false,\n dragEvent = undefined,\n } = {}) => {\n const openedMarkdowns = panelManager.getOpenedPanelConfigsOfType(\n MarkdownPanel.COMPONENT\n );\n const usedTitles = openedMarkdowns.map(markdown => markdown.title ?? '');\n const panelTitle =\n title != null && title !== ''\n ? title\n : MarkdownUtils.getNewMarkdownTitle(usedTitles);\n const content = null;\n const config = {\n type: 'react-component' as const,\n component: MarkdownPanel.COMPONENT,\n props: {\n id: panelId,\n metadata,\n panelState: { content },\n localDashboardId: id,\n },\n title: panelTitle,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({\n root,\n config,\n focusElement,\n createNewStack,\n dragEvent,\n });\n },\n [id, layout, panelManager]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(MarkdownPanel.COMPONENT, MarkdownPanel),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [registerComponent]\n );\n\n useListener(layout.eventHub, MarkdownEvent.OPEN, handleOpen);\n\n return null;\n}\n\nexport default MarkdownPlugin;\n"],"mappings":"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","ignoreList":[]}
|