@deephaven/dashboard 0.109.1-beta.7 → 1.0.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/BasePanel.d.ts +37 -0
- package/dist/BasePanel.d.ts.map +1 -0
- package/dist/BasePanel.js +304 -0
- package/dist/BasePanel.js.map +1 -0
- package/dist/DashboardLayout.js +2 -2
- package/dist/DashboardLayout.js.map +1 -1
- package/dist/Panel.css +5 -0
- package/dist/Panel.css.map +1 -0
- package/dist/PanelContextMenu.d.ts +30 -0
- package/dist/PanelContextMenu.d.ts.map +1 -0
- package/dist/PanelContextMenu.js +160 -0
- package/dist/PanelContextMenu.js.map +1 -0
- package/dist/RenameDialog.d.ts +34 -0
- package/dist/RenameDialog.d.ts.map +1 -0
- package/dist/RenameDialog.js +167 -0
- package/dist/RenameDialog.js.map +1 -0
- package/dist/TabEvent.d.ts +6 -0
- package/dist/TabEvent.d.ts.map +1 -0
- package/dist/TabEvent.js +6 -0
- package/dist/TabEvent.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/useDhId.d.ts +1 -2
- package/dist/useDhId.d.ts.map +1 -1
- package/dist/useDhId.js +6 -7
- package/dist/useDhId.js.map +1 -1
- package/dist/usePanelId.d.ts +10 -0
- package/dist/usePanelId.d.ts.map +1 -0
- package/dist/usePanelId.js +15 -0
- package/dist/usePanelId.js.map +1 -0
- package/package.json +12 -10
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
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); }
|
|
4
|
+
import React, { PureComponent } from 'react';
|
|
5
|
+
import { ContextActions } from '@deephaven/components';
|
|
6
|
+
import { getWorkspace, setWorkspace as setWorkspaceAction } from '@deephaven/redux';
|
|
7
|
+
import { connect } from 'react-redux';
|
|
8
|
+
import { LayoutUtils } from "./layout/index.js";
|
|
9
|
+
import { PanelEvent } from "./PanelEvent.js";
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
class PanelContextMenu extends PureComponent {
|
|
12
|
+
constructor(props) {
|
|
13
|
+
super(props);
|
|
14
|
+
this.handleCloseTab = this.handleCloseTab.bind(this);
|
|
15
|
+
this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);
|
|
16
|
+
this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);
|
|
17
|
+
this.handleReopenLast = this.handleReopenLast.bind(this);
|
|
18
|
+
}
|
|
19
|
+
getAllTabs() {
|
|
20
|
+
var _glContainer$tab$head, _glContainer$tab, _glContainer$tab$head2;
|
|
21
|
+
// return a clone of the tabs array, or returns empty array if null
|
|
22
|
+
var {
|
|
23
|
+
glContainer
|
|
24
|
+
} = this.props;
|
|
25
|
+
return [...((_glContainer$tab$head = glContainer === null || glContainer === void 0 ? void 0 : (_glContainer$tab = glContainer.tab) === null || _glContainer$tab === void 0 ? void 0 : (_glContainer$tab$head2 = _glContainer$tab.header) === null || _glContainer$tab$head2 === void 0 ? void 0 : _glContainer$tab$head2.tabs) !== null && _glContainer$tab$head !== void 0 ? _glContainer$tab$head : [])];
|
|
26
|
+
}
|
|
27
|
+
handleCloseTab() {
|
|
28
|
+
var {
|
|
29
|
+
glContainer
|
|
30
|
+
} = this.props;
|
|
31
|
+
glContainer.close();
|
|
32
|
+
}
|
|
33
|
+
handleCloseTabsAll() {
|
|
34
|
+
var tabs = this.getAllTabs();
|
|
35
|
+
|
|
36
|
+
// No need to check if isClosable, golden-layout returns
|
|
37
|
+
// false when attempting to close tabs that you can't
|
|
38
|
+
tabs.forEach(tab => {
|
|
39
|
+
var _container;
|
|
40
|
+
return (_container = (tab === null || tab === void 0 ? void 0 : tab.contentItem).container) === null || _container === void 0 ? void 0 : _container.close();
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
handleCloseTabsRight() {
|
|
44
|
+
var {
|
|
45
|
+
glContainer
|
|
46
|
+
} = this.props;
|
|
47
|
+
var tabs = this.getAllTabs();
|
|
48
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
49
|
+
var _tabs$i$contentItem, _tabs$i$contentItem$c, _glContainer$tab2, _glContainer$tab2$con, _glContainer$tab2$con2, _container2, _tabs$i;
|
|
50
|
+
if (((_tabs$i$contentItem = tabs[i].contentItem) === null || _tabs$i$contentItem === void 0 ? void 0 : (_tabs$i$contentItem$c = _tabs$i$contentItem.config) === null || _tabs$i$contentItem$c === void 0 ? void 0 : _tabs$i$contentItem$c.id) === ((_glContainer$tab2 = glContainer.tab) === null || _glContainer$tab2 === void 0 ? void 0 : (_glContainer$tab2$con = _glContainer$tab2.contentItem) === null || _glContainer$tab2$con === void 0 ? void 0 : (_glContainer$tab2$con2 = _glContainer$tab2$con.config) === null || _glContainer$tab2$con2 === void 0 ? void 0 : _glContainer$tab2$con2.id)) {
|
|
51
|
+
break; // end when we get back to current id
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line no-unused-expressions
|
|
55
|
+
(_container2 = ((_tabs$i = tabs[i]) === null || _tabs$i === void 0 ? void 0 : _tabs$i.contentItem).container) === null || _container2 === void 0 ? void 0 : _container2.close();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
handleReopenLast() {
|
|
59
|
+
var {
|
|
60
|
+
glContainer,
|
|
61
|
+
glEventHub
|
|
62
|
+
} = this.props;
|
|
63
|
+
glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);
|
|
64
|
+
}
|
|
65
|
+
canCloseTabsRight() {
|
|
66
|
+
var {
|
|
67
|
+
glContainer
|
|
68
|
+
} = this.props;
|
|
69
|
+
var tabs = this.getAllTabs();
|
|
70
|
+
var disabled = true;
|
|
71
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
72
|
+
var _tabs$i$contentItem2, _tabs$i$contentItem2$, _glContainer$tab3, _glContainer$tab3$con, _glContainer$tab3$con2, _tabs$i2, _tabs$i2$contentItem, _tabs$i2$contentItem$;
|
|
73
|
+
if (((_tabs$i$contentItem2 = tabs[i].contentItem) === null || _tabs$i$contentItem2 === void 0 ? void 0 : (_tabs$i$contentItem2$ = _tabs$i$contentItem2.config) === null || _tabs$i$contentItem2$ === void 0 ? void 0 : _tabs$i$contentItem2$.id) === ((_glContainer$tab3 = glContainer.tab) === null || _glContainer$tab3 === void 0 ? void 0 : (_glContainer$tab3$con = _glContainer$tab3.contentItem) === null || _glContainer$tab3$con === void 0 ? void 0 : (_glContainer$tab3$con2 = _glContainer$tab3$con.config) === null || _glContainer$tab3$con2 === void 0 ? void 0 : _glContainer$tab3$con2.id)) {
|
|
74
|
+
break; // end when we get back to current id
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var closable = Boolean((_tabs$i2 = tabs[i]) === null || _tabs$i2 === void 0 ? void 0 : (_tabs$i2$contentItem = _tabs$i2.contentItem) === null || _tabs$i2$contentItem === void 0 ? void 0 : (_tabs$i2$contentItem$ = _tabs$i2$contentItem.config) === null || _tabs$i2$contentItem$ === void 0 ? void 0 : _tabs$i2$contentItem$.isClosable);
|
|
78
|
+
if (closable) {
|
|
79
|
+
disabled = false;
|
|
80
|
+
break; // end if we find a closeable tab
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return disabled;
|
|
85
|
+
}
|
|
86
|
+
canCloseAny() {
|
|
87
|
+
var tabs = this.getAllTabs();
|
|
88
|
+
var disabled = true;
|
|
89
|
+
for (var i = tabs.length - 1; i > 0; i -= 1) {
|
|
90
|
+
var _tabs$i3, _tabs$i3$contentItem, _tabs$i3$contentItem$;
|
|
91
|
+
var closable = Boolean((_tabs$i3 = tabs[i]) === null || _tabs$i3 === void 0 ? void 0 : (_tabs$i3$contentItem = _tabs$i3.contentItem) === null || _tabs$i3$contentItem === void 0 ? void 0 : (_tabs$i3$contentItem$ = _tabs$i3$contentItem.config) === null || _tabs$i3$contentItem$ === void 0 ? void 0 : _tabs$i3$contentItem$.isClosable);
|
|
92
|
+
if (closable) {
|
|
93
|
+
disabled = false;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return disabled;
|
|
98
|
+
}
|
|
99
|
+
canReopenLast() {
|
|
100
|
+
var _LayoutUtils$getStack, _workspace$data$close;
|
|
101
|
+
var {
|
|
102
|
+
workspace,
|
|
103
|
+
glContainer
|
|
104
|
+
} = this.props;
|
|
105
|
+
var stackId = (_LayoutUtils$getStack = LayoutUtils.getStackForConfig(glContainer.layoutManager.root, glContainer.getConfig())) === null || _LayoutUtils$getStack === void 0 ? void 0 : _LayoutUtils$getStack.config.id;
|
|
106
|
+
return !((_workspace$data$close = workspace.data.closed) !== null && _workspace$data$close !== void 0 && _workspace$data$close.some(panel => panel.parentStackId === stackId));
|
|
107
|
+
}
|
|
108
|
+
render() {
|
|
109
|
+
var _glContainer$tab4, _glContainer$tab4$con, _glContainer$tab4$con2;
|
|
110
|
+
var {
|
|
111
|
+
additionalActions,
|
|
112
|
+
glContainer
|
|
113
|
+
} = this.props;
|
|
114
|
+
var contextActions = [...additionalActions];
|
|
115
|
+
contextActions.push(() => ({
|
|
116
|
+
title: 'Re-open closed panel',
|
|
117
|
+
group: ContextActions.groups.medium + 2004,
|
|
118
|
+
action: this.handleReopenLast,
|
|
119
|
+
disabled: this.canReopenLast()
|
|
120
|
+
}));
|
|
121
|
+
var closable = (_glContainer$tab4 = glContainer.tab) === null || _glContainer$tab4 === void 0 ? void 0 : (_glContainer$tab4$con = _glContainer$tab4.contentItem) === null || _glContainer$tab4$con === void 0 ? void 0 : (_glContainer$tab4$con2 = _glContainer$tab4$con.config) === null || _glContainer$tab4$con2 === void 0 ? void 0 : _glContainer$tab4$con2.isClosable;
|
|
122
|
+
contextActions.push({
|
|
123
|
+
title: 'Close',
|
|
124
|
+
order: 10,
|
|
125
|
+
group: ContextActions.groups.low,
|
|
126
|
+
action: this.handleCloseTab,
|
|
127
|
+
disabled: closable === undefined || !closable
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// pushed as function so the disable check happens on run
|
|
131
|
+
contextActions.push(() => ({
|
|
132
|
+
title: 'Close Tabs to Right',
|
|
133
|
+
order: 20,
|
|
134
|
+
group: ContextActions.groups.low,
|
|
135
|
+
action: this.handleCloseTabsRight,
|
|
136
|
+
disabled: this.canCloseTabsRight()
|
|
137
|
+
}));
|
|
138
|
+
contextActions.push(() => ({
|
|
139
|
+
title: 'Close All',
|
|
140
|
+
order: 30,
|
|
141
|
+
group: ContextActions.groups.low,
|
|
142
|
+
action: this.handleCloseTabsAll,
|
|
143
|
+
disabled: this.canCloseAny()
|
|
144
|
+
}));
|
|
145
|
+
return /*#__PURE__*/_jsx(ContextActions, {
|
|
146
|
+
actions: contextActions
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
_defineProperty(PanelContextMenu, "defaultProps", {
|
|
151
|
+
additionalActions: []
|
|
152
|
+
});
|
|
153
|
+
var mapStateToProps = state => ({
|
|
154
|
+
workspace: getWorkspace(state)
|
|
155
|
+
});
|
|
156
|
+
var ConnectedPanelContextMenu = connect(mapStateToProps, {
|
|
157
|
+
setWorkspace: setWorkspaceAction
|
|
158
|
+
})(PanelContextMenu);
|
|
159
|
+
export default ConnectedPanelContextMenu;
|
|
160
|
+
//# sourceMappingURL=PanelContextMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","getWorkspace","setWorkspace","setWorkspaceAction","connect","LayoutUtils","PanelEvent","jsx","_jsx","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","handleReopenLast","getAllTabs","_glContainer$tab$head","_glContainer$tab","_glContainer$tab$head2","glContainer","tab","header","tabs","close","forEach","_container","contentItem","container","i","length","_tabs$i$contentItem","_tabs$i$contentItem$c","_glContainer$tab2","_glContainer$tab2$con","_glContainer$tab2$con2","_container2","_tabs$i","config","id","glEventHub","emit","REOPEN_LAST","canCloseTabsRight","disabled","_tabs$i$contentItem2","_tabs$i$contentItem2$","_glContainer$tab3","_glContainer$tab3$con","_glContainer$tab3$con2","_tabs$i2","_tabs$i2$contentItem","_tabs$i2$contentItem$","closable","Boolean","isClosable","canCloseAny","_tabs$i3","_tabs$i3$contentItem","_tabs$i3$contentItem$","canReopenLast","_LayoutUtils$getStack","_workspace$data$close","workspace","stackId","getStackForConfig","layoutManager","root","getConfig","data","closed","some","panel","parentStackId","render","_glContainer$tab4","_glContainer$tab4$con","_glContainer$tab4$con2","additionalActions","contextActions","push","title","group","groups","medium","action","order","low","undefined","actions","_defineProperty","mapStateToProps","state","ConnectedPanelContextMenu"],"sources":["../src/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n ContextActions,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport {\n type CustomizableWorkspace,\n type RootState,\n getWorkspace,\n setWorkspace as setWorkspaceAction,\n} from '@deephaven/redux';\nimport { connect } from 'react-redux';\nimport { type ClosedPanel } from './PanelManager';\nimport { LayoutUtils } from './layout';\nimport { PanelEvent } from './PanelEvent';\n\ninterface PanelContextMenuProps {\n additionalActions: ResolvableContextAction[];\n glContainer: Container;\n glEventHub: EventEmitter;\n workspace: CustomizableWorkspace;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n this.handleReopenLast = this.handleReopenLast.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(\n tab => (tab?.contentItem as unknown as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n (tabs[i]?.contentItem as unknown as HasContainer).container?.close();\n }\n }\n\n handleReopenLast(): void {\n const { glContainer, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n canReopenLast(): boolean {\n const { workspace, glContainer } = this.props;\n const stackId = LayoutUtils.getStackForConfig(\n glContainer.layoutManager.root,\n glContainer.getConfig()\n )?.config.id;\n\n return !workspace.data.closed?.some(\n panel => (panel as ClosedPanel).parentStackId === stackId\n );\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions = [...additionalActions];\n\n contextActions.push(() => ({\n title: 'Re-open closed panel',\n group: ContextActions.groups.medium + 2004,\n action: this.handleReopenLast,\n disabled: this.canReopenLast(),\n }));\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nconst mapStateToProps = (\n state: RootState\n): {\n workspace: CustomizableWorkspace;\n} => ({\n workspace: getWorkspace(state),\n});\n\nconst ConnectedPanelContextMenu = connect(mapStateToProps, {\n setWorkspace: setWorkspaceAction,\n})(PanelContextMenu);\n\nexport default ConnectedPanelContextMenu;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ChangeEvent, type FormEvent, PureComponent, type ReactElement, type RefObject } from 'react';
|
|
2
|
+
interface RenameDialogProps {
|
|
3
|
+
isShared: boolean;
|
|
4
|
+
isOwner: boolean;
|
|
5
|
+
isShown: boolean;
|
|
6
|
+
itemType: string;
|
|
7
|
+
onSubmit: (title: string) => void;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
value?: string | null;
|
|
10
|
+
}
|
|
11
|
+
interface RenameDialogState {
|
|
12
|
+
value?: string | null;
|
|
13
|
+
valueWasValidated: boolean;
|
|
14
|
+
}
|
|
15
|
+
export default class RenameDialog extends PureComponent<RenameDialogProps, RenameDialogState> {
|
|
16
|
+
static defaultProps: {
|
|
17
|
+
isShared: boolean;
|
|
18
|
+
isOwner: boolean;
|
|
19
|
+
itemType: string;
|
|
20
|
+
value: string;
|
|
21
|
+
};
|
|
22
|
+
constructor(props: RenameDialogProps);
|
|
23
|
+
componentDidUpdate(prevProps: RenameDialogProps): void;
|
|
24
|
+
renameInputRef: RefObject<HTMLInputElement>;
|
|
25
|
+
resetState(): void;
|
|
26
|
+
handleRenameDialogOpened(): void;
|
|
27
|
+
handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void;
|
|
28
|
+
handleRenameCancel(): void;
|
|
29
|
+
handleRenameSubmit(event: FormEvent<HTMLFormElement>): void;
|
|
30
|
+
renderRenameDialog(): ReactElement;
|
|
31
|
+
render(): ReactElement;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=RenameDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameDialog.d.ts","sourceRoot":"","sources":["../src/RenameDialog.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,UAAU,iBAAiB;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,aAAa,CACrD,iBAAiB,EACjB,iBAAiB,CAClB;IACC,MAAM,CAAC,YAAY;;;;;MAKjB;gBAEU,KAAK,EAAE,iBAAiB;IAkBpC,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAYtD,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE5C,UAAU,IAAI,IAAI;IAKlB,wBAAwB,IAAI,IAAI;IAIhC,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAInE,kBAAkB,IAAI,IAAI;IAK1B,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;IAa3D,kBAAkB,IAAI,YAAY;IAyDlC,MAAM,IAAI,YAAY;CAiBvB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
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); }
|
|
4
|
+
import React, { PureComponent } from 'react';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
import { Button, Popper } from '@deephaven/components';
|
|
7
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export default class RenameDialog extends PureComponent {
|
|
10
|
+
constructor(props) {
|
|
11
|
+
super(props);
|
|
12
|
+
_defineProperty(this, "renameInputRef", void 0);
|
|
13
|
+
this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);
|
|
14
|
+
this.handleRenameInputChange = this.handleRenameInputChange.bind(this);
|
|
15
|
+
this.handleRenameCancel = this.handleRenameCancel.bind(this);
|
|
16
|
+
this.handleRenameSubmit = this.handleRenameSubmit.bind(this);
|
|
17
|
+
this.renameInputRef = /*#__PURE__*/React.createRef();
|
|
18
|
+
var {
|
|
19
|
+
value
|
|
20
|
+
} = props;
|
|
21
|
+
this.state = {
|
|
22
|
+
value,
|
|
23
|
+
valueWasValidated: false
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
componentDidUpdate(prevProps) {
|
|
27
|
+
var {
|
|
28
|
+
isShown: prevIsShown
|
|
29
|
+
} = prevProps;
|
|
30
|
+
var {
|
|
31
|
+
isShown
|
|
32
|
+
} = this.props;
|
|
33
|
+
// Reset the state on dialog shown and not on the `value` prop change
|
|
34
|
+
// so the input keeps the internal value while the dialog is open.
|
|
35
|
+
// Useful in case the `value` prop update is triggered externally
|
|
36
|
+
// i.e. by someone else renaming the same shared dashboard
|
|
37
|
+
if (isShown && !prevIsShown) {
|
|
38
|
+
this.resetState();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
resetState() {
|
|
42
|
+
var {
|
|
43
|
+
value
|
|
44
|
+
} = this.props;
|
|
45
|
+
this.setState({
|
|
46
|
+
value,
|
|
47
|
+
valueWasValidated: false
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
handleRenameDialogOpened() {
|
|
51
|
+
var _this$renameInputRef, _this$renameInputRef$;
|
|
52
|
+
(_this$renameInputRef = this.renameInputRef) === null || _this$renameInputRef === void 0 ? void 0 : (_this$renameInputRef$ = _this$renameInputRef.current) === null || _this$renameInputRef$ === void 0 ? void 0 : _this$renameInputRef$.focus();
|
|
53
|
+
}
|
|
54
|
+
handleRenameInputChange(event) {
|
|
55
|
+
this.setState({
|
|
56
|
+
value: event.target.value
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
handleRenameCancel() {
|
|
60
|
+
var {
|
|
61
|
+
onCancel
|
|
62
|
+
} = this.props;
|
|
63
|
+
onCancel();
|
|
64
|
+
}
|
|
65
|
+
handleRenameSubmit(event) {
|
|
66
|
+
event.stopPropagation();
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
var {
|
|
69
|
+
value
|
|
70
|
+
} = this.state;
|
|
71
|
+
var newTitle = value === null || value === void 0 ? void 0 : value.trim();
|
|
72
|
+
if (newTitle !== undefined && newTitle !== '') {
|
|
73
|
+
var {
|
|
74
|
+
onSubmit
|
|
75
|
+
} = this.props;
|
|
76
|
+
onSubmit(newTitle);
|
|
77
|
+
} else {
|
|
78
|
+
this.setState({
|
|
79
|
+
value: newTitle,
|
|
80
|
+
valueWasValidated: true
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
renderRenameDialog() {
|
|
85
|
+
var {
|
|
86
|
+
isShared,
|
|
87
|
+
isOwner,
|
|
88
|
+
itemType
|
|
89
|
+
} = this.props;
|
|
90
|
+
var {
|
|
91
|
+
value,
|
|
92
|
+
valueWasValidated
|
|
93
|
+
} = this.state;
|
|
94
|
+
return /*#__PURE__*/_jsxs("form", {
|
|
95
|
+
className: classNames('p-3', {
|
|
96
|
+
'was-validated': valueWasValidated
|
|
97
|
+
}),
|
|
98
|
+
onSubmit: this.handleRenameSubmit,
|
|
99
|
+
noValidate: true,
|
|
100
|
+
role: "presentation",
|
|
101
|
+
onMouseDown: event => {
|
|
102
|
+
// block events in the NewTabScreen ItemList
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
},
|
|
105
|
+
onMouseUp: event => {
|
|
106
|
+
event.stopPropagation();
|
|
107
|
+
},
|
|
108
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
109
|
+
className: "form-group",
|
|
110
|
+
children: [/*#__PURE__*/_jsxs("label", {
|
|
111
|
+
htmlFor: "rename-dialog-".concat(itemType, "-input"),
|
|
112
|
+
children: ["Rename ", itemType]
|
|
113
|
+
}), /*#__PURE__*/_jsx("input", {
|
|
114
|
+
type: "text",
|
|
115
|
+
className: "form-control",
|
|
116
|
+
id: "rename-dialog-".concat(itemType, "-input"),
|
|
117
|
+
value: value !== null && value !== void 0 ? value : undefined,
|
|
118
|
+
ref: this.renameInputRef,
|
|
119
|
+
onChange: this.handleRenameInputChange,
|
|
120
|
+
required: true
|
|
121
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
122
|
+
className: "invalid-feedback",
|
|
123
|
+
children: [itemType, " name cannot be empty"]
|
|
124
|
+
}), (isShared || !isOwner) && /*#__PURE__*/_jsxs("div", {
|
|
125
|
+
className: "pt-2",
|
|
126
|
+
children: ["Renaming this ", itemType, " will rename for all users."]
|
|
127
|
+
})]
|
|
128
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
129
|
+
className: "text-right",
|
|
130
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
131
|
+
kind: "secondary",
|
|
132
|
+
className: "mr-2",
|
|
133
|
+
onClick: this.handleRenameCancel,
|
|
134
|
+
children: "Cancel"
|
|
135
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
136
|
+
kind: "primary",
|
|
137
|
+
type: "submit",
|
|
138
|
+
children: "Rename"
|
|
139
|
+
})]
|
|
140
|
+
})]
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
render() {
|
|
144
|
+
var {
|
|
145
|
+
isShown,
|
|
146
|
+
onCancel
|
|
147
|
+
} = this.props;
|
|
148
|
+
return /*#__PURE__*/_jsx(Popper, {
|
|
149
|
+
isShown: isShown,
|
|
150
|
+
onEntered: this.handleRenameDialogOpened,
|
|
151
|
+
onExited: onCancel,
|
|
152
|
+
options: {
|
|
153
|
+
placement: 'bottom'
|
|
154
|
+
},
|
|
155
|
+
interactive: true,
|
|
156
|
+
closeOnBlur: true,
|
|
157
|
+
children: this.renderRenameDialog()
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
_defineProperty(RenameDialog, "defaultProps", {
|
|
162
|
+
isShared: false,
|
|
163
|
+
isOwner: true,
|
|
164
|
+
itemType: 'Item',
|
|
165
|
+
value: ''
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=RenameDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameDialog.js","names":["React","PureComponent","classNames","Button","Popper","jsxs","_jsxs","jsx","_jsx","RenameDialog","constructor","props","_defineProperty","handleRenameDialogOpened","bind","handleRenameInputChange","handleRenameCancel","handleRenameSubmit","renameInputRef","createRef","value","state","valueWasValidated","componentDidUpdate","prevProps","isShown","prevIsShown","resetState","setState","_this$renameInputRef","_this$renameInputRef$","current","focus","event","target","onCancel","stopPropagation","preventDefault","newTitle","trim","undefined","onSubmit","renderRenameDialog","isShared","isOwner","itemType","className","noValidate","role","onMouseDown","onMouseUp","children","htmlFor","concat","type","id","ref","onChange","required","kind","onClick","render","onEntered","onExited","options","placement","interactive","closeOnBlur"],"sources":["../src/RenameDialog.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type FormEvent,\n PureComponent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { Button, Popper } from '@deephaven/components';\n\ninterface RenameDialogProps {\n isShared: boolean;\n isOwner: boolean;\n isShown: boolean;\n itemType: string;\n onSubmit: (title: string) => void;\n onCancel: () => void;\n value?: string | null;\n}\n\ninterface RenameDialogState {\n value?: string | null;\n valueWasValidated: boolean;\n}\n\nexport default class RenameDialog extends PureComponent<\n RenameDialogProps,\n RenameDialogState\n> {\n static defaultProps = {\n isShared: false,\n isOwner: true,\n itemType: 'Item',\n value: '',\n };\n\n constructor(props: RenameDialogProps) {\n super(props);\n\n this.handleRenameDialogOpened = this.handleRenameDialogOpened.bind(this);\n this.handleRenameInputChange = this.handleRenameInputChange.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n\n this.renameInputRef = React.createRef();\n\n const { value } = props;\n\n this.state = {\n value,\n valueWasValidated: false,\n };\n }\n\n componentDidUpdate(prevProps: RenameDialogProps): void {\n const { isShown: prevIsShown } = prevProps;\n const { isShown } = this.props;\n // Reset the state on dialog shown and not on the `value` prop change\n // so the input keeps the internal value while the dialog is open.\n // Useful in case the `value` prop update is triggered externally\n // i.e. by someone else renaming the same shared dashboard\n if (isShown && !prevIsShown) {\n this.resetState();\n }\n }\n\n renameInputRef: RefObject<HTMLInputElement>;\n\n resetState(): void {\n const { value } = this.props;\n this.setState({ value, valueWasValidated: false });\n }\n\n handleRenameDialogOpened(): void {\n this.renameInputRef?.current?.focus();\n }\n\n handleRenameInputChange(event: ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value });\n }\n\n handleRenameCancel(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n handleRenameSubmit(event: FormEvent<HTMLFormElement>): void {\n event.stopPropagation();\n event.preventDefault();\n const { value } = this.state;\n const newTitle = value?.trim();\n if (newTitle !== undefined && newTitle !== '') {\n const { onSubmit } = this.props;\n onSubmit(newTitle);\n } else {\n this.setState({ value: newTitle, valueWasValidated: true });\n }\n }\n\n renderRenameDialog(): ReactElement {\n const { isShared, isOwner, itemType } = this.props;\n const { value, valueWasValidated } = this.state;\n\n return (\n <form\n className={classNames('p-3', { 'was-validated': valueWasValidated })}\n onSubmit={this.handleRenameSubmit}\n noValidate\n role=\"presentation\"\n onMouseDown={event => {\n // block events in the NewTabScreen ItemList\n event.stopPropagation();\n }}\n onMouseUp={event => {\n event.stopPropagation();\n }}\n >\n <div className=\"form-group\">\n <label htmlFor={`rename-dialog-${itemType}-input`}>\n Rename {itemType}\n </label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`rename-dialog-${itemType}-input`}\n value={value ?? undefined}\n ref={this.renameInputRef}\n onChange={this.handleRenameInputChange}\n required\n />\n <div className=\"invalid-feedback\">\n {itemType} name cannot be empty\n </div>\n {(isShared || !isOwner) && (\n <div className=\"pt-2\">\n Renaming this {itemType} will rename for all users.\n </div>\n )}\n </div>\n\n <div className=\"text-right\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleRenameCancel}\n >\n Cancel\n </Button>\n <Button kind=\"primary\" type=\"submit\">\n Rename\n </Button>\n </div>\n </form>\n );\n }\n\n render(): ReactElement {\n const { isShown, onCancel } = this.props;\n return (\n <Popper\n isShown={isShown}\n onEntered={this.handleRenameDialogOpened}\n onExited={onCancel}\n options={{\n placement: 'bottom',\n }}\n interactive\n closeOnBlur\n >\n {this.renderRenameDialog()}\n </Popper>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabEvent.d.ts","sourceRoot":"","sources":["../src/TabEvent.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ;;;EAGZ,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
package/dist/TabEvent.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabEvent.js","names":["TabEvent","Object","freeze","focus","blur"],"sources":["../src/TabEvent.ts"],"sourcesContent":["const TabEvent = Object.freeze({\n focus: 'TabEvent.focus',\n blur: 'TabEvent.blur',\n});\n\nexport default TabEvent;\n"],"mappings":"AAAA,IAAMA,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC7BC,KAAK,EAAE,gBAAgB;EACvBC,IAAI,EAAE;AACR,CAAC,CAAC;AAEF,eAAeJ,QAAQ"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,10 +10,13 @@ export { default as DashboardUtils } from './DashboardUtils';
|
|
|
10
10
|
export * from './LazyDashboard';
|
|
11
11
|
export * from './layout';
|
|
12
12
|
export * from './redux';
|
|
13
|
+
export { type BasePanelProps, default as BasePanel, default as Panel, } from './BasePanel';
|
|
13
14
|
export * from './PanelManager';
|
|
14
15
|
export * from './PanelEvent';
|
|
15
16
|
export { default as PanelErrorBoundary } from './PanelErrorBoundary';
|
|
16
17
|
export { default as PanelManager } from './PanelManager';
|
|
18
|
+
export { default as TabEvent } from './TabEvent';
|
|
17
19
|
export * from './useDashboardId';
|
|
18
20
|
export * from './useDhId';
|
|
21
|
+
export * from './usePanelId';
|
|
19
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC;AAEzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,eAAe,SAAS,CAAC;AAEzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,KAAK,cAAc,EACnB,OAAO,IAAI,SAAS,EAEpB,OAAO,IAAI,KAAK,GACjB,MAAM,aAAa,CAAC;AACrB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,10 +10,15 @@ export { default as DashboardUtils } from "./DashboardUtils.js";
|
|
|
10
10
|
export * from "./LazyDashboard.js";
|
|
11
11
|
export * from "./layout/index.js";
|
|
12
12
|
export * from "./redux/index.js";
|
|
13
|
+
export { default as BasePanel,
|
|
14
|
+
// Alias for BasePanel
|
|
15
|
+
default as Panel } from "./BasePanel.js";
|
|
13
16
|
export * from "./PanelManager.js";
|
|
14
17
|
export * from "./PanelEvent.js";
|
|
15
18
|
export { default as PanelErrorBoundary } from "./PanelErrorBoundary.js";
|
|
16
19
|
export { default as PanelManager } from "./PanelManager.js";
|
|
20
|
+
export { default as TabEvent } from "./TabEvent.js";
|
|
17
21
|
export * from "./useDashboardId.js";
|
|
18
22
|
export * from "./useDhId.js";
|
|
23
|
+
export * from "./usePanelId.js";
|
|
19
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Dashboard","default","DashboardUtils","PanelErrorBoundary","PanelManager"],"sources":["../src/index.ts"],"sourcesContent":["import Dashboard from './Dashboard';\n\nexport default Dashboard;\n\nexport * from './Dashboard';\nexport * from './DashboardConstants';\nexport * from './DashboardEvents';\nexport * from './DashboardPlugin';\nexport * from './DashboardLayout';\nexport * from './DashboardUtils';\nexport { default as DashboardUtils } from './DashboardUtils';\nexport * from './LazyDashboard';\nexport * from './layout';\nexport * from './redux';\nexport * from './PanelManager';\nexport * from './PanelEvent';\nexport { default as PanelErrorBoundary } from './PanelErrorBoundary';\nexport { default as PanelManager } from './PanelManager';\nexport * from './useDashboardId';\nexport * from './useDhId';\n"],"mappings":"OAAOA,SAAS;AAEhB,eAAeA,SAAS;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQhBC,OAAO,IAAIC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["Dashboard","default","DashboardUtils","BasePanel","Panel","PanelErrorBoundary","PanelManager","TabEvent"],"sources":["../src/index.ts"],"sourcesContent":["import Dashboard from './Dashboard';\n\nexport default Dashboard;\n\nexport * from './Dashboard';\nexport * from './DashboardConstants';\nexport * from './DashboardEvents';\nexport * from './DashboardPlugin';\nexport * from './DashboardLayout';\nexport * from './DashboardUtils';\nexport { default as DashboardUtils } from './DashboardUtils';\nexport * from './LazyDashboard';\nexport * from './layout';\nexport * from './redux';\nexport {\n type BasePanelProps,\n default as BasePanel,\n // Alias for BasePanel\n default as Panel,\n} from './BasePanel';\nexport * from './PanelManager';\nexport * from './PanelEvent';\nexport { default as PanelErrorBoundary } from './PanelErrorBoundary';\nexport { default as PanelManager } from './PanelManager';\nexport { default as TabEvent } from './TabEvent';\nexport * from './useDashboardId';\nexport * from './useDhId';\nexport * from './usePanelId';\n"],"mappings":"OAAOA,SAAS;AAEhB,eAAeA,SAAS;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQhBC,OAAO,IAAIC,cAAc;AAAA;AAAA;AAAA;AAAA,SAMhCD,OAAO,IAAIE,SAAS;AACpB;AACAF,OAAO,IAAIG,KAAK;AAAA;AAAA;AAAA,SAITH,OAAO,IAAII,kBAAkB;AAAA,SAC7BJ,OAAO,IAAIK,YAAY;AAAA,SACvBL,OAAO,IAAIM,QAAQ;AAAA;AAAA;AAAA"}
|
package/dist/useDhId.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
export declare const DH_ID_PROP = "__dhId";
|
|
2
|
-
export declare const DhIdContext: import("react").Context<string | null>;
|
|
3
2
|
/**
|
|
4
3
|
* Gets the Deephaven ID of a component.
|
|
5
4
|
* This is used to identify the component within a dashboard.
|
|
6
5
|
* Usually this is just a panel ID, but in some contexts such as dh.ui,
|
|
7
6
|
* it may be an ID for a component within a panel.
|
|
8
7
|
*
|
|
9
|
-
* Looks for a __dhId prop on the component, and if not found, looks in the
|
|
8
|
+
* Looks for a __dhId prop on the component, and if not found, looks in the PanelIdContext.
|
|
10
9
|
* @param props The props of the component using this hook
|
|
11
10
|
* @returns The Deephaven ID of the component or null if not found.
|
|
12
11
|
*/
|
package/dist/useDhId.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDhId.d.ts","sourceRoot":"","sources":["../src/useDhId.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,WAAW,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"useDhId.d.ts","sourceRoot":"","sources":["../src/useDhId.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,WAAW,CAAC;AAEnC;;;;;;;;;GASG;AACH,wBAAgB,OAAO,IAAI,MAAM,GAAG,IAAI,CAwBvC"}
|
package/dist/useDhId.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { createContext, useContext } from 'react';
|
|
2
1
|
import Log from '@deephaven/log';
|
|
3
2
|
import { useFiber } from "./useFiber.js";
|
|
3
|
+
import { usePanelId } from "./usePanelId.js";
|
|
4
4
|
var log = Log.module('useDhId');
|
|
5
5
|
export var DH_ID_PROP = '__dhId';
|
|
6
|
-
export var DhIdContext = /*#__PURE__*/createContext(null);
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* Gets the Deephaven ID of a component.
|
|
@@ -11,7 +10,7 @@ export var DhIdContext = /*#__PURE__*/createContext(null);
|
|
|
11
10
|
* Usually this is just a panel ID, but in some contexts such as dh.ui,
|
|
12
11
|
* it may be an ID for a component within a panel.
|
|
13
12
|
*
|
|
14
|
-
* Looks for a __dhId prop on the component, and if not found, looks in the
|
|
13
|
+
* Looks for a __dhId prop on the component, and if not found, looks in the PanelIdContext.
|
|
15
14
|
* @param props The props of the component using this hook
|
|
16
15
|
* @returns The Deephaven ID of the component or null if not found.
|
|
17
16
|
*/
|
|
@@ -20,17 +19,17 @@ export function useDhId() {
|
|
|
20
19
|
// pendingProps are the props passed to the fiber node
|
|
21
20
|
var props = (_ref = (_useFiber = useFiber()) === null || _useFiber === void 0 ? void 0 : _useFiber.pendingProps) !== null && _ref !== void 0 ? _ref : {};
|
|
22
21
|
var dhIdProp = props[DH_ID_PROP];
|
|
23
|
-
var
|
|
22
|
+
var panelId = usePanelId();
|
|
24
23
|
if (dhIdProp != null) {
|
|
25
24
|
if (typeof dhIdProp !== 'string') {
|
|
26
25
|
throw new Error("useDhId expected prop ".concat(DH_ID_PROP, " to be a string, but got ").concat(typeof dhIdProp));
|
|
27
26
|
}
|
|
28
27
|
return dhIdProp;
|
|
29
28
|
}
|
|
30
|
-
if (
|
|
31
|
-
log.warn("useDhId must be used within a
|
|
29
|
+
if (panelId == null) {
|
|
30
|
+
log.warn("useDhId must be used within a PanelIdContext provider if there is no ".concat(DH_ID_PROP, " prop. Defaulting to null."));
|
|
32
31
|
return null;
|
|
33
32
|
}
|
|
34
|
-
return
|
|
33
|
+
return panelId;
|
|
35
34
|
}
|
|
36
35
|
//# sourceMappingURL=useDhId.js.map
|
package/dist/useDhId.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDhId.js","names":["
|
|
1
|
+
{"version":3,"file":"useDhId.js","names":["Log","useFiber","usePanelId","log","module","DH_ID_PROP","useDhId","_ref","_useFiber","props","pendingProps","dhIdProp","panelId","Error","concat","warn"],"sources":["../src/useDhId.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport { useFiber } from './useFiber';\nimport { usePanelId } from './usePanelId';\n\nconst log = Log.module('useDhId');\n\nexport const DH_ID_PROP = '__dhId';\n\n/**\n * Gets the Deephaven ID of a component.\n * This is used to identify the component within a dashboard.\n * Usually this is just a panel ID, but in some contexts such as dh.ui,\n * it may be an ID for a component within a panel.\n *\n * Looks for a __dhId prop on the component, and if not found, looks in the PanelIdContext.\n * @param props The props of the component using this hook\n * @returns The Deephaven ID of the component or null if not found.\n */\nexport function useDhId(): string | null {\n // pendingProps are the props passed to the fiber node\n const props =\n (useFiber()?.pendingProps as Record<string, unknown> | undefined) ?? {};\n const dhIdProp = props[DH_ID_PROP];\n const panelId = usePanelId();\n\n if (dhIdProp != null) {\n if (typeof dhIdProp !== 'string') {\n throw new Error(\n `useDhId expected prop ${DH_ID_PROP} to be a string, but got ${typeof dhIdProp}`\n );\n }\n return dhIdProp;\n }\n\n if (panelId == null) {\n log.warn(\n `useDhId must be used within a PanelIdContext provider if there is no ${DH_ID_PROP} prop. Defaulting to null.`\n );\n return null;\n }\n\n return panelId;\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAAC,SACxBC,QAAQ;AAAA,SACRC,UAAU;AAEnB,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,SAAS,CAAC;AAEjC,OAAO,IAAMC,UAAU,GAAG,QAAQ;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAAA,EAAkB;EAAA,IAAAC,IAAA,EAAAC,SAAA;EACvC;EACA,IAAMC,KAAK,IAAAF,IAAA,IAAAC,SAAA,GACRP,QAAQ,CAAC,CAAC,cAAAO,SAAA,uBAAVA,SAAA,CAAYE,YAAY,cAAAH,IAAA,cAAAA,IAAA,GAA4C,CAAC,CAAC;EACzE,IAAMI,QAAQ,GAAGF,KAAK,CAACJ,UAAU,CAAC;EAClC,IAAMO,OAAO,GAAGV,UAAU,CAAC,CAAC;EAE5B,IAAIS,QAAQ,IAAI,IAAI,EAAE;IACpB,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;MAChC,MAAM,IAAIE,KAAK,0BAAAC,MAAA,CACYT,UAAU,+BAAAS,MAAA,CAA4B,OAAOH,QAAQ,CAChF,CAAC;IACH;IACA,OAAOA,QAAQ;EACjB;EAEA,IAAIC,OAAO,IAAI,IAAI,EAAE;IACnBT,GAAG,CAACY,IAAI,yEAAAD,MAAA,CACkET,UAAU,+BACpF,CAAC;IACD,OAAO,IAAI;EACb;EAEA,OAAOO,OAAO;AAChB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context to provide the golden layout panel ID.
|
|
3
|
+
*/
|
|
4
|
+
export declare const PanelIdContext: import("react").Context<string | null>;
|
|
5
|
+
/**
|
|
6
|
+
* Gets the current panel ID from the nearest context.
|
|
7
|
+
* @returns The current panel ID from the context, or null if not set or there is no context.
|
|
8
|
+
*/
|
|
9
|
+
export declare function usePanelId(): string | null;
|
|
10
|
+
//# sourceMappingURL=usePanelId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelId.d.ts","sourceRoot":"","sources":["../src/usePanelId.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,cAAc,wCAAqC,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Context to provide the golden layout panel ID.
|
|
5
|
+
*/
|
|
6
|
+
export var PanelIdContext = /*#__PURE__*/createContext(null);
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Gets the current panel ID from the nearest context.
|
|
10
|
+
* @returns The current panel ID from the context, or null if not set or there is no context.
|
|
11
|
+
*/
|
|
12
|
+
export function usePanelId() {
|
|
13
|
+
return useContext(PanelIdContext);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=usePanelId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelId.js","names":["createContext","useContext","PanelIdContext","usePanelId"],"sources":["../src/usePanelId.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\n/**\n * Context to provide the golden layout panel ID.\n */\nexport const PanelIdContext = createContext<string | null>(null);\n\n/**\n * Gets the current panel ID from the nearest context.\n * @returns The current panel ID from the context, or null if not set or there is no context.\n */\nexport function usePanelId(): string | null {\n return useContext(PanelIdContext);\n}\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAEjD;AACA;AACA;AACA,OAAO,IAAMC,cAAc,gBAAGF,aAAa,CAAgB,IAAI,CAAC;;AAEhE;AACA;AACA;AACA;AACA,OAAO,SAASG,UAAUA,CAAA,EAAkB;EAC1C,OAAOF,UAAU,CAACC,cAAc,CAAC;AACnC"}
|