@deephaven/dashboard 1.7.2-beta.1 → 1.7.2-react-18-alpha.3
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/BasePanel.js +14 -17
- package/dist/BasePanel.js.map +1 -1
- package/dist/Dashboard.js +2 -3
- package/dist/Dashboard.js.map +1 -1
- package/dist/DashboardConstants.js.map +1 -1
- package/dist/DashboardEvents.js.map +1 -1
- package/dist/DashboardLayout.d.ts +4 -30
- package/dist/DashboardLayout.d.ts.map +1 -1
- package/dist/DashboardLayout.js +4 -17
- package/dist/DashboardLayout.js.map +1 -1
- package/dist/DashboardPanelWrapper.js +1 -2
- package/dist/DashboardPanelWrapper.js.map +1 -1
- package/dist/DashboardPlugin.d.ts +13 -4
- package/dist/DashboardPlugin.d.ts.map +1 -1
- package/dist/DashboardPlugin.js +12 -0
- package/dist/DashboardPlugin.js.map +1 -1
- package/dist/DashboardUtils.d.ts +2 -2
- package/dist/DashboardUtils.d.ts.map +1 -1
- package/dist/DashboardUtils.js +1 -2
- package/dist/DashboardUtils.js.map +1 -1
- package/dist/LazyDashboard.js.map +1 -1
- package/dist/NavigationEvent.js.map +1 -1
- package/dist/PanelContextMenu.d.ts +3 -3
- package/dist/PanelContextMenu.d.ts.map +1 -1
- package/dist/PanelContextMenu.js +12 -14
- package/dist/PanelContextMenu.js.map +1 -1
- package/dist/PanelErrorBoundary.js.map +1 -1
- package/dist/PanelEvent.js.map +1 -1
- package/dist/PanelManager.d.ts +3 -3
- package/dist/PanelManager.d.ts.map +1 -1
- package/dist/PanelManager.js +10 -11
- package/dist/PanelManager.js.map +1 -1
- package/dist/PanelPlaceholder.d.ts +1 -4
- package/dist/PanelPlaceholder.d.ts.map +1 -1
- package/dist/PanelPlaceholder.js +1 -2
- package/dist/PanelPlaceholder.js.map +1 -1
- package/dist/RenameDialog.js +3 -4
- package/dist/RenameDialog.js.map +1 -1
- package/dist/TabEvent.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/GLPropTypes.js.map +1 -1
- package/dist/layout/LayoutManagerContext.js.map +1 -1
- package/dist/layout/LayoutUtils.d.ts +3 -3
- package/dist/layout/LayoutUtils.d.ts.map +1 -1
- package/dist/layout/LayoutUtils.js +5 -6
- package/dist/layout/LayoutUtils.js.map +1 -1
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/useDashboardPanel.js.map +1 -1
- package/dist/layout/useLayoutManager.js.map +1 -1
- package/dist/layout/useListener.js.map +1 -1
- package/dist/layout/usePanelRegistration.js.map +1 -1
- package/dist/redux/actionTypes.js.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/hooks.js.map +1 -1
- package/dist/redux/index.js.map +1 -1
- package/dist/redux/reducers/dashboardData.js.map +1 -1
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/dist/useDashboardId.js.map +1 -1
- package/dist/useDhId.js.map +1 -1
- package/dist/useFiber.js +1 -1
- package/dist/useFiber.js.map +1 -1
- package/dist/usePanelId.js.map +1 -1
- package/package.json +10 -10
package/dist/BasePanel.js
CHANGED
|
@@ -14,9 +14,7 @@ import PanelContextMenu from "./PanelContextMenu.js";
|
|
|
14
14
|
import RenameDialog from "./RenameDialog.js";
|
|
15
15
|
import TabEvent from "./TabEvent.js";
|
|
16
16
|
import "./Panel.css";
|
|
17
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
18
|
var log = Log.module('Panel');
|
|
21
19
|
/**
|
|
22
20
|
* Generic panel component that emits mount/unmount/focus events.
|
|
@@ -62,7 +60,7 @@ class BasePanel extends PureComponent {
|
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
62
|
componentDidMount() {
|
|
65
|
-
var _this$ref$current
|
|
63
|
+
var _this$ref$current;
|
|
66
64
|
var {
|
|
67
65
|
componentPanel,
|
|
68
66
|
glContainer,
|
|
@@ -78,7 +76,7 @@ class BasePanel extends PureComponent {
|
|
|
78
76
|
glEventHub.on(TabEvent.blur, this.handleTabBlur);
|
|
79
77
|
glEventHub.emit(PanelEvent.MOUNT, componentPanel !== null && componentPanel !== void 0 ? componentPanel : this);
|
|
80
78
|
this.setState({
|
|
81
|
-
isWithinPanel: ((_this$ref$current = this.ref.current) === null || _this$ref$current === void 0
|
|
79
|
+
isWithinPanel: ((_this$ref$current = this.ref.current) === null || _this$ref$current === void 0 || (_this$ref$current = _this$ref$current.parentElement) === null || _this$ref$current === void 0 ? void 0 : _this$ref$current.closest('.dh-panel')) != null
|
|
82
80
|
});
|
|
83
81
|
}
|
|
84
82
|
componentWillUnmount() {
|
|
@@ -109,13 +107,13 @@ class BasePanel extends PureComponent {
|
|
|
109
107
|
var {
|
|
110
108
|
onTab
|
|
111
109
|
} = this.props;
|
|
112
|
-
onTab === null || onTab === void 0
|
|
110
|
+
onTab === null || onTab === void 0 || onTab(tab);
|
|
113
111
|
}
|
|
114
112
|
handleTabClicked(e) {
|
|
115
113
|
var {
|
|
116
114
|
onTabClicked
|
|
117
115
|
} = this.props;
|
|
118
|
-
onTabClicked === null || onTabClicked === void 0
|
|
116
|
+
onTabClicked === null || onTabClicked === void 0 || onTabClicked(e);
|
|
119
117
|
}
|
|
120
118
|
handleFocus(event) {
|
|
121
119
|
var {
|
|
@@ -126,13 +124,13 @@ class BasePanel extends PureComponent {
|
|
|
126
124
|
var {
|
|
127
125
|
onFocus
|
|
128
126
|
} = this.props;
|
|
129
|
-
onFocus === null || onFocus === void 0
|
|
127
|
+
onFocus === null || onFocus === void 0 || onFocus(event);
|
|
130
128
|
}
|
|
131
129
|
handleBlur(event) {
|
|
132
130
|
var {
|
|
133
131
|
onBlur
|
|
134
132
|
} = this.props;
|
|
135
|
-
onBlur === null || onBlur === void 0
|
|
133
|
+
onBlur === null || onBlur === void 0 || onBlur(event);
|
|
136
134
|
}
|
|
137
135
|
handleHide() {
|
|
138
136
|
var {
|
|
@@ -141,7 +139,7 @@ class BasePanel extends PureComponent {
|
|
|
141
139
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
142
140
|
args[_key] = arguments[_key];
|
|
143
141
|
}
|
|
144
|
-
onHide === null || onHide === void 0
|
|
142
|
+
onHide === null || onHide === void 0 || onHide(...args);
|
|
145
143
|
}
|
|
146
144
|
handleResize() {
|
|
147
145
|
var {
|
|
@@ -150,7 +148,7 @@ class BasePanel extends PureComponent {
|
|
|
150
148
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
151
149
|
args[_key2] = arguments[_key2];
|
|
152
150
|
}
|
|
153
|
-
onResize === null || onResize === void 0
|
|
151
|
+
onResize === null || onResize === void 0 || onResize(...args);
|
|
154
152
|
}
|
|
155
153
|
handleBeforeShow() {
|
|
156
154
|
var {
|
|
@@ -159,7 +157,7 @@ class BasePanel extends PureComponent {
|
|
|
159
157
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
160
158
|
args[_key3] = arguments[_key3];
|
|
161
159
|
}
|
|
162
|
-
onBeforeShow === null || onBeforeShow === void 0
|
|
160
|
+
onBeforeShow === null || onBeforeShow === void 0 || onBeforeShow(...args);
|
|
163
161
|
}
|
|
164
162
|
handleShow() {
|
|
165
163
|
var {
|
|
@@ -168,7 +166,7 @@ class BasePanel extends PureComponent {
|
|
|
168
166
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
169
167
|
args[_key4] = arguments[_key4];
|
|
170
168
|
}
|
|
171
|
-
onShow === null || onShow === void 0
|
|
169
|
+
onShow === null || onShow === void 0 || onShow(...args);
|
|
172
170
|
}
|
|
173
171
|
handleTabBlur() {
|
|
174
172
|
var {
|
|
@@ -177,7 +175,7 @@ class BasePanel extends PureComponent {
|
|
|
177
175
|
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
178
176
|
args[_key5] = arguments[_key5];
|
|
179
177
|
}
|
|
180
|
-
onTabBlur === null || onTabBlur === void 0
|
|
178
|
+
onTabBlur === null || onTabBlur === void 0 || onTabBlur(...args);
|
|
181
179
|
}
|
|
182
180
|
handleTabFocus() {
|
|
183
181
|
var {
|
|
@@ -186,7 +184,7 @@ class BasePanel extends PureComponent {
|
|
|
186
184
|
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
187
185
|
args[_key6] = arguments[_key6];
|
|
188
186
|
}
|
|
189
|
-
onTabFocus === null || onTabFocus === void 0
|
|
187
|
+
onTabFocus === null || onTabFocus === void 0 || onTabFocus(...args);
|
|
190
188
|
}
|
|
191
189
|
handleRenameCancel() {
|
|
192
190
|
this.setState({
|
|
@@ -275,7 +273,7 @@ class BasePanel extends PureComponent {
|
|
|
275
273
|
errorMessage: errorMessage,
|
|
276
274
|
isLoaded: isLoaded,
|
|
277
275
|
isLoading: isLoading
|
|
278
|
-
}), !isWithinPanel && glTab != null && /*#__PURE__*/ReactDOM.createPortal(
|
|
276
|
+
}), !isWithinPanel && glTab != null && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsxs(_Fragment, {
|
|
279
277
|
children: [/*#__PURE__*/_jsx(PanelContextMenu, {
|
|
280
278
|
glContainer: glContainer,
|
|
281
279
|
glEventHub: glEventHub,
|
|
@@ -299,7 +297,6 @@ class BasePanel extends PureComponent {
|
|
|
299
297
|
});
|
|
300
298
|
}
|
|
301
299
|
}
|
|
302
|
-
|
|
303
300
|
var XBasePanel = createXComponent(BasePanel);
|
|
304
301
|
export default XBasePanel;
|
|
305
302
|
//# sourceMappingURL=BasePanel.js.map
|
package/dist/BasePanel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePanel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","createXComponent","LoadingOverlay","Tooltip","assertNotNull","EMPTY_ARRAY","Log","LayoutUtils","PanelEvent","PanelContextMenu","RenameDialog","TabEvent","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","BasePanel","constructor","props","_defineProperty","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleCopyPanel","bind","handleFocus","handleBlur","handleHide","handleResize","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","ref","createRef","glContainer","state","title","getTitleFromContainer","showRenameDialog","isWithinPanel","componentDidMount","_this$ref$current","_this$ref$current$par","componentPanel","glEventHub","on","focus","blur","emit","MOUNT","setState","current","parentElement","closest","componentWillUnmount","off","UNMOUNT","tab","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","event","FOCUS","onFocus","onBlur","onHide","_len","arguments","length","args","Array","_key","onResize","_len2","_key2","onBeforeShow","_len3","_key3","onShow","_len4","_key4","onTabBlur","_len5","_key5","onTabFocus","_len6","_key6","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","onFocusCapture","onBlurCapture","createPortal","getAdditionalActions","isShown","value","itemType","onCancel","onSubmit","interactive","options","placement","popperClassName","element","XBasePanel"],"sources":["../src/BasePanel.tsx"],"sourcesContent":["import React, {\n type FocusEvent,\n type FocusEventHandler,\n PureComponent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n type ContextAction,\n ContextActions,\n createXComponent,\n LoadingOverlay,\n type ResolvableContextAction,\n Tooltip,\n} from '@deephaven/components';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport LayoutUtils from './layout/LayoutUtils';\nimport { type PanelComponent } from './DashboardPlugin';\nimport PanelEvent from './PanelEvent';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\nimport TabEvent from './TabEvent';\nimport './Panel.scss';\n\nconst log = Log.module('Panel');\n\nexport type BasePanelProps = {\n /**\n * Reference to the component panel.\n * Will wait until it is set before emitting mount/unmount events.\n *\n */\n componentPanel?: PanelComponent;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className?: string;\n onFocus?: FocusEventHandler<HTMLDivElement>;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n onTab?: (tab: Tab) => void;\n onTabClicked?: (e: MouseEvent) => void;\n onHide?: (...args: unknown[]) => void;\n onResize?: (...args: unknown[]) => void;\n onBeforeShow?: (...args: unknown[]) => void;\n onShow?: (...args: unknown[]) => void;\n onTabBlur?: (...args: unknown[]) => void;\n onTabFocus?: (...args: unknown[]) => void;\n renderTabTooltip?: () => ReactNode;\n additionalActions?: ResolvableContextAction[];\n errorMessage?: string;\n isLoading?: boolean;\n isLoaded?: boolean;\n isClonable?: boolean;\n isRenamable?: boolean;\n};\n\ninterface BasePanelState {\n title?: string | null;\n showRenameDialog: boolean;\n isWithinPanel: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show\n */\nclass BasePanel extends PureComponent<BasePanelProps, BasePanelState> {\n constructor(props: BasePanelProps) {\n super(props);\n\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n this.ref = React.createRef<HTMLDivElement>();\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n isWithinPanel: true,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel ?? this);\n\n this.setState({\n isWithinPanel:\n this.ref.current?.parentElement?.closest('.dh-panel') != null,\n });\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel ?? this);\n }\n\n ref: React.RefObject<HTMLDivElement>;\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab?.(tab);\n }\n\n handleTabClicked(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked?.(e);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel ?? this);\n\n const { onFocus } = this.props;\n onFocus?.(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur?.(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide?.(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize?.(...args);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow?.(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow?.(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur?.(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus?.(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionalActions = memoize(\n (\n actions: readonly ResolvableContextAction[],\n isClonable: boolean,\n isRenamable: boolean\n ) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n glEventHub,\n additionalActions = EMPTY_ARRAY,\n errorMessage,\n isLoaded = true,\n isLoading = false,\n isClonable = false,\n isRenamable = false,\n } = this.props;\n\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title, isWithinPanel } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 dh-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n ref={this.ref}\n >\n {children}\n <LoadingOverlay\n data-testid=\"base-panel-loading\"\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {!isWithinPanel &&\n glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n glEventHub={glEventHub}\n additionalActions={this.getAdditionalActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nconst XBasePanel = createXComponent(BasePanel);\n\nexport default XBasePanel;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BasePanel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","createXComponent","LoadingOverlay","Tooltip","assertNotNull","EMPTY_ARRAY","Log","LayoutUtils","PanelEvent","PanelContextMenu","RenameDialog","TabEvent","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","BasePanel","constructor","props","_defineProperty","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleCopyPanel","bind","handleFocus","handleBlur","handleHide","handleResize","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","ref","createRef","glContainer","state","title","getTitleFromContainer","showRenameDialog","isWithinPanel","componentDidMount","_this$ref$current","componentPanel","glEventHub","on","focus","blur","emit","MOUNT","setState","current","parentElement","closest","componentWillUnmount","off","UNMOUNT","tab","getTitleFromTab","forceUpdate","onTab","e","onTabClicked","event","FOCUS","onFocus","onBlur","onHide","_len","arguments","length","args","Array","_key","onResize","_len2","_key2","onBeforeShow","_len3","_key3","onShow","_len4","_key4","onTabBlur","_len5","_key5","onTabFocus","_len6","_key6","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","onFocusCapture","onBlurCapture","createPortal","getAdditionalActions","isShown","value","itemType","onCancel","onSubmit","interactive","options","placement","popperClassName","element","XBasePanel"],"sources":["../src/BasePanel.tsx"],"sourcesContent":["import React, {\n type FocusEvent,\n type FocusEventHandler,\n PureComponent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n type ContextAction,\n ContextActions,\n createXComponent,\n LoadingOverlay,\n type ResolvableContextAction,\n Tooltip,\n} from '@deephaven/components';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport LayoutUtils from './layout/LayoutUtils';\nimport { type PanelComponent } from './DashboardPlugin';\nimport PanelEvent from './PanelEvent';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\nimport TabEvent from './TabEvent';\nimport './Panel.scss';\n\nconst log = Log.module('Panel');\n\nexport type BasePanelProps = {\n /**\n * Reference to the component panel.\n * Will wait until it is set before emitting mount/unmount events.\n *\n */\n componentPanel?: PanelComponent;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className?: string;\n onFocus?: FocusEventHandler<HTMLDivElement>;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n onTab?: (tab: Tab) => void;\n onTabClicked?: (e: MouseEvent) => void;\n onHide?: (...args: unknown[]) => void;\n onResize?: (...args: unknown[]) => void;\n onBeforeShow?: (...args: unknown[]) => void;\n onShow?: (...args: unknown[]) => void;\n onTabBlur?: (...args: unknown[]) => void;\n onTabFocus?: (...args: unknown[]) => void;\n renderTabTooltip?: () => ReactNode;\n additionalActions?: ResolvableContextAction[];\n errorMessage?: string;\n isLoading?: boolean;\n isLoaded?: boolean;\n isClonable?: boolean;\n isRenamable?: boolean;\n};\n\ninterface BasePanelState {\n title?: string | null;\n showRenameDialog: boolean;\n isWithinPanel: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show\n */\nclass BasePanel extends PureComponent<BasePanelProps, BasePanelState> {\n constructor(props: BasePanelProps) {\n super(props);\n\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n this.ref = React.createRef<HTMLDivElement>();\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n isWithinPanel: true,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel ?? this);\n\n this.setState({\n isWithinPanel:\n this.ref.current?.parentElement?.closest('.dh-panel') != null,\n });\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel ?? this);\n }\n\n ref: React.RefObject<HTMLDivElement>;\n\n handleTab(tab: Tab): void {\n if (tab != null) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab?.(tab);\n }\n\n handleTabClicked(e: MouseEvent): void {\n const { onTabClicked } = this.props;\n onTabClicked?.(e);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel ?? this);\n\n const { onFocus } = this.props;\n onFocus?.(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur?.(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide?.(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize?.(...args);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow?.(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow?.(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur?.(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus?.(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionalActions = memoize(\n (\n actions: readonly ResolvableContextAction[],\n isClonable: boolean,\n isRenamable: boolean\n ) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n }\n );\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n glEventHub,\n additionalActions = EMPTY_ARRAY,\n errorMessage,\n isLoaded = true,\n isLoading = false,\n isClonable = false,\n isRenamable = false,\n } = this.props;\n\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title, isWithinPanel } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 dh-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n ref={this.ref}\n >\n {children}\n <LoadingOverlay\n data-testid=\"base-panel-loading\"\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {!isWithinPanel &&\n glTab != null &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n glEventHub={glEventHub}\n additionalActions={this.getAdditionalActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip != null && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nconst XBasePanel = createXComponent(BasePanel);\n\nexport default XBasePanel;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/Dashboard.js
CHANGED
|
@@ -15,8 +15,7 @@ import "./Dashboard.css";
|
|
|
15
15
|
import { LayoutManagerContext } from "./layout/index.js";
|
|
16
16
|
import { DashboardIdContext } from "./useDashboardId.js";
|
|
17
17
|
import { FiberProvider } from "./useFiber.js";
|
|
18
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
19
|
var RESIZE_THROTTLE = 100;
|
|
21
20
|
var DEFAULT_CALLBACK = () => undefined;
|
|
22
21
|
var EMPTY_OBJECT = Object.freeze({});
|
|
@@ -69,7 +68,7 @@ export function Dashboard(_ref) {
|
|
|
69
68
|
}, [layoutSettings, fallbackComponent, onGoldenLayoutChange, setIsInitialized, setLayout]);
|
|
70
69
|
var handleResize = useMemo(() => throttle(() => {
|
|
71
70
|
if (layout != null && layout.isInitialised) {
|
|
72
|
-
layout === null || layout === void 0
|
|
71
|
+
layout === null || layout === void 0 || layout.updateSize();
|
|
73
72
|
}
|
|
74
73
|
}, RESIZE_THROTTLE), [layout]);
|
|
75
74
|
useResizeObserver(layoutElement.current, handleResize);
|
package/dist/Dashboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard.js","names":["React","useEffect","useMemo","useRef","useState","throttle","GoldenLayout","useResizeObserver","LayoutUtils","PanelPlaceholder","DashboardLayout","LayoutManagerContext","DashboardIdContext","FiberProvider","jsx","_jsx","jsxs","_jsxs","RESIZE_THROTTLE","DEFAULT_CALLBACK","undefined","EMPTY_OBJECT","Object","freeze","Dashboard","_ref","id","children","emptyDashboard","layoutConfig","layoutSettings","onLayoutConfigChange","onGoldenLayoutChange","onLayoutInitialized","fallbackComponent","hydrate","dehydrate","panelWrapper","layoutElement","isInitialized","setIsInitialized","layout","setLayout","initDashboard","current","config","_objectSpread","makeDefaultLayout","settings","assign","content","newLayout","onInit","off","on","setFallbackComponent","init","destroy","handleResize","isInitialised","updateSize","className","ref","Provider","value","onLayoutChange"],"sources":["../src/Dashboard.tsx"],"sourcesContent":["import React, {\n type ComponentType,\n type ForwardRefExoticComponent,\n type RefAttributes,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport type { ItemConfig, Settings } from '@deephaven/golden-layout';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport './layout/GoldenLayout.scss';\nimport LayoutUtils from './layout/LayoutUtils';\nimport PanelPlaceholder from './PanelPlaceholder';\nimport DashboardLayout from './DashboardLayout';\nimport {\n type PanelDehydrateFunction,\n type PanelHydrateFunction,\n type PanelProps,\n} from './DashboardPlugin';\nimport './Dashboard.scss';\nimport { LayoutManagerContext } from './layout';\nimport { DashboardIdContext } from './useDashboardId';\nimport { FiberProvider } from './useFiber';\n\nconst RESIZE_THROTTLE = 100;\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nexport type DashboardProps = {\n id?: string;\n children?: React.ReactNode | React.ReactNode[];\n emptyDashboard?: React.ReactNode;\n layoutConfig?: ItemConfig[];\n layoutSettings?: Partial<Settings>;\n onLayoutConfigChange?: () => void;\n onGoldenLayoutChange?: (goldenLayout: GoldenLayout) => void;\n onLayoutInitialized?: () => void;\n fallbackComponent?: ForwardRefExoticComponent<\n PanelProps & RefAttributes<HTMLDivElement>\n >;\n hydrate?: PanelHydrateFunction;\n dehydrate?: PanelDehydrateFunction;\n\n /** Component to wrap each panel with */\n panelWrapper?: ComponentType;\n};\n\nexport function Dashboard({\n id = 'default',\n children,\n emptyDashboard,\n layoutConfig,\n layoutSettings = EMPTY_OBJECT,\n onLayoutConfigChange = DEFAULT_CALLBACK,\n onGoldenLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n fallbackComponent = PanelPlaceholder,\n hydrate,\n dehydrate,\n panelWrapper,\n}: DashboardProps): JSX.Element {\n const layoutElement = useRef<HTMLDivElement>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [layout, setLayout] = useState<GoldenLayout>();\n\n useEffect(\n function initDashboard() {\n if (!layoutElement.current) {\n setLayout(undefined);\n return;\n }\n const config = {\n ...LayoutUtils.makeDefaultLayout(),\n };\n if (config.settings === undefined) {\n config.settings = {};\n }\n Object.assign(config.settings, layoutSettings);\n\n // Load our content later after plugins have registered\n config.content = [];\n\n const newLayout = new GoldenLayout(config, layoutElement.current);\n\n const onInit = (): void => {\n newLayout.off('initialised', onInit);\n setIsInitialized(true);\n };\n newLayout.on('initialised', onInit);\n\n if (fallbackComponent != null) {\n newLayout.setFallbackComponent(fallbackComponent);\n }\n\n newLayout.init();\n\n setLayout(newLayout);\n\n onGoldenLayoutChange(newLayout);\n\n return () => {\n newLayout.destroy();\n };\n },\n [\n layoutSettings,\n fallbackComponent,\n onGoldenLayoutChange,\n setIsInitialized,\n setLayout,\n ]\n );\n\n const handleResize = useMemo(\n () =>\n throttle(() => {\n if (layout != null && layout.isInitialised) {\n layout?.updateSize();\n }\n }, RESIZE_THROTTLE),\n [layout]\n );\n\n useResizeObserver(layoutElement.current, handleResize);\n\n return (\n <div className=\"dashboard-container w-100 h-100\">\n <div className=\"w-100 h-100\" ref={layoutElement} />\n {isInitialized && layout && (\n <LayoutManagerContext.Provider value={layout}>\n <DashboardIdContext.Provider value={id}>\n <FiberProvider>\n <DashboardLayout\n emptyDashboard={emptyDashboard}\n id={id}\n layout={layout}\n layoutConfig={layoutConfig}\n onLayoutChange={onLayoutConfigChange}\n onLayoutInitialized={onLayoutInitialized}\n hydrate={hydrate}\n dehydrate={dehydrate}\n panelWrapper={panelWrapper}\n >\n {children}\n </DashboardLayout>\n </FiberProvider>\n </DashboardIdContext.Provider>\n </LayoutManagerContext.Provider>\n )}\n </div>\n );\n}\n\nexport default Dashboard;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAIVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,OAAOC,YAAY,MAAM,0BAA0B;AAEnD,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC;AAAA,OAEpDC,WAAW;AAAA,OACXC,gBAAgB;AAAA,OAChBC,eAAe;AAAA;AAAA,SAObC,oBAAoB;AAAA,SACpBC,kBAAkB;AAAA,SAClBC,aAAa;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"Dashboard.js","names":["React","useEffect","useMemo","useRef","useState","throttle","GoldenLayout","useResizeObserver","LayoutUtils","PanelPlaceholder","DashboardLayout","LayoutManagerContext","DashboardIdContext","FiberProvider","jsx","_jsx","jsxs","_jsxs","RESIZE_THROTTLE","DEFAULT_CALLBACK","undefined","EMPTY_OBJECT","Object","freeze","Dashboard","_ref","id","children","emptyDashboard","layoutConfig","layoutSettings","onLayoutConfigChange","onGoldenLayoutChange","onLayoutInitialized","fallbackComponent","hydrate","dehydrate","panelWrapper","layoutElement","isInitialized","setIsInitialized","layout","setLayout","initDashboard","current","config","_objectSpread","makeDefaultLayout","settings","assign","content","newLayout","onInit","off","on","setFallbackComponent","init","destroy","handleResize","isInitialised","updateSize","className","ref","Provider","value","onLayoutChange"],"sources":["../src/Dashboard.tsx"],"sourcesContent":["import React, {\n type ComponentType,\n type ForwardRefExoticComponent,\n type RefAttributes,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport throttle from 'lodash.throttle';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport type { ItemConfig, Settings } from '@deephaven/golden-layout';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport './layout/GoldenLayout.scss';\nimport LayoutUtils from './layout/LayoutUtils';\nimport PanelPlaceholder from './PanelPlaceholder';\nimport DashboardLayout from './DashboardLayout';\nimport {\n type PanelDehydrateFunction,\n type PanelHydrateFunction,\n type PanelProps,\n} from './DashboardPlugin';\nimport './Dashboard.scss';\nimport { LayoutManagerContext } from './layout';\nimport { DashboardIdContext } from './useDashboardId';\nimport { FiberProvider } from './useFiber';\n\nconst RESIZE_THROTTLE = 100;\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nexport type DashboardProps = {\n id?: string;\n children?: React.ReactNode | React.ReactNode[];\n emptyDashboard?: React.ReactNode;\n layoutConfig?: ItemConfig[];\n layoutSettings?: Partial<Settings>;\n onLayoutConfigChange?: () => void;\n onGoldenLayoutChange?: (goldenLayout: GoldenLayout) => void;\n onLayoutInitialized?: () => void;\n fallbackComponent?: ForwardRefExoticComponent<\n PanelProps & RefAttributes<HTMLDivElement>\n >;\n hydrate?: PanelHydrateFunction;\n dehydrate?: PanelDehydrateFunction;\n\n /** Component to wrap each panel with */\n panelWrapper?: ComponentType;\n};\n\nexport function Dashboard({\n id = 'default',\n children,\n emptyDashboard,\n layoutConfig,\n layoutSettings = EMPTY_OBJECT,\n onLayoutConfigChange = DEFAULT_CALLBACK,\n onGoldenLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n fallbackComponent = PanelPlaceholder,\n hydrate,\n dehydrate,\n panelWrapper,\n}: DashboardProps): JSX.Element {\n const layoutElement = useRef<HTMLDivElement>(null);\n const [isInitialized, setIsInitialized] = useState(false);\n const [layout, setLayout] = useState<GoldenLayout>();\n\n useEffect(\n function initDashboard() {\n if (!layoutElement.current) {\n setLayout(undefined);\n return;\n }\n const config = {\n ...LayoutUtils.makeDefaultLayout(),\n };\n if (config.settings === undefined) {\n config.settings = {};\n }\n Object.assign(config.settings, layoutSettings);\n\n // Load our content later after plugins have registered\n config.content = [];\n\n const newLayout = new GoldenLayout(config, layoutElement.current);\n\n const onInit = (): void => {\n newLayout.off('initialised', onInit);\n setIsInitialized(true);\n };\n newLayout.on('initialised', onInit);\n\n if (fallbackComponent != null) {\n newLayout.setFallbackComponent(fallbackComponent);\n }\n\n newLayout.init();\n\n setLayout(newLayout);\n\n onGoldenLayoutChange(newLayout);\n\n return () => {\n newLayout.destroy();\n };\n },\n [\n layoutSettings,\n fallbackComponent,\n onGoldenLayoutChange,\n setIsInitialized,\n setLayout,\n ]\n );\n\n const handleResize = useMemo(\n () =>\n throttle(() => {\n if (layout != null && layout.isInitialised) {\n layout?.updateSize();\n }\n }, RESIZE_THROTTLE),\n [layout]\n );\n\n useResizeObserver(layoutElement.current, handleResize);\n\n return (\n <div className=\"dashboard-container w-100 h-100\">\n <div className=\"w-100 h-100\" ref={layoutElement} />\n {isInitialized && layout && (\n <LayoutManagerContext.Provider value={layout}>\n <DashboardIdContext.Provider value={id}>\n <FiberProvider>\n <DashboardLayout\n emptyDashboard={emptyDashboard}\n id={id}\n layout={layout}\n layoutConfig={layoutConfig}\n onLayoutChange={onLayoutConfigChange}\n onLayoutInitialized={onLayoutInitialized}\n hydrate={hydrate}\n dehydrate={dehydrate}\n panelWrapper={panelWrapper}\n >\n {children}\n </DashboardLayout>\n </FiberProvider>\n </DashboardIdContext.Provider>\n </LayoutManagerContext.Provider>\n )}\n </div>\n );\n}\n\nexport default Dashboard;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardConstants.js","names":["DEFAULT_DASHBOARD_ID"],"sources":["../src/DashboardConstants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const DEFAULT_DASHBOARD_ID = 'default';\n"],"mappings":"AAAA;AACA,OAAO,IAAMA,oBAAoB,GAAG,SAAS"}
|
|
1
|
+
{"version":3,"file":"DashboardConstants.js","names":["DEFAULT_DASHBOARD_ID"],"sources":["../src/DashboardConstants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const DEFAULT_DASHBOARD_ID = 'default';\n"],"mappings":"AAAA;AACA,OAAO,IAAMA,oBAAoB,GAAG,SAAS","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardEvents.js","names":["makeEventFunctions","CREATE_DASHBOARD","CLOSE_DASHBOARD","listen","listenForCreateDashboard","emit","emitCreateDashboard","useListener","useCreateDashboardListener","listenForCloseDashboard","emitCloseDashboard","useCloseDashboardListener"],"sources":["../src/DashboardEvents.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nexport const CREATE_DASHBOARD = 'CREATE_DASHBOARD';\n\nexport const CLOSE_DASHBOARD = 'CLOSE_DASHBOARD';\n\nexport interface CreateDashboardPayload<T = unknown> {\n pluginId: string;\n title: string;\n data: T;\n}\n\nexport const {\n listen: listenForCreateDashboard,\n emit: emitCreateDashboard,\n useListener: useCreateDashboardListener,\n} = makeEventFunctions<[detail: CreateDashboardPayload]>(CREATE_DASHBOARD);\n\nexport const {\n listen: listenForCloseDashboard,\n emit: emitCloseDashboard,\n useListener: useCloseDashboardListener,\n} = makeEventFunctions<[title: string]>(CLOSE_DASHBOARD);\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAE7D,OAAO,IAAMC,gBAAgB,GAAG,kBAAkB;AAElD,OAAO,IAAMC,eAAe,GAAG,iBAAiB;AAQhD,OAAO,IAAM;EACXC,MAAM,EAAEC,wBAAwB;EAChCC,IAAI,EAAEC,mBAAmB;EACzBC,WAAW,EAAEC;AACf,CAAC,GAAGR,kBAAkB,CAAmCC,gBAAgB,CAAC;AAE1E,OAAO,IAAM;EACXE,MAAM,EAAEM,uBAAuB;EAC/BJ,IAAI,EAAEK,kBAAkB;EACxBH,WAAW,EAAEI;AACf,CAAC,GAAGX,kBAAkB,CAAkBE,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"DashboardEvents.js","names":["makeEventFunctions","CREATE_DASHBOARD","CLOSE_DASHBOARD","listen","listenForCreateDashboard","emit","emitCreateDashboard","useListener","useCreateDashboardListener","listenForCloseDashboard","emitCloseDashboard","useCloseDashboardListener"],"sources":["../src/DashboardEvents.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nexport const CREATE_DASHBOARD = 'CREATE_DASHBOARD';\n\nexport const CLOSE_DASHBOARD = 'CLOSE_DASHBOARD';\n\nexport interface CreateDashboardPayload<T = unknown> {\n pluginId: string;\n title: string;\n data: T;\n}\n\nexport const {\n listen: listenForCreateDashboard,\n emit: emitCreateDashboard,\n useListener: useCreateDashboardListener,\n} = makeEventFunctions<[detail: CreateDashboardPayload]>(CREATE_DASHBOARD);\n\nexport const {\n listen: listenForCloseDashboard,\n emit: emitCloseDashboard,\n useListener: useCloseDashboardListener,\n} = makeEventFunctions<[title: string]>(CLOSE_DASHBOARD);\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAE7D,OAAO,IAAMC,gBAAgB,GAAG,kBAAkB;AAElD,OAAO,IAAMC,eAAe,GAAG,iBAAiB;AAQhD,OAAO,IAAM;EACXC,MAAM,EAAEC,wBAAwB;EAChCC,IAAI,EAAEC,mBAAmB;EACzBC,WAAW,EAAEC;AACf,CAAC,GAAGR,kBAAkB,CAAmCC,gBAAgB,CAAC;AAE1E,OAAO,IAAM;EACXE,MAAM,EAAEM,uBAAuB;EAC/BJ,IAAI,EAAEK,kBAAkB;EACxBH,WAAW,EAAEI;AACf,CAAC,GAAGX,kBAAkB,CAAkBE,eAAe,CAAC","ignoreList":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import React, { type ComponentType } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
2
|
import type GoldenLayout from '@deephaven/golden-layout';
|
|
4
3
|
import type { ItemConfig } from '@deephaven/golden-layout';
|
|
5
4
|
import { type ClosedPanels } from './PanelManager';
|
|
6
|
-
import { type PanelDehydrateFunction, type PanelHydrateFunction } from './DashboardPlugin';
|
|
5
|
+
import { type PanelDehydrateFunction, type PanelHydrateFunction, type DehydratedPanelProps } from './DashboardPlugin';
|
|
7
6
|
export type DashboardLayoutConfig = ItemConfig[];
|
|
8
7
|
type DashboardData = {
|
|
9
8
|
closed?: ClosedPanels;
|
|
10
9
|
};
|
|
11
|
-
|
|
10
|
+
type DashboardLayoutProps = React.PropsWithChildren<{
|
|
12
11
|
id: string;
|
|
13
12
|
hydrate?: PanelHydrateFunction;
|
|
14
13
|
dehydrate?: PanelDehydrateFunction;
|
|
@@ -17,38 +16,13 @@ interface DashboardLayoutProps {
|
|
|
17
16
|
onLayoutChange?: (dehydratedLayout: DashboardLayoutConfig) => void;
|
|
18
17
|
onLayoutInitialized?: () => void;
|
|
19
18
|
data?: DashboardData;
|
|
20
|
-
children?: React.ReactNode | React.ReactNode[];
|
|
21
19
|
emptyDashboard?: React.ReactNode;
|
|
22
20
|
/** Component to wrap each panel with */
|
|
23
|
-
panelWrapper?: ComponentType
|
|
24
|
-
}
|
|
21
|
+
panelWrapper?: ComponentType<React.PropsWithChildren<DehydratedPanelProps>>;
|
|
22
|
+
}>;
|
|
25
23
|
/**
|
|
26
24
|
* DashboardLayout component. Handles hydrating, dehydrating components, listening for dragging panels.
|
|
27
25
|
*/
|
|
28
26
|
export declare function DashboardLayout({ id, children, emptyDashboard, layout, layoutConfig, onLayoutChange, onLayoutInitialized, hydrate, dehydrate, panelWrapper, }: DashboardLayoutProps): JSX.Element;
|
|
29
|
-
export declare namespace DashboardLayout {
|
|
30
|
-
var propTypes: {
|
|
31
|
-
id: PropTypes.Validator<string>;
|
|
32
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
33
|
-
data: PropTypes.Requireable<PropTypes.InferProps<{}>>;
|
|
34
|
-
emptyDashboard: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
35
|
-
layout: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
36
|
-
registerComponent: PropTypes.Requireable<(...args: any[]) => any>;
|
|
37
|
-
root: PropTypes.Requireable<PropTypes.InferProps<{
|
|
38
|
-
addChild: PropTypes.Requireable<(...args: any[]) => any>;
|
|
39
|
-
}>>;
|
|
40
|
-
on: PropTypes.Requireable<(...args: any[]) => any>;
|
|
41
|
-
off: PropTypes.Requireable<(...args: any[]) => any>;
|
|
42
|
-
eventHub: PropTypes.Requireable<PropTypes.InferProps<{
|
|
43
|
-
on: PropTypes.Requireable<(...args: any[]) => any>;
|
|
44
|
-
off: PropTypes.Requireable<(...args: any[]) => any>;
|
|
45
|
-
emit: PropTypes.Requireable<(...args: any[]) => any>;
|
|
46
|
-
}>>;
|
|
47
|
-
}>>>;
|
|
48
|
-
layoutConfig: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
|
|
49
|
-
onLayoutChange: PropTypes.Requireable<(...args: any[]) => any>;
|
|
50
|
-
onLayoutInitialized: PropTypes.Requireable<(...args: any[]) => any>;
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
27
|
export default DashboardLayout;
|
|
54
28
|
//# sourceMappingURL=DashboardLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardLayout.d.ts","sourceRoot":"","sources":["../src/DashboardLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,aAAa,EAMnB,MAAM,OAAO,CAAC;AACf,OAAO,
|
|
1
|
+
{"version":3,"file":"DashboardLayout.d.ts","sourceRoot":"","sources":["../src/DashboardLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,aAAa,EAMnB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAEV,UAAU,EAGX,MAAM,0BAA0B,CAAC;AAMlC,OAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAWjE,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAEzB,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAI3B,MAAM,MAAM,qBAAqB,GAAG,UAAU,EAAE,CAAC;AAejD,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,KAAK,oBAAoB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAClD,EAAE,EAAE,MAAM,CAAC;IAGX,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACnE,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEjC,wCAAwC;IACxC,YAAY,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC;CAC7E,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,EAAE,EACF,QAAQ,EACR,cAA+C,EAC/C,MAAM,EACN,YAAoC,EACpC,cAAiC,EACjC,mBAAsC,EACtC,OAAwB,EACxB,SAA4B,EAC5B,YAAoC,GACrC,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CA8RpC;AAED,eAAe,eAAe,CAAC"}
|
package/dist/DashboardLayout.js
CHANGED
|
@@ -4,23 +4,20 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
4
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
5
|
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); }
|
|
6
6
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
7
|
-
import PropTypes from 'prop-types';
|
|
8
7
|
import Log from '@deephaven/log';
|
|
9
8
|
import { usePrevious, useThrottledCallback } from '@deephaven/react-hooks';
|
|
10
9
|
import { ErrorBoundary } from '@deephaven/components';
|
|
11
10
|
import { useDispatch, useSelector } from 'react-redux';
|
|
12
11
|
import PanelManager from "./PanelManager.js";
|
|
13
12
|
import PanelErrorBoundary from "./PanelErrorBoundary.js";
|
|
14
|
-
import LayoutUtils from "./layout/LayoutUtils.js";
|
|
13
|
+
import LayoutUtils, { isReactComponentConfig } from "./layout/LayoutUtils.js";
|
|
15
14
|
import { canHaveRef, dehydrate as dehydrateDefault, hydrate as hydrateDefault } from "./DashboardUtils.js";
|
|
16
15
|
import PanelEvent from "./PanelEvent.js";
|
|
17
|
-
import {
|
|
16
|
+
import { useListener } from "./layout/index.js";
|
|
18
17
|
import { getDashboardData, updateDashboardData } from "./redux/index.js";
|
|
19
18
|
import DashboardPanelWrapper from "./DashboardPanelWrapper.js";
|
|
20
19
|
import { PanelIdContext } from "./usePanelId.js";
|
|
21
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
23
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
21
|
var log = Log.module('DashboardLayout');
|
|
25
22
|
var EMPTY_OBJECT = Object.freeze({});
|
|
26
23
|
var DEFAULT_LAYOUT_CONFIG = [];
|
|
@@ -159,7 +156,7 @@ export function DashboardLayout(_ref) {
|
|
|
159
156
|
}, [layout.eventHub]);
|
|
160
157
|
var handleComponentCreated = useCallback(item => {
|
|
161
158
|
log.debug2('handleComponentCreated', item);
|
|
162
|
-
if (item == null || item.config == null || item.config.component == null || item.element == null) {
|
|
159
|
+
if (item == null || item.config == null || !isReactComponentConfig(item.config) || item.config.component == null || item.element == null) {
|
|
163
160
|
return;
|
|
164
161
|
}
|
|
165
162
|
var cssComponent = item.config.component.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
@@ -215,15 +212,5 @@ export function DashboardLayout(_ref) {
|
|
|
215
212
|
}) : null)]
|
|
216
213
|
});
|
|
217
214
|
}
|
|
218
|
-
DashboardLayout.propTypes = {
|
|
219
|
-
id: PropTypes.string.isRequired,
|
|
220
|
-
children: PropTypes.node,
|
|
221
|
-
data: PropTypes.shape({}),
|
|
222
|
-
emptyDashboard: PropTypes.node,
|
|
223
|
-
layout: GLPropTypes.Layout.isRequired,
|
|
224
|
-
layoutConfig: PropTypes.arrayOf(PropTypes.shape({})),
|
|
225
|
-
onLayoutChange: PropTypes.func,
|
|
226
|
-
onLayoutInitialized: PropTypes.func
|
|
227
|
-
};
|
|
228
215
|
export default DashboardLayout;
|
|
229
216
|
//# sourceMappingURL=DashboardLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardLayout.js","names":["React","useCallback","useEffect","useMemo","useState","PropTypes","Log","usePrevious","useThrottledCallback","ErrorBoundary","useDispatch","useSelector","PanelManager","PanelErrorBoundary","LayoutUtils","canHaveRef","dehydrate","dehydrateDefault","hydrate","hydrateDefault","PanelEvent","GLPropTypes","useListener","getDashboardData","updateDashboardData","DashboardPanelWrapper","PanelIdContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","EMPTY_OBJECT","Object","freeze","DEFAULT_LAYOUT_CONFIG","DEFAULT_CALLBACK","undefined","STATE_CHANGE_THROTTLE_MS","FALLBACK_CALLBACK","props","DashboardLayout","_ref","_useSelector","_closed","id","children","emptyDashboard","layout","layoutConfig","onLayoutChange","onLayoutInitialized","panelWrapper","dispatch","data","state","isDashboardEmpty","setIsDashboardEmpty","isItemDragging","setIsItemDragging","lastConfig","setLastConfig","initialClosedPanels","closed","layoutChildren","setLayoutChildren","getReactChildren","hydrateMap","Map","dehydrateMap","registerComponent","name","componentType","_componentType$displa","componentHydrate","arguments","length","componentDehydrate","debug2","wrappedComponent","ref","CType","PanelWrapperType","hasRef","glContainer","glEventHub","panelId","getIdFromContainer","Provider","value","_objectSpread","displayName","concat","cleanup","forwardRef","set","hydrateComponent","_hydrateMap$get","get","dehydrateComponent","config","_dehydrateMap$get","panelManager","_ref2","openedMap","throttledProcessDehydratedLayoutConfig","dehydratedLayoutConfig","hasChanged","isEqual","debug","root","contentItems","flushOnUnmount","flush","handleLayoutStateChanged","glConfig","toConfig","contentConfig","content","dehydrateLayoutConfig","handleLayoutItemPickedUp","component","componentId","eventHub","emit","DRAGGING","handleLayoutItemDropped","DROPPED","handleComponentCreated","item","element","cssComponent","replace","toLowerCase","cssClass","addClass","handleReactChildrenChange","TITLE_CHANGED","previousLayoutConfig","loadNewConfig","hydrateLayoutConfig","remove","i","addChild","Children","map","child","fallback","cloneElement","propTypes","string","isRequired","node","shape","Layout","arrayOf","func"],"sources":["../src/DashboardLayout.tsx"],"sourcesContent":["import React, {\n type ComponentType,\n type ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport type {\n Container,\n ItemConfig,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { usePrevious, useThrottledCallback } from '@deephaven/react-hooks';\nimport { ErrorBoundary } from '@deephaven/components';\nimport { type RootState } from '@deephaven/redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PanelManager, { type ClosedPanels } from './PanelManager';\nimport PanelErrorBoundary from './PanelErrorBoundary';\nimport LayoutUtils from './layout/LayoutUtils';\nimport {\n canHaveRef,\n dehydrate as dehydrateDefault,\n hydrate as hydrateDefault,\n} from './DashboardUtils';\nimport PanelEvent from './PanelEvent';\nimport { GLPropTypes, useListener } from './layout';\nimport { getDashboardData, updateDashboardData } from './redux';\nimport {\n type PanelComponentType,\n type PanelDehydrateFunction,\n type PanelHydrateFunction,\n type PanelProps,\n} from './DashboardPlugin';\nimport DashboardPanelWrapper from './DashboardPanelWrapper';\nimport { PanelIdContext } from './usePanelId';\n\nexport type DashboardLayoutConfig = ItemConfig[];\n\nconst log = Log.module('DashboardLayout');\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst DEFAULT_LAYOUT_CONFIG: DashboardLayoutConfig = [];\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst STATE_CHANGE_THROTTLE_MS = 1000;\n\n// If a component isn't registered, just pass through the props so they are saved if a plugin is loaded later\nconst FALLBACK_CALLBACK = (props: unknown): unknown => props;\n\ntype DashboardData = {\n closed?: ClosedPanels;\n};\n\ninterface DashboardLayoutProps {\n id: string;\n\n // Default hydrate/dehydration functions\n hydrate?: PanelHydrateFunction;\n dehydrate?: PanelDehydrateFunction;\n layout: GoldenLayout;\n layoutConfig?: DashboardLayoutConfig;\n onLayoutChange?: (dehydratedLayout: DashboardLayoutConfig) => void;\n onLayoutInitialized?: () => void;\n data?: DashboardData;\n children?: React.ReactNode | React.ReactNode[];\n emptyDashboard?: React.ReactNode;\n\n /** Component to wrap each panel with */\n panelWrapper?: ComponentType;\n}\n\n/**\n * DashboardLayout component. Handles hydrating, dehydrating components, listening for dragging panels.\n */\nexport function DashboardLayout({\n id,\n children,\n emptyDashboard = <div>Dashboard is empty.</div>,\n layout,\n layoutConfig = DEFAULT_LAYOUT_CONFIG,\n onLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n hydrate = hydrateDefault,\n dehydrate = dehydrateDefault,\n panelWrapper = DashboardPanelWrapper,\n}: DashboardLayoutProps): JSX.Element {\n const dispatch = useDispatch();\n const data =\n useSelector<RootState>(state => getDashboardData(state, id)) ??\n EMPTY_OBJECT;\n\n const [isDashboardEmpty, setIsDashboardEmpty] = useState(false);\n const [isItemDragging, setIsItemDragging] = useState(false);\n const [lastConfig, setLastConfig] = useState<DashboardLayoutConfig>();\n const [initialClosedPanels] = useState<ReactComponentConfig[] | undefined>(\n (data as DashboardData)?.closed ?? []\n );\n const [layoutChildren, setLayoutChildren] = useState(\n layout.getReactChildren()\n );\n\n const hydrateMap = useMemo(() => new Map(), []);\n const dehydrateMap = useMemo(() => new Map(), []);\n const registerComponent = useCallback(\n (\n name: string,\n componentType: PanelComponentType,\n componentHydrate = hydrate,\n componentDehydrate = dehydrate\n ) => {\n log.debug2(\n 'registerComponent',\n name,\n componentType,\n componentHydrate,\n componentDehydrate\n );\n\n function wrappedComponent(\n props: PanelProps,\n ref: React.Ref<unknown>\n ): JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const CType = componentType as any;\n const PanelWrapperType = panelWrapper;\n\n /**\n * The ref is used to detect changes to class component state so we\n * can track changes to panelState. We should opt for more explicit\n * state changes in the future and in functional components.\n */\n const hasRef = canHaveRef(CType);\n\n // Props supplied by GoldenLayout\n const { glContainer, glEventHub } = props;\n const panelId = LayoutUtils.getIdFromContainer(glContainer);\n return (\n <PanelErrorBoundary glContainer={glContainer} glEventHub={glEventHub}>\n <PanelIdContext.Provider value={panelId as string | null}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <PanelWrapperType {...props}>\n {hasRef ? (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <CType {...props} ref={ref} />\n ) : (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <CType {...props} />\n )}\n </PanelWrapperType>\n </PanelIdContext.Provider>\n </PanelErrorBoundary>\n );\n }\n\n wrappedComponent.displayName = `DashboardWrapper(${\n componentType.displayName ?? name\n })`;\n\n const cleanup = layout.registerComponent(\n name,\n React.forwardRef(wrappedComponent)\n );\n hydrateMap.set(name, componentHydrate);\n dehydrateMap.set(name, componentDehydrate);\n return cleanup;\n },\n [hydrate, dehydrate, hydrateMap, dehydrateMap, layout, panelWrapper]\n );\n const hydrateComponent = useCallback(\n (name, props) => (hydrateMap.get(name) ?? FALLBACK_CALLBACK)(props, id),\n [hydrateMap, id]\n );\n const dehydrateComponent = useCallback(\n (name, config) => (dehydrateMap.get(name) ?? FALLBACK_CALLBACK)(config, id),\n [dehydrateMap, id]\n );\n const panelManager = useMemo(\n () =>\n new PanelManager(\n layout,\n hydrateComponent,\n dehydrateComponent,\n new Map(),\n initialClosedPanels,\n ({ closed, openedMap }) => {\n dispatch(updateDashboardData(id, { closed, openedMap }));\n }\n ),\n [\n dehydrateComponent,\n dispatch,\n hydrateComponent,\n id,\n initialClosedPanels,\n layout,\n ]\n );\n\n // Throttle the calls so that we don't flood comparing these layouts\n const throttledProcessDehydratedLayoutConfig = useThrottledCallback(\n (dehydratedLayoutConfig: DashboardLayoutConfig) => {\n const hasChanged =\n lastConfig == null ||\n !LayoutUtils.isEqual(lastConfig, dehydratedLayoutConfig);\n\n log.debug('handleLayoutStateChanged', hasChanged, dehydratedLayoutConfig);\n\n if (hasChanged) {\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n\n setLastConfig(dehydratedLayoutConfig);\n\n onLayoutChange(dehydratedLayoutConfig);\n\n setLayoutChildren(layout.getReactChildren());\n }\n },\n STATE_CHANGE_THROTTLE_MS,\n { flushOnUnmount: true }\n );\n\n useEffect(\n () => () => throttledProcessDehydratedLayoutConfig.flush(),\n [throttledProcessDehydratedLayoutConfig]\n );\n\n const handleLayoutStateChanged = useCallback(() => {\n // we don't want to emit stateChanges that happen during item drags or else\n // we risk the last saved state being one without that panel in the layout entirely\n if (isItemDragging) return;\n\n const glConfig = layout.toConfig();\n const contentConfig = glConfig.content;\n const dehydratedLayoutConfig = LayoutUtils.dehydrateLayoutConfig(\n contentConfig,\n dehydrateComponent\n );\n throttledProcessDehydratedLayoutConfig(dehydratedLayoutConfig);\n }, [\n dehydrateComponent,\n isItemDragging,\n layout,\n throttledProcessDehydratedLayoutConfig,\n ]);\n\n const handleLayoutItemPickedUp = useCallback(\n (component: Container) => {\n const componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DRAGGING, componentId);\n setIsItemDragging(true);\n },\n [layout.eventHub]\n );\n\n const handleLayoutItemDropped = useCallback(\n (component: Container) => {\n const componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DROPPED, componentId);\n setIsItemDragging(false);\n },\n [layout.eventHub]\n );\n\n const handleComponentCreated = useCallback(item => {\n log.debug2('handleComponentCreated', item);\n\n if (\n item == null ||\n item.config == null ||\n item.config.component == null ||\n item.element == null\n ) {\n return;\n }\n\n const cssComponent = item.config.component\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n const cssClass = `${cssComponent}-component`;\n item.element.addClass(cssClass);\n }, []);\n\n const handleReactChildrenChange = useCallback(() => {\n setLayoutChildren(layout.getReactChildren());\n }, [layout]);\n\n useListener(layout, 'stateChanged', handleLayoutStateChanged);\n useListener(layout, 'itemPickedUp', handleLayoutItemPickedUp);\n useListener(layout, 'itemDropped', handleLayoutItemDropped);\n useListener(layout, 'componentCreated', handleComponentCreated);\n useListener(\n layout.eventHub,\n PanelEvent.TITLE_CHANGED,\n handleLayoutStateChanged\n );\n useListener(layout, 'reactChildrenChanged', handleReactChildrenChange);\n\n const previousLayoutConfig = usePrevious(layoutConfig);\n useEffect(\n function loadNewConfig() {\n if (\n previousLayoutConfig !== layoutConfig &&\n layoutConfig !== lastConfig\n ) {\n log.debug('Setting new layout content...');\n const content = LayoutUtils.hydrateLayoutConfig(\n layoutConfig,\n hydrateComponent\n );\n // Remove the old layout before add the new one\n while (layout.root.contentItems.length > 0) {\n layout.root.contentItems[0].remove();\n }\n\n // Add the new content. It is usally just one item from the root\n for (let i = 0; i < content.length; i += 1) {\n layout.root.addChild(content[i]);\n }\n\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n }\n },\n [\n hydrateComponent,\n layout,\n layoutConfig,\n lastConfig,\n panelManager,\n previousLayoutConfig,\n ]\n );\n\n // This should be the last hook called in this component\n // Ensures it runs after any other effects on mount\n // Fire only once after the layout is mounted\n // This should ensure DashboardPlugins have been mounted\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onLayoutInitialized(), []);\n\n return (\n <>\n {isDashboardEmpty && emptyDashboard}\n {layoutChildren}\n {React.Children.map(children, child =>\n child != null ? (\n // Have fallback be an empty array so that we don't show the error message over entire app\n // Look into using toast message in the future\n <ErrorBoundary fallback={[]}>\n {React.cloneElement(child as ReactElement, {\n id,\n layout,\n panelManager,\n registerComponent,\n })}\n </ErrorBoundary>\n ) : null\n )}\n </>\n );\n}\n\nDashboardLayout.propTypes = {\n id: PropTypes.string.isRequired,\n children: PropTypes.node,\n data: PropTypes.shape({}),\n emptyDashboard: PropTypes.node,\n layout: GLPropTypes.Layout.isRequired,\n layoutConfig: PropTypes.arrayOf(PropTypes.shape({})),\n onLayoutChange: PropTypes.func,\n onLayoutInitialized: PropTypes.func,\n};\n\nexport default DashboardLayout;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DashboardLayout.js","names":["React","useCallback","useEffect","useMemo","useState","Log","usePrevious","useThrottledCallback","ErrorBoundary","useDispatch","useSelector","PanelManager","PanelErrorBoundary","LayoutUtils","isReactComponentConfig","canHaveRef","dehydrate","dehydrateDefault","hydrate","hydrateDefault","PanelEvent","useListener","getDashboardData","updateDashboardData","DashboardPanelWrapper","PanelIdContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","EMPTY_OBJECT","Object","freeze","DEFAULT_LAYOUT_CONFIG","DEFAULT_CALLBACK","undefined","STATE_CHANGE_THROTTLE_MS","FALLBACK_CALLBACK","props","DashboardLayout","_ref","_useSelector","_closed","id","children","emptyDashboard","layout","layoutConfig","onLayoutChange","onLayoutInitialized","panelWrapper","dispatch","data","state","isDashboardEmpty","setIsDashboardEmpty","isItemDragging","setIsItemDragging","lastConfig","setLastConfig","initialClosedPanels","closed","layoutChildren","setLayoutChildren","getReactChildren","hydrateMap","Map","dehydrateMap","registerComponent","name","componentType","_componentType$displa","componentHydrate","arguments","length","componentDehydrate","debug2","wrappedComponent","ref","CType","PanelWrapperType","hasRef","glContainer","glEventHub","panelId","getIdFromContainer","Provider","value","_objectSpread","displayName","concat","cleanup","forwardRef","set","hydrateComponent","_hydrateMap$get","get","dehydrateComponent","config","_dehydrateMap$get","panelManager","_ref2","openedMap","throttledProcessDehydratedLayoutConfig","dehydratedLayoutConfig","hasChanged","isEqual","debug","root","contentItems","flushOnUnmount","flush","handleLayoutStateChanged","glConfig","toConfig","contentConfig","content","dehydrateLayoutConfig","handleLayoutItemPickedUp","component","componentId","eventHub","emit","DRAGGING","handleLayoutItemDropped","DROPPED","handleComponentCreated","item","element","cssComponent","replace","toLowerCase","cssClass","addClass","handleReactChildrenChange","TITLE_CHANGED","previousLayoutConfig","loadNewConfig","hydrateLayoutConfig","remove","i","addChild","Children","map","child","fallback","cloneElement"],"sources":["../src/DashboardLayout.tsx"],"sourcesContent":["import React, {\n type ComponentType,\n type ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport type {\n Container,\n ItemConfig,\n ReactComponentConfig,\n AbstractContentItem,\n} from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport { usePrevious, useThrottledCallback } from '@deephaven/react-hooks';\nimport { ErrorBoundary } from '@deephaven/components';\nimport { type RootState } from '@deephaven/redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PanelManager, { type ClosedPanels } from './PanelManager';\nimport PanelErrorBoundary from './PanelErrorBoundary';\nimport LayoutUtils, { isReactComponentConfig } from './layout/LayoutUtils';\nimport {\n canHaveRef,\n dehydrate as dehydrateDefault,\n hydrate as hydrateDefault,\n} from './DashboardUtils';\nimport PanelEvent from './PanelEvent';\nimport { useListener } from './layout';\nimport { getDashboardData, updateDashboardData } from './redux';\nimport {\n type PanelConfig,\n type PanelComponentType,\n type PanelDehydrateFunction,\n type PanelHydrateFunction,\n type PanelProps,\n type DehydratedPanelProps,\n} from './DashboardPlugin';\nimport DashboardPanelWrapper from './DashboardPanelWrapper';\nimport { PanelIdContext } from './usePanelId';\n\nexport type DashboardLayoutConfig = ItemConfig[];\n\nconst log = Log.module('DashboardLayout');\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst DEFAULT_LAYOUT_CONFIG: DashboardLayoutConfig = [];\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst STATE_CHANGE_THROTTLE_MS = 1000;\n\n// If a component isn't registered, just pass through the props so they are saved if a plugin is loaded later\nconst FALLBACK_CALLBACK = <P,>(props: P): P => props;\n\ntype DashboardData = {\n closed?: ClosedPanels;\n};\n\ntype DashboardLayoutProps = React.PropsWithChildren<{\n id: string;\n\n // Default hydrate/dehydration functions\n hydrate?: PanelHydrateFunction;\n dehydrate?: PanelDehydrateFunction;\n layout: GoldenLayout;\n layoutConfig?: DashboardLayoutConfig;\n onLayoutChange?: (dehydratedLayout: DashboardLayoutConfig) => void;\n onLayoutInitialized?: () => void;\n data?: DashboardData;\n emptyDashboard?: React.ReactNode;\n\n /** Component to wrap each panel with */\n panelWrapper?: ComponentType<React.PropsWithChildren<DehydratedPanelProps>>;\n}>;\n\n/**\n * DashboardLayout component. Handles hydrating, dehydrating components, listening for dragging panels.\n */\nexport function DashboardLayout({\n id,\n children,\n emptyDashboard = <div>Dashboard is empty.</div>,\n layout,\n layoutConfig = DEFAULT_LAYOUT_CONFIG,\n onLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n hydrate = hydrateDefault,\n dehydrate = dehydrateDefault,\n panelWrapper = DashboardPanelWrapper,\n}: DashboardLayoutProps): JSX.Element {\n const dispatch = useDispatch();\n const data =\n useSelector<RootState>(state => getDashboardData(state, id)) ??\n EMPTY_OBJECT;\n\n const [isDashboardEmpty, setIsDashboardEmpty] = useState(false);\n const [isItemDragging, setIsItemDragging] = useState(false);\n const [lastConfig, setLastConfig] = useState<DashboardLayoutConfig>();\n const [initialClosedPanels] = useState<ReactComponentConfig[] | undefined>(\n (data as DashboardData)?.closed ?? []\n );\n const [layoutChildren, setLayoutChildren] = useState(\n layout.getReactChildren()\n );\n\n const hydrateMap = useMemo(() => new Map<string, PanelHydrateFunction>(), []);\n const dehydrateMap = useMemo(\n () => new Map<string, PanelDehydrateFunction>(),\n []\n );\n const registerComponent = useCallback(\n (\n name: string,\n componentType: PanelComponentType,\n componentHydrate = hydrate,\n componentDehydrate = dehydrate\n ) => {\n log.debug2(\n 'registerComponent',\n name,\n componentType,\n componentHydrate,\n componentDehydrate\n );\n\n function wrappedComponent(\n props: PanelProps,\n ref: React.Ref<unknown>\n ): JSX.Element {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const CType = componentType as any;\n const PanelWrapperType = panelWrapper;\n\n /**\n * The ref is used to detect changes to class component state so we\n * can track changes to panelState. We should opt for more explicit\n * state changes in the future and in functional components.\n */\n const hasRef = canHaveRef(CType);\n\n // Props supplied by GoldenLayout\n const { glContainer, glEventHub } = props;\n const panelId = LayoutUtils.getIdFromContainer(glContainer);\n return (\n <PanelErrorBoundary glContainer={glContainer} glEventHub={glEventHub}>\n <PanelIdContext.Provider value={panelId as string | null}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <PanelWrapperType {...props}>\n {hasRef ? (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <CType {...props} ref={ref} />\n ) : (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <CType {...props} />\n )}\n </PanelWrapperType>\n </PanelIdContext.Provider>\n </PanelErrorBoundary>\n );\n }\n\n wrappedComponent.displayName = `DashboardWrapper(${\n componentType.displayName ?? name\n })`;\n\n const cleanup = layout.registerComponent(\n name,\n React.forwardRef(wrappedComponent)\n );\n hydrateMap.set(name, componentHydrate);\n dehydrateMap.set(name, componentDehydrate);\n return cleanup;\n },\n [hydrate, dehydrate, hydrateMap, dehydrateMap, layout, panelWrapper]\n );\n const hydrateComponent = useCallback(\n (name: string, props: DehydratedPanelProps) =>\n (hydrateMap.get(name) ?? (FALLBACK_CALLBACK as PanelHydrateFunction))(\n props,\n id\n ),\n [hydrateMap, id]\n );\n const dehydrateComponent = useCallback(\n (name: string, config: PanelConfig) =>\n (dehydrateMap.get(name) ?? (FALLBACK_CALLBACK as PanelDehydrateFunction))(\n config,\n id\n ),\n [dehydrateMap, id]\n );\n const panelManager = useMemo(\n () =>\n new PanelManager(\n layout,\n hydrateComponent,\n dehydrateComponent,\n new Map(),\n initialClosedPanels,\n ({ closed, openedMap }) => {\n dispatch(updateDashboardData(id, { closed, openedMap }));\n }\n ),\n [\n dehydrateComponent,\n dispatch,\n hydrateComponent,\n id,\n initialClosedPanels,\n layout,\n ]\n );\n\n // Throttle the calls so that we don't flood comparing these layouts\n const throttledProcessDehydratedLayoutConfig = useThrottledCallback(\n (dehydratedLayoutConfig: DashboardLayoutConfig) => {\n const hasChanged =\n lastConfig == null ||\n !LayoutUtils.isEqual(lastConfig, dehydratedLayoutConfig);\n\n log.debug('handleLayoutStateChanged', hasChanged, dehydratedLayoutConfig);\n\n if (hasChanged) {\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n\n setLastConfig(dehydratedLayoutConfig);\n\n onLayoutChange(dehydratedLayoutConfig);\n\n setLayoutChildren(layout.getReactChildren());\n }\n },\n STATE_CHANGE_THROTTLE_MS,\n { flushOnUnmount: true }\n );\n\n useEffect(\n () => () => throttledProcessDehydratedLayoutConfig.flush(),\n [throttledProcessDehydratedLayoutConfig]\n );\n\n const handleLayoutStateChanged = useCallback(() => {\n // we don't want to emit stateChanges that happen during item drags or else\n // we risk the last saved state being one without that panel in the layout entirely\n if (isItemDragging) return;\n\n const glConfig = layout.toConfig();\n const contentConfig = glConfig.content;\n const dehydratedLayoutConfig = LayoutUtils.dehydrateLayoutConfig(\n contentConfig,\n dehydrateComponent\n );\n throttledProcessDehydratedLayoutConfig(dehydratedLayoutConfig);\n }, [\n dehydrateComponent,\n isItemDragging,\n layout,\n throttledProcessDehydratedLayoutConfig,\n ]);\n\n const handleLayoutItemPickedUp = useCallback(\n (component: Container) => {\n const componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DRAGGING, componentId);\n setIsItemDragging(true);\n },\n [layout.eventHub]\n );\n\n const handleLayoutItemDropped = useCallback(\n (component: Container) => {\n const componentId = LayoutUtils.getIdFromContainer(component);\n layout.eventHub.emit(PanelEvent.DROPPED, componentId);\n setIsItemDragging(false);\n },\n [layout.eventHub]\n );\n\n const handleComponentCreated = useCallback((item: AbstractContentItem) => {\n log.debug2('handleComponentCreated', item);\n\n if (\n item == null ||\n item.config == null ||\n !isReactComponentConfig(item.config) ||\n item.config.component == null ||\n item.element == null\n ) {\n return;\n }\n\n const cssComponent = item.config.component\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .toLowerCase();\n const cssClass = `${cssComponent}-component`;\n item.element.addClass(cssClass);\n }, []);\n\n const handleReactChildrenChange = useCallback(() => {\n setLayoutChildren(layout.getReactChildren());\n }, [layout]);\n\n useListener(layout, 'stateChanged', handleLayoutStateChanged);\n useListener(layout, 'itemPickedUp', handleLayoutItemPickedUp);\n useListener(layout, 'itemDropped', handleLayoutItemDropped);\n useListener(layout, 'componentCreated', handleComponentCreated);\n useListener(\n layout.eventHub,\n PanelEvent.TITLE_CHANGED,\n handleLayoutStateChanged\n );\n useListener(layout, 'reactChildrenChanged', handleReactChildrenChange);\n\n const previousLayoutConfig = usePrevious(layoutConfig);\n useEffect(\n function loadNewConfig() {\n if (\n previousLayoutConfig !== layoutConfig &&\n layoutConfig !== lastConfig\n ) {\n log.debug('Setting new layout content...');\n const content = LayoutUtils.hydrateLayoutConfig(\n layoutConfig,\n hydrateComponent\n );\n // Remove the old layout before add the new one\n while (layout.root.contentItems.length > 0) {\n layout.root.contentItems[0].remove();\n }\n\n // Add the new content. It is usally just one item from the root\n for (let i = 0; i < content.length; i += 1) {\n layout.root.addChild(content[i]);\n }\n\n setIsDashboardEmpty(layout.root.contentItems.length === 0);\n }\n },\n [\n hydrateComponent,\n layout,\n layoutConfig,\n lastConfig,\n panelManager,\n previousLayoutConfig,\n ]\n );\n\n // This should be the last hook called in this component\n // Ensures it runs after any other effects on mount\n // Fire only once after the layout is mounted\n // This should ensure DashboardPlugins have been mounted\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => onLayoutInitialized(), []);\n\n return (\n <>\n {isDashboardEmpty && emptyDashboard}\n {layoutChildren}\n {React.Children.map(children, child =>\n child != null ? (\n // Have fallback be an empty array so that we don't show the error message over entire app\n // Look into using toast message in the future\n <ErrorBoundary fallback={[]}>\n {React.cloneElement(child as ReactElement, {\n id,\n layout,\n panelManager,\n registerComponent,\n })}\n </ErrorBoundary>\n ) : null\n )}\n </>\n );\n}\n\nexport default DashboardLayout;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAGVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,QAAQ,QACH,OAAO;AAQd,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,WAAW,EAAEC,oBAAoB,QAAQ,wBAAwB;AAC1E,SAASC,aAAa,QAAQ,uBAAuB;AAErD,SAASC,WAAW,EAAEC,WAAW,QAAQ,aAAa;AAAC,OAChDC,YAAY;AAAA,OACZC,kBAAkB;AAAA,OAClBC,WAAW,IAAIC,sBAAsB;AAAA,SAE1CC,UAAU,EACVC,SAAS,IAAIC,gBAAgB,EAC7BC,OAAO,IAAIC,cAAc;AAAA,OAEpBC,UAAU;AAAA,SACRC,WAAW;AAAA,SACXC,gBAAgB,EAAEC,mBAAmB;AAAA,OASvCC,qBAAqB;AAAA,SACnBC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAIvB,IAAMC,GAAG,GAAG3B,GAAG,CAAC4B,MAAM,CAAC,iBAAiB,CAAC;AAEzC,IAAMC,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEtC,IAAMC,qBAA4C,GAAG,EAAE;AAEvD,IAAMC,gBAAgB,GAAGA,CAAA,KAAYC,SAAS;AAE9C,IAAMC,wBAAwB,GAAG,IAAI;;AAErC;AACA,IAAMC,iBAAiB,GAAQC,KAAQ,IAAQA,KAAK;AAuBpD;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAAC,IAAA,EAWO;EAAA,IAAAC,YAAA,EAAAC,OAAA;EAAA,IAXN;IAC9BC,EAAE;IACFC,QAAQ;IACRC,cAAc,gBAAGtB,IAAA;MAAAqB,QAAA,EAAK;IAAmB,CAAK,CAAC;IAC/CE,MAAM;IACNC,YAAY,GAAGd,qBAAqB;IACpCe,cAAc,GAAGd,gBAAgB;IACjCe,mBAAmB,GAAGf,gBAAgB;IACtCpB,OAAO,GAAGC,cAAc;IACxBH,SAAS,GAAGC,gBAAgB;IAC5BqC,YAAY,GAAG9B;EACK,CAAC,GAAAoB,IAAA;EACrB,IAAMW,QAAQ,GAAG9C,WAAW,CAAC,CAAC;EAC9B,IAAM+C,IAAI,IAAAX,YAAA,GACRnC,WAAW,CAAY+C,KAAK,IAAInC,gBAAgB,CAACmC,KAAK,EAAEV,EAAE,CAAC,CAAC,cAAAF,YAAA,cAAAA,YAAA,GAC5DX,YAAY;EAEd,IAAM,CAACwB,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGvD,QAAQ,CAAC,KAAK,CAAC;EAC/D,IAAM,CAACwD,cAAc,EAAEC,iBAAiB,CAAC,GAAGzD,QAAQ,CAAC,KAAK,CAAC;EAC3D,IAAM,CAAC0D,UAAU,EAAEC,aAAa,CAAC,GAAG3D,QAAQ,CAAwB,CAAC;EACrE,IAAM,CAAC4D,mBAAmB,CAAC,GAAG5D,QAAQ,EAAA0C,OAAA,GACnCU,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAoBS,MAAM,cAAAnB,OAAA,cAAAA,OAAA,GAAI,EACrC,CAAC;EACD,IAAM,CAACoB,cAAc,EAAEC,iBAAiB,CAAC,GAAG/D,QAAQ,CAClD8C,MAAM,CAACkB,gBAAgB,CAAC,CAC1B,CAAC;EAED,IAAMC,UAAU,GAAGlE,OAAO,CAAC,MAAM,IAAImE,GAAG,CAA+B,CAAC,EAAE,EAAE,CAAC;EAC7E,IAAMC,YAAY,GAAGpE,OAAO,CAC1B,MAAM,IAAImE,GAAG,CAAiC,CAAC,EAC/C,EACF,CAAC;EACD,IAAME,iBAAiB,GAAGvE,WAAW,CACnC,UACEwE,IAAY,EACZC,aAAiC,EAG9B;IAAA,IAAAC,qBAAA;IAAA,IAFHC,gBAAgB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAtC,SAAA,GAAAsC,SAAA,MAAG3D,OAAO;IAAA,IAC1B6D,kBAAkB,GAAAF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAtC,SAAA,GAAAsC,SAAA,MAAG7D,SAAS;IAE9BgB,GAAG,CAACgD,MAAM,CACR,mBAAmB,EACnBP,IAAI,EACJC,aAAa,EACbE,gBAAgB,EAChBG,kBACF,CAAC;IAED,SAASE,gBAAgBA,CACvBvC,KAAiB,EACjBwC,GAAuB,EACV;MACb;MACA,IAAMC,KAAK,GAAGT,aAAoB;MAClC,IAAMU,gBAAgB,GAAG9B,YAAY;;MAErC;AACR;AACA;AACA;AACA;MACQ,IAAM+B,MAAM,GAAGtE,UAAU,CAACoE,KAAK,CAAC;;MAEhC;MACA,IAAM;QAAEG,WAAW;QAAEC;MAAW,CAAC,GAAG7C,KAAK;MACzC,IAAM8C,OAAO,GAAG3E,WAAW,CAAC4E,kBAAkB,CAACH,WAAW,CAAC;MAC3D,oBACE3D,IAAA,CAACf,kBAAkB;QAAC0E,WAAW,EAAEA,WAAY;QAACC,UAAU,EAAEA,UAAW;QAAAvC,QAAA,eACnErB,IAAA,CAACF,cAAc,CAACiE,QAAQ;UAACC,KAAK,EAAEH,OAAyB;UAAAxC,QAAA,eAEvDrB,IAAA,CAACyD,gBAAgB,EAAAQ,aAAA,CAAAA,aAAA,KAAKlD,KAAK;YAAAM,QAAA,EACxBqC,MAAM;YAAA;YACL;YACA1D,IAAA,CAACwD,KAAK,EAAAS,aAAA,CAAAA,aAAA,KAAKlD,KAAK;cAAEwC,GAAG,EAAEA;YAAI,EAAE,CAAC;YAAA;YAE9B;YACAvD,IAAA,CAACwD,KAAK,EAAAS,aAAA,KAAKlD,KAAK,CAAG;UACpB,EACe;QAAC,CACI;MAAC,CACR,CAAC;IAEzB;IAEAuC,gBAAgB,CAACY,WAAW,uBAAAC,MAAA,EAAAnB,qBAAA,GAC1BD,aAAa,CAACmB,WAAW,cAAAlB,qBAAA,cAAAA,qBAAA,GAAIF,IAAI,MAChC;IAEH,IAAMsB,OAAO,GAAG7C,MAAM,CAACsB,iBAAiB,CACtCC,IAAI,eACJzE,KAAK,CAACgG,UAAU,CAACf,gBAAgB,CACnC,CAAC;IACDZ,UAAU,CAAC4B,GAAG,CAACxB,IAAI,EAAEG,gBAAgB,CAAC;IACtCL,YAAY,CAAC0B,GAAG,CAACxB,IAAI,EAAEM,kBAAkB,CAAC;IAC1C,OAAOgB,OAAO;EAChB,CAAC,EACD,CAAC7E,OAAO,EAAEF,SAAS,EAAEqD,UAAU,EAAEE,YAAY,EAAErB,MAAM,EAAEI,YAAY,CACrE,CAAC;EACD,IAAM4C,gBAAgB,GAAGjG,WAAW,CAClC,CAACwE,IAAY,EAAE/B,KAA2B;IAAA,IAAAyD,eAAA;IAAA,OACxC,EAAAA,eAAA,GAAC9B,UAAU,CAAC+B,GAAG,CAAC3B,IAAI,CAAC,cAAA0B,eAAA,cAAAA,eAAA,GAAK1D,iBAAiB,EACzCC,KAAK,EACLK,EACF,CAAC;EAAA,GACH,CAACsB,UAAU,EAAEtB,EAAE,CACjB,CAAC;EACD,IAAMsD,kBAAkB,GAAGpG,WAAW,CACpC,CAACwE,IAAY,EAAE6B,MAAmB;IAAA,IAAAC,iBAAA;IAAA,OAChC,EAAAA,iBAAA,GAAChC,YAAY,CAAC6B,GAAG,CAAC3B,IAAI,CAAC,cAAA8B,iBAAA,cAAAA,iBAAA,GAAK9D,iBAAiB,EAC3C6D,MAAM,EACNvD,EACF,CAAC;EAAA,GACH,CAACwB,YAAY,EAAExB,EAAE,CACnB,CAAC;EACD,IAAMyD,YAAY,GAAGrG,OAAO,CAC1B,MACE,IAAIQ,YAAY,CACduC,MAAM,EACNgD,gBAAgB,EAChBG,kBAAkB,EAClB,IAAI/B,GAAG,CAAC,CAAC,EACTN,mBAAmB,EACnByC,KAAA,IAA2B;IAAA,IAA1B;MAAExC,MAAM;MAAEyC;IAAU,CAAC,GAAAD,KAAA;IACpBlD,QAAQ,CAAChC,mBAAmB,CAACwB,EAAE,EAAE;MAAEkB,MAAM;MAAEyC;IAAU,CAAC,CAAC,CAAC;EAC1D,CACF,CAAC,EACH,CACEL,kBAAkB,EAClB9C,QAAQ,EACR2C,gBAAgB,EAChBnD,EAAE,EACFiB,mBAAmB,EACnBd,MAAM,CAEV,CAAC;;EAED;EACA,IAAMyD,sCAAsC,GAAGpG,oBAAoB,CAChEqG,sBAA6C,IAAK;IACjD,IAAMC,UAAU,GACd/C,UAAU,IAAI,IAAI,IAClB,CAACjD,WAAW,CAACiG,OAAO,CAAChD,UAAU,EAAE8C,sBAAsB,CAAC;IAE1D5E,GAAG,CAAC+E,KAAK,CAAC,0BAA0B,EAAEF,UAAU,EAAED,sBAAsB,CAAC;IAEzE,IAAIC,UAAU,EAAE;MACdlD,mBAAmB,CAACT,MAAM,CAAC8D,IAAI,CAACC,YAAY,CAACnC,MAAM,KAAK,CAAC,CAAC;MAE1Df,aAAa,CAAC6C,sBAAsB,CAAC;MAErCxD,cAAc,CAACwD,sBAAsB,CAAC;MAEtCzC,iBAAiB,CAACjB,MAAM,CAACkB,gBAAgB,CAAC,CAAC,CAAC;IAC9C;EACF,CAAC,EACD5B,wBAAwB,EACxB;IAAE0E,cAAc,EAAE;EAAK,CACzB,CAAC;EAEDhH,SAAS,CACP,MAAM,MAAMyG,sCAAsC,CAACQ,KAAK,CAAC,CAAC,EAC1D,CAACR,sCAAsC,CACzC,CAAC;EAED,IAAMS,wBAAwB,GAAGnH,WAAW,CAAC,MAAM;IACjD;IACA;IACA,IAAI2D,cAAc,EAAE;IAEpB,IAAMyD,QAAQ,GAAGnE,MAAM,CAACoE,QAAQ,CAAC,CAAC;IAClC,IAAMC,aAAa,GAAGF,QAAQ,CAACG,OAAO;IACtC,IAAMZ,sBAAsB,GAAG/F,WAAW,CAAC4G,qBAAqB,CAC9DF,aAAa,EACblB,kBACF,CAAC;IACDM,sCAAsC,CAACC,sBAAsB,CAAC;EAChE,CAAC,EAAE,CACDP,kBAAkB,EAClBzC,cAAc,EACdV,MAAM,EACNyD,sCAAsC,CACvC,CAAC;EAEF,IAAMe,wBAAwB,GAAGzH,WAAW,CACzC0H,SAAoB,IAAK;IACxB,IAAMC,WAAW,GAAG/G,WAAW,CAAC4E,kBAAkB,CAACkC,SAAS,CAAC;IAC7DzE,MAAM,CAAC2E,QAAQ,CAACC,IAAI,CAAC1G,UAAU,CAAC2G,QAAQ,EAAEH,WAAW,CAAC;IACtD/D,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,EACD,CAACX,MAAM,CAAC2E,QAAQ,CAClB,CAAC;EAED,IAAMG,uBAAuB,GAAG/H,WAAW,CACxC0H,SAAoB,IAAK;IACxB,IAAMC,WAAW,GAAG/G,WAAW,CAAC4E,kBAAkB,CAACkC,SAAS,CAAC;IAC7DzE,MAAM,CAAC2E,QAAQ,CAACC,IAAI,CAAC1G,UAAU,CAAC6G,OAAO,EAAEL,WAAW,CAAC;IACrD/D,iBAAiB,CAAC,KAAK,CAAC;EAC1B,CAAC,EACD,CAACX,MAAM,CAAC2E,QAAQ,CAClB,CAAC;EAED,IAAMK,sBAAsB,GAAGjI,WAAW,CAAEkI,IAAyB,IAAK;IACxEnG,GAAG,CAACgD,MAAM,CAAC,wBAAwB,EAAEmD,IAAI,CAAC;IAE1C,IACEA,IAAI,IAAI,IAAI,IACZA,IAAI,CAAC7B,MAAM,IAAI,IAAI,IACnB,CAACxF,sBAAsB,CAACqH,IAAI,CAAC7B,MAAM,CAAC,IACpC6B,IAAI,CAAC7B,MAAM,CAACqB,SAAS,IAAI,IAAI,IAC7BQ,IAAI,CAACC,OAAO,IAAI,IAAI,EACpB;MACA;IACF;IAEA,IAAMC,YAAY,GAAGF,IAAI,CAAC7B,MAAM,CAACqB,SAAS,CACvCW,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CACnCC,WAAW,CAAC,CAAC;IAChB,IAAMC,QAAQ,MAAA1C,MAAA,CAAMuC,YAAY,eAAY;IAC5CF,IAAI,CAACC,OAAO,CAACK,QAAQ,CAACD,QAAQ,CAAC;EACjC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAME,yBAAyB,GAAGzI,WAAW,CAAC,MAAM;IAClDkE,iBAAiB,CAACjB,MAAM,CAACkB,gBAAgB,CAAC,CAAC,CAAC;EAC9C,CAAC,EAAE,CAAClB,MAAM,CAAC,CAAC;EAEZ7B,WAAW,CAAC6B,MAAM,EAAE,cAAc,EAAEkE,wBAAwB,CAAC;EAC7D/F,WAAW,CAAC6B,MAAM,EAAE,cAAc,EAAEwE,wBAAwB,CAAC;EAC7DrG,WAAW,CAAC6B,MAAM,EAAE,aAAa,EAAE8E,uBAAuB,CAAC;EAC3D3G,WAAW,CAAC6B,MAAM,EAAE,kBAAkB,EAAEgF,sBAAsB,CAAC;EAC/D7G,WAAW,CACT6B,MAAM,CAAC2E,QAAQ,EACfzG,UAAU,CAACuH,aAAa,EACxBvB,wBACF,CAAC;EACD/F,WAAW,CAAC6B,MAAM,EAAE,sBAAsB,EAAEwF,yBAAyB,CAAC;EAEtE,IAAME,oBAAoB,GAAGtI,WAAW,CAAC6C,YAAY,CAAC;EACtDjD,SAAS,CACP,SAAS2I,aAAaA,CAAA,EAAG;IACvB,IACED,oBAAoB,KAAKzF,YAAY,IACrCA,YAAY,KAAKW,UAAU,EAC3B;MACA9B,GAAG,CAAC+E,KAAK,CAAC,+BAA+B,CAAC;MAC1C,IAAMS,OAAO,GAAG3G,WAAW,CAACiI,mBAAmB,CAC7C3F,YAAY,EACZ+C,gBACF,CAAC;MACD;MACA,OAAOhD,MAAM,CAAC8D,IAAI,CAACC,YAAY,CAACnC,MAAM,GAAG,CAAC,EAAE;QAC1C5B,MAAM,CAAC8D,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC,CAAC8B,MAAM,CAAC,CAAC;MACtC;;MAEA;MACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxB,OAAO,CAAC1C,MAAM,EAAEkE,CAAC,IAAI,CAAC,EAAE;QAC1C9F,MAAM,CAAC8D,IAAI,CAACiC,QAAQ,CAACzB,OAAO,CAACwB,CAAC,CAAC,CAAC;MAClC;MAEArF,mBAAmB,CAACT,MAAM,CAAC8D,IAAI,CAACC,YAAY,CAACnC,MAAM,KAAK,CAAC,CAAC;IAC5D;EACF,CAAC,EACD,CACEoB,gBAAgB,EAChBhD,MAAM,EACNC,YAAY,EACZW,UAAU,EACV0C,YAAY,EACZoC,oBAAoB,CAExB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA1I,SAAS,CAAC,MAAMmD,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC;EAE1C,oBACEtB,KAAA,CAAAF,SAAA;IAAAmB,QAAA,GACGU,gBAAgB,IAAIT,cAAc,EAClCiB,cAAc,EACdlE,KAAK,CAACkJ,QAAQ,CAACC,GAAG,CAACnG,QAAQ,EAAEoG,KAAK,IACjCA,KAAK,IAAI,IAAI;IAAA;IACX;IACA;IACAzH,IAAA,CAACnB,aAAa;MAAC6I,QAAQ,EAAE,EAAG;MAAArG,QAAA,eACzBhD,KAAK,CAACsJ,YAAY,CAACF,KAAK,EAAkB;QACzCrG,EAAE;QACFG,MAAM;QACNsD,YAAY;QACZhC;MACF,CAAC;IAAC,CACW,CAAC,GACd,IACN,CAAC;EAAA,CACD,CAAC;AAEP;AAEA,eAAe7B,eAAe","ignoreList":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
4
3
|
export function DashboardPanelWrapper(_ref) {
|
|
5
4
|
var {
|
|
6
5
|
children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardPanelWrapper.js","names":["React","Fragment","_Fragment","jsx","_jsx","DashboardPanelWrapper","_ref","children"],"sources":["../src/DashboardPanelWrapper.tsx"],"sourcesContent":["import React, { type PropsWithChildren } from 'react';\n\nexport function DashboardPanelWrapper({\n children,\n}: PropsWithChildren<object>): JSX.Element {\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{children}</>;\n}\n\nexport default DashboardPanelWrapper;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAkC,OAAO;AAAC,SAAAC,QAAA,IAAAC,SAAA
|
|
1
|
+
{"version":3,"file":"DashboardPanelWrapper.js","names":["React","Fragment","_Fragment","jsx","_jsx","DashboardPanelWrapper","_ref","children"],"sources":["../src/DashboardPanelWrapper.tsx"],"sourcesContent":["import React, { type PropsWithChildren } from 'react';\n\nexport function DashboardPanelWrapper({\n children,\n}: PropsWithChildren<object>): JSX.Element {\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{children}</>;\n}\n\nexport default DashboardPanelWrapper;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAkC,OAAO;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAEtD,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAEM;EAAA,IAFL;IACpCC;EACyB,CAAC,GAAAD,IAAA;EAC1B;EACA,oBAAOF,IAAA,CAAAF,SAAA;IAAAK,QAAA,EAAGA;EAAQ,CAAG,CAAC;AACxB;AAEA,eAAeF,qBAAqB","ignoreList":[]}
|