@deephaven/dashboard-core-plugins 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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.js +35 -29
- 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.js +197 -272
- 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.js +18 -3
- 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":"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","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":[]}
|
package/dist/GridWidgetPlugin.js
CHANGED
|
@@ -6,6 +6,12 @@ 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
|
+
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; }
|
|
9
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';
|
|
@@ -22,17 +28,14 @@ import { useTablePlugin } from "./useTablePlugin.js";
|
|
|
22
28
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
23
29
|
export function GridWidgetPlugin(_ref) {
|
|
24
30
|
var _model$columns;
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
onModelChanged
|
|
31
|
-
} = _ref;
|
|
31
|
+
var fetch = _ref.fetch,
|
|
32
|
+
transformTableOptions = _ref.transformTableOptions,
|
|
33
|
+
transformModel = _ref.transformModel,
|
|
34
|
+
irisGridProps = _ref.irisGridProps,
|
|
35
|
+
onModelChanged = _ref.onModelChanged;
|
|
32
36
|
var settings = useSelector(getSettings);
|
|
33
|
-
var
|
|
34
|
-
eventHub
|
|
35
|
-
} = useLayoutManager();
|
|
37
|
+
var _useLayoutManager = useLayoutManager(),
|
|
38
|
+
eventHub = _useLayoutManager.eventHub;
|
|
36
39
|
var fetchResult = useIrisGridModel(fetch, transformModel);
|
|
37
40
|
var model = fetchResult.status === 'success' ? fetchResult.model : undefined;
|
|
38
41
|
|
|
@@ -44,10 +47,13 @@ export function GridWidgetPlugin(_ref) {
|
|
|
44
47
|
}, [model, onModelChanged]);
|
|
45
48
|
var dh = useApi();
|
|
46
49
|
var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
var _usePersistentState = usePersistentState(undefined, {
|
|
51
|
+
version: 1,
|
|
52
|
+
type: 'GridWidgetPlugin'
|
|
53
|
+
}),
|
|
54
|
+
_usePersistentState2 = _slicedToArray(_usePersistentState, 2),
|
|
55
|
+
state = _usePersistentState2[0],
|
|
56
|
+
setState = _usePersistentState2[1];
|
|
51
57
|
var initialState = useRef(state);
|
|
52
58
|
var hydratedState = useMemo(() => {
|
|
53
59
|
if (fetchResult.status !== 'success' || initialState.current === undefined) {
|
|
@@ -66,9 +72,7 @@ export function GridWidgetPlugin(_ref) {
|
|
|
66
72
|
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);
|
|
67
73
|
var irisGridRef = useRef(null);
|
|
68
74
|
var _useGridLinker = useGridLinker(fetchResult.status === 'success' ? fetchResult.model : null, irisGridRef.current),
|
|
69
|
-
|
|
70
|
-
alwaysFetchColumns: linkerAlwaysFetchColumns
|
|
71
|
-
} = _useGridLinker,
|
|
75
|
+
linkerAlwaysFetchColumns = _useGridLinker.alwaysFetchColumns,
|
|
72
76
|
linkerProps = _objectWithoutProperties(_useGridLinker, _excluded);
|
|
73
77
|
var handleClearAllFilters = useCallback(() => {
|
|
74
78
|
if (irisGridRef.current == null) {
|
|
@@ -77,18 +81,20 @@ export function GridWidgetPlugin(_ref) {
|
|
|
77
81
|
irisGridRef.current.clearAllFilters();
|
|
78
82
|
}, []);
|
|
79
83
|
useListener(eventHub, InputFilterEvent.CLEAR_ALL_FILTERS, handleClearAllFilters);
|
|
80
|
-
var
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
84
|
+
var _useState = useState([]),
|
|
85
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
86
|
+
selection = _useState2[0],
|
|
87
|
+
setSelection = _useState2[1];
|
|
88
|
+
var _useTablePlugin = useTablePlugin({
|
|
89
|
+
model,
|
|
90
|
+
irisGridRef,
|
|
91
|
+
irisGridUtils,
|
|
92
|
+
selectedRanges: selection
|
|
93
|
+
}),
|
|
94
|
+
Plugin = _useTablePlugin.Plugin,
|
|
95
|
+
customFilters = _useTablePlugin.customFilters,
|
|
96
|
+
filterFetchColumns = _useTablePlugin.alwaysFetchColumns,
|
|
97
|
+
onContextMenu = _useTablePlugin.onContextMenu;
|
|
92
98
|
var alwaysFetchColumns = useMemo(() => {
|
|
93
99
|
var columnSet = new Set([...linkerAlwaysFetchColumns, ...filterFetchColumns]);
|
|
94
100
|
return [...columnSet];
|
|
@@ -1 +1 @@
|
|
|
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","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, 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\nexport function GridWidgetPlugin({\n fetch,\n transformTableOptions,\n transformModel,\n irisGridProps,\n onModelChanged,\n}: WidgetComponentProps<DhType.Table> &\n 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 }): 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":"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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\nexport function GridWidgetPlugin({\n fetch,\n transformTableOptions,\n transformModel,\n irisGridProps,\n onModelChanged,\n}: WidgetComponentProps<DhType.Table> &\n 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 }): 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":"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","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":[]}
|
|
@@ -8,11 +8,9 @@ import { PandasPanel } from "./panels/index.js";
|
|
|
8
8
|
import useHydrateGrid from "./useHydrateGrid.js";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
export var PandasPanelPlugin = /*#__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
|
return (
|
|
18
16
|
/*#__PURE__*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPanelPlugin.js","names":["forwardRef","PandasPanel","useHydrateGrid","jsx","_jsx","PandasPanelPlugin","props","ref","localDashboardId","fetch","metadata","hydratedProps","_objectSpread","displayName"],"sources":["../src/PandasPanelPlugin.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { type WidgetPanelProps } from '@deephaven/plugin';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { PandasPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport const PandasPanelPlugin = forwardRef(\n (props: WidgetPanelProps<dh.Table>, ref: React.Ref<PandasPanel>) => {\n const { localDashboardId, fetch, metadata } = props;\n const hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <PandasPanel ref={ref} {...props} {...hydratedProps} />\n );\n }\n);\n\nPandasPanelPlugin.displayName = 'PandasPanelPlugin';\n\nexport default PandasPanelPlugin;\n"],"mappings":";;;;;AAAA,SAASA,UAAU,QAAQ,OAAO;AAAC,SAG1BC,WAAW;AAAA,OACbC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAErB,OAAO,IAAMC,iBAAiB,gBAAGL,UAAU,CACzC,CAACM,KAAiC,EAAEC,GAA2B,KAAK;EAClE,
|
|
1
|
+
{"version":3,"file":"PandasPanelPlugin.js","names":["forwardRef","PandasPanel","useHydrateGrid","jsx","_jsx","PandasPanelPlugin","props","ref","localDashboardId","fetch","metadata","hydratedProps","_objectSpread","displayName"],"sources":["../src/PandasPanelPlugin.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { type WidgetPanelProps } from '@deephaven/plugin';\nimport { type dh } from '@deephaven/jsapi-types';\nimport { PandasPanel } from './panels';\nimport useHydrateGrid from './useHydrateGrid';\n\nexport const PandasPanelPlugin = forwardRef(\n (props: WidgetPanelProps<dh.Table>, ref: React.Ref<PandasPanel>) => {\n const { localDashboardId, fetch, metadata } = props;\n const hydratedProps = useHydrateGrid(fetch, localDashboardId, metadata);\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <PandasPanel ref={ref} {...props} {...hydratedProps} />\n );\n }\n);\n\nPandasPanelPlugin.displayName = 'PandasPanelPlugin';\n\nexport default PandasPanelPlugin;\n"],"mappings":";;;;;AAAA,SAASA,UAAU,QAAQ,OAAO;AAAC,SAG1BC,WAAW;AAAA,OACbC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAErB,OAAO,IAAMC,iBAAiB,gBAAGL,UAAU,CACzC,CAACM,KAAiC,EAAEC,GAA2B,KAAK;EAClE,IAAQC,gBAAgB,GAAsBF,KAAK,CAA3CE,gBAAgB;IAAEC,KAAK,GAAeH,KAAK,CAAzBG,KAAK;IAAEC,QAAQ,GAAKJ,KAAK,CAAlBI,QAAQ;EACzC,IAAMC,aAAa,GAAGT,cAAc,CAACO,KAAK,EAAED,gBAAgB,EAAEE,QAAQ,CAAC;EAEvE;IAAA;IACE;IACAN,IAAA,CAACH,WAAW,EAAAW,aAAA,CAAAA,aAAA;MAACL,GAAG,EAAEA;IAAI,GAAKD,KAAK,GAAMK,aAAa,CAAG;EAAC;AAE3D,CACF,CAAC;AAEDN,iBAAiB,CAACQ,WAAW,GAAG,mBAAmB;AAEnD,eAAeR,iBAAiB","ignoreList":[]}
|
|
@@ -5,9 +5,7 @@ import { PandasReloadButton } from "./panels/PandasReloadButton.js";
|
|
|
5
5
|
import { useIrisGridModel } from "./useIrisGridModel.js";
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
export function PandasWidgetPlugin(_ref) {
|
|
8
|
-
var
|
|
9
|
-
fetch
|
|
10
|
-
} = _ref;
|
|
8
|
+
var fetch = _ref.fetch;
|
|
11
9
|
var fetchResult = useIrisGridModel(fetch);
|
|
12
10
|
if (fetchResult.status === 'loading') {
|
|
13
11
|
return /*#__PURE__*/_jsx(LoadingOverlay, {
|
|
@@ -22,10 +20,8 @@ export function PandasWidgetPlugin(_ref) {
|
|
|
22
20
|
"data-testid": "pandas-widget-plugin-loading-error"
|
|
23
21
|
});
|
|
24
22
|
}
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
reload
|
|
28
|
-
} = fetchResult;
|
|
23
|
+
var model = fetchResult.model,
|
|
24
|
+
reload = fetchResult.reload;
|
|
29
25
|
return /*#__PURE__*/_jsx(IrisGrid, {
|
|
30
26
|
model: model,
|
|
31
27
|
children: /*#__PURE__*/_jsx(PandasReloadButton, {
|