@vuu-ui/vuu-shell 2.1.18 → 2.1.19-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/package.json +17 -20
  2. package/src/ShellContextProvider.js +20 -0
  3. package/src/app-header/AppHeader.css.js +21 -0
  4. package/src/app-header/AppHeader.js +97 -0
  5. package/src/app-header/index.js +1 -0
  6. package/src/application-provider/ApplicationContext.js +9 -0
  7. package/src/application-provider/ApplicationProvider.js +77 -0
  8. package/src/application-provider/index.js +1 -0
  9. package/src/feature/Feature.js +37 -0
  10. package/src/feature/FeatureErrorBoundary.js +33 -0
  11. package/src/feature/Loader.js +5 -0
  12. package/src/feature/index.js +1 -0
  13. package/src/feature-and-layout-provider/FeatureAndLayoutProvider.js +42 -0
  14. package/src/feature-and-layout-provider/index.js +1 -0
  15. package/src/feature-list/FeatureList.css.js +62 -0
  16. package/src/feature-list/FeatureList.js +128 -0
  17. package/src/feature-list/index.js +1 -0
  18. package/src/get-layout-history.js +7 -0
  19. package/src/index.js +14 -0
  20. package/src/left-nav/LeftNav.css.js +177 -0
  21. package/src/left-nav/LeftNav.js +193 -0
  22. package/src/left-nav/index.js +1 -0
  23. package/src/login/LoginPanel.css.js +72 -0
  24. package/src/login/LoginPanel.js +124 -0
  25. package/src/login/VuuLogo.js +108 -0
  26. package/src/persistence-manager/LocalPersistenceManager.js +156 -0
  27. package/src/persistence-manager/PersistenceManager.js +0 -0
  28. package/src/persistence-manager/PersistenceProvider.js +14 -0
  29. package/src/persistence-manager/RemotePersistenceManager.js +123 -0
  30. package/src/persistence-manager/StaticPersistenceManager.js +53 -0
  31. package/src/persistence-manager/index.js +5 -0
  32. package/src/shell-layout-templates/context-panel/ContextPanel.css.js +66 -0
  33. package/src/shell-layout-templates/context-panel/ContextPanel.js +92 -0
  34. package/src/shell-layout-templates/context-panel/index.js +1 -0
  35. package/src/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +44 -0
  36. package/src/shell-layout-templates/index.js +3 -0
  37. package/src/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +68 -0
  38. package/src/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +32 -0
  39. package/src/shell-layout-templates/side-panel/SidePanel.css.js +9 -0
  40. package/src/shell-layout-templates/side-panel/SidePanel.js +31 -0
  41. package/src/shell-layout-templates/side-panel/index.js +1 -0
  42. package/src/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +38 -0
  43. package/src/shell-layout-templates/useShellLayout.js +15 -0
  44. package/src/shell.css.js +59 -0
  45. package/src/shell.js +108 -0
  46. package/src/theme-switch/ThemeSwitch.css.js +34 -0
  47. package/src/theme-switch/ThemeSwitch.js +50 -0
  48. package/src/theme-switch/index.js +1 -0
  49. package/src/user-settings/SettingsForm.css.js +10 -0
  50. package/src/user-settings/SettingsForm.js +141 -0
  51. package/src/user-settings/UserSettingsPanel.css.js +9 -0
  52. package/src/user-settings/UserSettingsPanel.js +29 -0
  53. package/src/user-settings/index.js +2 -0
  54. package/src/workspace-management/LayoutList.css.js +74 -0
  55. package/src/workspace-management/LayoutList.js +130 -0
  56. package/src/workspace-management/LayoutTile.css.js +31 -0
  57. package/src/workspace-management/LayoutTile.js +41 -0
  58. package/src/workspace-management/SaveLayoutPanel.css.js +123 -0
  59. package/src/workspace-management/SaveLayoutPanel.js +141 -0
  60. package/src/workspace-management/WorkspaceProvider.js +209 -0
  61. package/src/workspace-management/defaultWorkspaceJSON.js +88 -0
  62. package/src/workspace-management/index.js +5 -0
  63. package/src/workspace-management/screenshot-utils.js +13 -0
  64. package/src/workspace-management/useWorkspaceContextMenuItems.js +58 -0
  65. package/types/feature/FeatureErrorBoundary.d.ts +1 -1
  66. package/types/workspace-management/WorkspaceProvider.d.ts +5 -5
  67. package/cjs/ShellContextProvider.js +0 -25
  68. package/cjs/ShellContextProvider.js.map +0 -1
  69. package/cjs/app-header/AppHeader.css.js +0 -6
  70. package/cjs/app-header/AppHeader.css.js.map +0 -1
  71. package/cjs/app-header/AppHeader.js +0 -118
  72. package/cjs/app-header/AppHeader.js.map +0 -1
  73. package/cjs/application-provider/ApplicationContext.js +0 -17
  74. package/cjs/application-provider/ApplicationContext.js.map +0 -1
  75. package/cjs/application-provider/ApplicationProvider.js +0 -102
  76. package/cjs/application-provider/ApplicationProvider.js.map +0 -1
  77. package/cjs/feature/Feature.js +0 -54
  78. package/cjs/feature/Feature.js.map +0 -1
  79. package/cjs/feature/FeatureErrorBoundary.js +0 -30
  80. package/cjs/feature/FeatureErrorBoundary.js.map +0 -1
  81. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -60
  82. package/cjs/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  83. package/cjs/feature-list/FeatureList.css.js +0 -6
  84. package/cjs/feature-list/FeatureList.css.js.map +0 -1
  85. package/cjs/feature-list/FeatureList.js +0 -109
  86. package/cjs/feature-list/FeatureList.js.map +0 -1
  87. package/cjs/index.js +0 -71
  88. package/cjs/index.js.map +0 -1
  89. package/cjs/left-nav/LeftNav.css.js +0 -6
  90. package/cjs/left-nav/LeftNav.css.js.map +0 -1
  91. package/cjs/left-nav/LeftNav.js +0 -202
  92. package/cjs/left-nav/LeftNav.js.map +0 -1
  93. package/cjs/login/LoginPanel.css.js +0 -6
  94. package/cjs/login/LoginPanel.css.js.map +0 -1
  95. package/cjs/login/LoginPanel.js +0 -110
  96. package/cjs/login/LoginPanel.js.map +0 -1
  97. package/cjs/login/VuuLogo.js +0 -134
  98. package/cjs/login/VuuLogo.js.map +0 -1
  99. package/cjs/persistence-manager/LocalPersistenceManager.js +0 -193
  100. package/cjs/persistence-manager/LocalPersistenceManager.js.map +0 -1
  101. package/cjs/persistence-manager/PersistenceProvider.js +0 -21
  102. package/cjs/persistence-manager/PersistenceProvider.js.map +0 -1
  103. package/cjs/persistence-manager/RemotePersistenceManager.js +0 -165
  104. package/cjs/persistence-manager/RemotePersistenceManager.js.map +0 -1
  105. package/cjs/persistence-manager/StaticPersistenceManager.js +0 -73
  106. package/cjs/persistence-manager/StaticPersistenceManager.js.map +0 -1
  107. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js +0 -6
  108. package/cjs/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  109. package/cjs/shell-layout-templates/context-panel/ContextPanel.js +0 -100
  110. package/cjs/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  111. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -51
  112. package/cjs/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  113. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -83
  114. package/cjs/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  115. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -46
  116. package/cjs/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  117. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js +0 -6
  118. package/cjs/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  119. package/cjs/shell-layout-templates/side-panel/SidePanel.js +0 -36
  120. package/cjs/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  121. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -48
  122. package/cjs/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  123. package/cjs/shell-layout-templates/useShellLayout.js +0 -23
  124. package/cjs/shell-layout-templates/useShellLayout.js.map +0 -1
  125. package/cjs/shell.css.js +0 -6
  126. package/cjs/shell.css.js.map +0 -1
  127. package/cjs/shell.js +0 -137
  128. package/cjs/shell.js.map +0 -1
  129. package/cjs/theme-switch/ThemeSwitch.css.js +0 -6
  130. package/cjs/theme-switch/ThemeSwitch.css.js.map +0 -1
  131. package/cjs/theme-switch/ThemeSwitch.js +0 -56
  132. package/cjs/theme-switch/ThemeSwitch.js.map +0 -1
  133. package/cjs/user-settings/SettingsForm.css.js +0 -6
  134. package/cjs/user-settings/SettingsForm.css.js.map +0 -1
  135. package/cjs/user-settings/SettingsForm.js +0 -168
  136. package/cjs/user-settings/SettingsForm.js.map +0 -1
  137. package/cjs/user-settings/UserSettingsPanel.css.js +0 -6
  138. package/cjs/user-settings/UserSettingsPanel.css.js.map +0 -1
  139. package/cjs/user-settings/UserSettingsPanel.js +0 -42
  140. package/cjs/user-settings/UserSettingsPanel.js.map +0 -1
  141. package/cjs/workspace-management/LayoutList.css.js +0 -6
  142. package/cjs/workspace-management/LayoutList.css.js.map +0 -1
  143. package/cjs/workspace-management/LayoutList.js +0 -116
  144. package/cjs/workspace-management/LayoutList.js.map +0 -1
  145. package/cjs/workspace-management/LayoutTile.css.js +0 -6
  146. package/cjs/workspace-management/LayoutTile.css.js.map +0 -1
  147. package/cjs/workspace-management/LayoutTile.js +0 -41
  148. package/cjs/workspace-management/LayoutTile.js.map +0 -1
  149. package/cjs/workspace-management/SaveLayoutPanel.css.js +0 -6
  150. package/cjs/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  151. package/cjs/workspace-management/SaveLayoutPanel.js +0 -128
  152. package/cjs/workspace-management/SaveLayoutPanel.js.map +0 -1
  153. package/cjs/workspace-management/WorkspaceProvider.js +0 -265
  154. package/cjs/workspace-management/WorkspaceProvider.js.map +0 -1
  155. package/cjs/workspace-management/defaultWorkspaceJSON.js +0 -101
  156. package/cjs/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  157. package/cjs/workspace-management/screenshot-utils.js +0 -25
  158. package/cjs/workspace-management/screenshot-utils.js.map +0 -1
  159. package/cjs/workspace-management/useWorkspaceContextMenuItems.js +0 -72
  160. package/cjs/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
  161. package/esm/ShellContextProvider.js +0 -23
  162. package/esm/ShellContextProvider.js.map +0 -1
  163. package/esm/app-header/AppHeader.css.js +0 -4
  164. package/esm/app-header/AppHeader.css.js.map +0 -1
  165. package/esm/app-header/AppHeader.js +0 -116
  166. package/esm/app-header/AppHeader.js.map +0 -1
  167. package/esm/application-provider/ApplicationContext.js +0 -15
  168. package/esm/application-provider/ApplicationContext.js.map +0 -1
  169. package/esm/application-provider/ApplicationProvider.js +0 -96
  170. package/esm/application-provider/ApplicationProvider.js.map +0 -1
  171. package/esm/feature/Feature.js +0 -52
  172. package/esm/feature/Feature.js.map +0 -1
  173. package/esm/feature/FeatureErrorBoundary.js +0 -28
  174. package/esm/feature/FeatureErrorBoundary.js.map +0 -1
  175. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js +0 -56
  176. package/esm/feature-and-layout-provider/FeatureAndLayoutProvider.js.map +0 -1
  177. package/esm/feature-list/FeatureList.css.js +0 -4
  178. package/esm/feature-list/FeatureList.css.js.map +0 -1
  179. package/esm/feature-list/FeatureList.js +0 -107
  180. package/esm/feature-list/FeatureList.js.map +0 -1
  181. package/esm/index.js +0 -25
  182. package/esm/index.js.map +0 -1
  183. package/esm/left-nav/LeftNav.css.js +0 -4
  184. package/esm/left-nav/LeftNav.css.js.map +0 -1
  185. package/esm/left-nav/LeftNav.js +0 -200
  186. package/esm/left-nav/LeftNav.js.map +0 -1
  187. package/esm/login/LoginPanel.css.js +0 -4
  188. package/esm/login/LoginPanel.css.js.map +0 -1
  189. package/esm/login/LoginPanel.js +0 -108
  190. package/esm/login/LoginPanel.js.map +0 -1
  191. package/esm/login/VuuLogo.js +0 -132
  192. package/esm/login/VuuLogo.js.map +0 -1
  193. package/esm/persistence-manager/LocalPersistenceManager.js +0 -191
  194. package/esm/persistence-manager/LocalPersistenceManager.js.map +0 -1
  195. package/esm/persistence-manager/PersistenceProvider.js +0 -17
  196. package/esm/persistence-manager/PersistenceProvider.js.map +0 -1
  197. package/esm/persistence-manager/RemotePersistenceManager.js +0 -163
  198. package/esm/persistence-manager/RemotePersistenceManager.js.map +0 -1
  199. package/esm/persistence-manager/StaticPersistenceManager.js +0 -71
  200. package/esm/persistence-manager/StaticPersistenceManager.js.map +0 -1
  201. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js +0 -4
  202. package/esm/shell-layout-templates/context-panel/ContextPanel.css.js.map +0 -1
  203. package/esm/shell-layout-templates/context-panel/ContextPanel.js +0 -98
  204. package/esm/shell-layout-templates/context-panel/ContextPanel.js.map +0 -1
  205. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js +0 -49
  206. package/esm/shell-layout-templates/full-height-left-panel/useFullHeightLeftPanel.js.map +0 -1
  207. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js +0 -81
  208. package/esm/shell-layout-templates/inlay-left-panel/useInlayLeftPanel.js.map +0 -1
  209. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js +0 -44
  210. package/esm/shell-layout-templates/left-main-tabs/useLeftMainTabs.js.map +0 -1
  211. package/esm/shell-layout-templates/side-panel/SidePanel.css.js +0 -4
  212. package/esm/shell-layout-templates/side-panel/SidePanel.css.js.map +0 -1
  213. package/esm/shell-layout-templates/side-panel/SidePanel.js +0 -34
  214. package/esm/shell-layout-templates/side-panel/SidePanel.js.map +0 -1
  215. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js +0 -46
  216. package/esm/shell-layout-templates/simple-content-pane/useSimpleContentPane.js.map +0 -1
  217. package/esm/shell-layout-templates/useShellLayout.js +0 -21
  218. package/esm/shell-layout-templates/useShellLayout.js.map +0 -1
  219. package/esm/shell.css.js +0 -4
  220. package/esm/shell.css.js.map +0 -1
  221. package/esm/shell.js +0 -135
  222. package/esm/shell.js.map +0 -1
  223. package/esm/theme-switch/ThemeSwitch.css.js +0 -4
  224. package/esm/theme-switch/ThemeSwitch.css.js.map +0 -1
  225. package/esm/theme-switch/ThemeSwitch.js +0 -54
  226. package/esm/theme-switch/ThemeSwitch.js.map +0 -1
  227. package/esm/user-settings/SettingsForm.css.js +0 -4
  228. package/esm/user-settings/SettingsForm.css.js.map +0 -1
  229. package/esm/user-settings/SettingsForm.js +0 -162
  230. package/esm/user-settings/SettingsForm.js.map +0 -1
  231. package/esm/user-settings/UserSettingsPanel.css.js +0 -4
  232. package/esm/user-settings/UserSettingsPanel.css.js.map +0 -1
  233. package/esm/user-settings/UserSettingsPanel.js +0 -40
  234. package/esm/user-settings/UserSettingsPanel.js.map +0 -1
  235. package/esm/workspace-management/LayoutList.css.js +0 -4
  236. package/esm/workspace-management/LayoutList.css.js.map +0 -1
  237. package/esm/workspace-management/LayoutList.js +0 -114
  238. package/esm/workspace-management/LayoutList.js.map +0 -1
  239. package/esm/workspace-management/LayoutTile.css.js +0 -4
  240. package/esm/workspace-management/LayoutTile.css.js.map +0 -1
  241. package/esm/workspace-management/LayoutTile.js +0 -39
  242. package/esm/workspace-management/LayoutTile.js.map +0 -1
  243. package/esm/workspace-management/SaveLayoutPanel.css.js +0 -4
  244. package/esm/workspace-management/SaveLayoutPanel.css.js.map +0 -1
  245. package/esm/workspace-management/SaveLayoutPanel.js +0 -126
  246. package/esm/workspace-management/SaveLayoutPanel.js.map +0 -1
  247. package/esm/workspace-management/WorkspaceProvider.js +0 -262
  248. package/esm/workspace-management/WorkspaceProvider.js.map +0 -1
  249. package/esm/workspace-management/defaultWorkspaceJSON.js +0 -95
  250. package/esm/workspace-management/defaultWorkspaceJSON.js.map +0 -1
  251. package/esm/workspace-management/screenshot-utils.js +0 -23
  252. package/esm/workspace-management/screenshot-utils.js.map +0 -1
  253. package/esm/workspace-management/useWorkspaceContextMenuItems.js +0 -70
  254. package/esm/workspace-management/useWorkspaceContextMenuItems.js.map +0 -1
@@ -1,262 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { isLayoutJSON, resolveJSONPath } from '@vuu-ui/vuu-layout';
3
- import { useNotifications } from '@vuu-ui/vuu-notifications';
4
- import { logger, VuuShellLocation, WorkspaceContext } from '@vuu-ui/vuu-utils';
5
- import { useState, useRef, useCallback, useEffect, useContext } from 'react';
6
- import { usePersistenceManager } from '../persistence-manager/PersistenceProvider.js';
7
- import '../persistence-manager/LocalPersistenceManager.js';
8
- import '../persistence-manager/StaticPersistenceManager.js';
9
- import { getWorkspaceWithLayoutJSON, loadingJSON } from './defaultWorkspaceJSON.js';
10
-
11
- const { info } = logger("useLayoutManager");
12
- const ensureLayoutHasTitle = (layout, layoutMetadata) => {
13
- if (layout.props?.title !== void 0) {
14
- return layout;
15
- } else {
16
- return {
17
- ...layout,
18
- props: {
19
- ...layout.props,
20
- title: layoutMetadata.name
21
- }
22
- };
23
- }
24
- };
25
- const loadingApplicationJSON = {
26
- workspaceJSON: loadingJSON
27
- };
28
- const WorkspaceProvider = ({
29
- TabstripProps,
30
- children,
31
- layoutJSON,
32
- activeLayoutIndex,
33
- layoutPlaceholderJSON,
34
- showTabs,
35
- workspaceJSON: customWorkspaceJSON
36
- }) => {
37
- const [layoutMetadata, setLayoutMetadata] = useState([]);
38
- const [, forceRefresh] = useState({});
39
- const { showNotification } = useNotifications();
40
- const persistenceManager = usePersistenceManager();
41
- const applicationJSONRef = useRef(loadingApplicationJSON);
42
- const setApplicationJSON = useCallback(
43
- (applicationJSON, rerender = true) => {
44
- applicationJSONRef.current = applicationJSON;
45
- if (rerender) {
46
- forceRefresh({});
47
- }
48
- },
49
- []
50
- );
51
- const setWorkspaceJSON = useCallback(
52
- (workspaceJSON, rerender = true) => {
53
- setApplicationJSON(
54
- {
55
- ...applicationJSONRef.current,
56
- workspaceJSON
57
- },
58
- rerender
59
- );
60
- },
61
- [setApplicationJSON]
62
- );
63
- const setApplicationSettings = useCallback(
64
- (settings) => {
65
- setApplicationJSON(
66
- {
67
- ...applicationJSONRef.current,
68
- settings: {
69
- ...applicationJSONRef.current.settings,
70
- ...settings
71
- }
72
- },
73
- false
74
- );
75
- },
76
- [setApplicationJSON]
77
- );
78
- useEffect(() => {
79
- persistenceManager?.loadMetadata().then((metadata) => {
80
- setLayoutMetadata(metadata);
81
- }).catch((error) => {
82
- showNotification({
83
- content: "Could not load list of available layouts",
84
- header: "Failed to Load Layouts",
85
- status: "error",
86
- type: "toast"
87
- });
88
- console.error("Error occurred while retrieving metadata", error);
89
- });
90
- persistenceManager?.loadApplicationJSON().then((applicationJSON) => {
91
- if (applicationJSON) {
92
- info?.("applicationJSON loaded successfully");
93
- setApplicationJSON(applicationJSON);
94
- } else {
95
- const workspaceJSON = getWorkspaceWithLayoutJSON(
96
- customWorkspaceJSON,
97
- layoutJSON,
98
- activeLayoutIndex,
99
- { TabstripProps, showTabs }
100
- );
101
- info?.(`applicationJSON not found, getting defaultWorkspaceJSON,
102
- ${JSON.stringify(workspaceJSON, null, 2)}
103
- `);
104
- setApplicationJSON({
105
- workspaceJSON
106
- });
107
- }
108
- }).catch((error) => {
109
- showNotification({
110
- content: "Could not load your latest view",
111
- header: "Failed to Load Layout",
112
- status: "error",
113
- type: "toast"
114
- });
115
- console.error(
116
- "Error occurred while retrieving application layout",
117
- error
118
- );
119
- });
120
- }, [
121
- TabstripProps,
122
- activeLayoutIndex,
123
- customWorkspaceJSON,
124
- layoutJSON,
125
- showNotification,
126
- persistenceManager,
127
- setApplicationJSON,
128
- showTabs
129
- ]);
130
- const saveApplicationLayout = useCallback(
131
- (layout) => {
132
- if (isLayoutJSON(layout)) {
133
- setWorkspaceJSON(layout, false);
134
- persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
135
- } else {
136
- console.error("Tried to save invalid application layout", layout);
137
- }
138
- },
139
- [persistenceManager, setWorkspaceJSON]
140
- );
141
- const saveLayout = useCallback(
142
- (metadata) => {
143
- let layoutToSave;
144
- try {
145
- const { workspaceJSON } = applicationJSONRef.current;
146
- if (Array.isArray(workspaceJSON)) {
147
- console.log("how do we identify the right thing to save");
148
- } else {
149
- layoutToSave = resolveJSONPath(
150
- workspaceJSON,
151
- `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`
152
- );
153
- }
154
- } catch (e) {
155
- }
156
- if (layoutToSave && isLayoutJSON(layoutToSave)) {
157
- persistenceManager?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata)).then((metadata2) => {
158
- showNotification({
159
- content: `${metadata2.name} saved successfully`,
160
- header: "Layout Saved Successfully",
161
- status: "success",
162
- type: "toast"
163
- });
164
- setLayoutMetadata((prev) => [...prev, metadata2]);
165
- }).catch((error) => {
166
- showNotification({
167
- content: `Failed to save layout ${metadata.name}`,
168
- header: "Failed to Save Layout",
169
- status: "error",
170
- type: "toast"
171
- });
172
- console.error("Error occurred while saving layout", error);
173
- });
174
- } else {
175
- console.error("Tried to save invalid layout", layoutToSave);
176
- showNotification({
177
- content: "Cannot save invalid layout",
178
- header: "Failed to Save Layout",
179
- status: "error",
180
- type: "toast"
181
- });
182
- }
183
- },
184
- [showNotification, persistenceManager]
185
- );
186
- const saveApplicationSettings = useCallback(
187
- (settings, key) => {
188
- const { settings: applicationSettings } = applicationJSONRef.current;
189
- if (key) {
190
- setApplicationSettings({
191
- ...applicationSettings,
192
- [key]: settings
193
- });
194
- } else {
195
- setApplicationSettings(settings);
196
- }
197
- persistenceManager?.saveApplicationJSON(applicationJSONRef.current);
198
- },
199
- [persistenceManager, setApplicationSettings]
200
- );
201
- const getApplicationSettings = useCallback(
202
- (key) => {
203
- const { settings } = applicationJSONRef.current;
204
- return key ? settings?.[key] : settings;
205
- },
206
- []
207
- );
208
- const loadLayoutById = useCallback(
209
- (id) => {
210
- persistenceManager?.loadLayout(id).then((layoutJson) => {
211
- const { workspaceJSON: currentLayout } = applicationJSONRef.current;
212
- if (Array.isArray(currentLayout)) {
213
- console.log("how do we deal witha amulti layoput");
214
- } else {
215
- setWorkspaceJSON({
216
- ...currentLayout,
217
- children: (currentLayout.children || []).concat(layoutJson),
218
- props: {
219
- ...currentLayout.props,
220
- active: currentLayout.children?.length ?? 0
221
- }
222
- });
223
- }
224
- }).catch((error) => {
225
- showNotification({
226
- content: "Failed to load the requested layout",
227
- header: "Failed to Load Layout",
228
- status: "error",
229
- type: "toast"
230
- });
231
- console.error("Error occurred while loading layout", error);
232
- });
233
- },
234
- [showNotification, persistenceManager, setWorkspaceJSON]
235
- );
236
- return /* @__PURE__ */ jsx(
237
- WorkspaceContext.Provider,
238
- {
239
- value: {
240
- getApplicationSettings,
241
- layoutMetadata,
242
- layoutPlaceholderJSON,
243
- saveLayout,
244
- workspaceJSON: applicationJSONRef.current.workspaceJSON,
245
- saveApplicationLayout,
246
- saveApplicationSettings,
247
- loadLayoutById
248
- },
249
- children
250
- }
251
- );
252
- };
253
- const useWorkspace = () => {
254
- const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } = useContext(WorkspaceContext);
255
- return {
256
- ...contextProps,
257
- workspaceJSON
258
- };
259
- };
260
-
261
- export { WorkspaceProvider, useWorkspace };
262
- //# sourceMappingURL=WorkspaceProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkspaceProvider.js","sources":["../../../../packages/vuu-shell/src/workspace-management/WorkspaceProvider.tsx"],"sourcesContent":["import { isLayoutJSON, resolveJSONPath } from \"@vuu-ui/vuu-layout\";\nimport { useNotifications } from \"@vuu-ui/vuu-notifications\";\nimport {\n LayoutMetadata,\n LayoutMetadataDto,\n VuuShellLocation,\n WorkspaceContext,\n logger,\n type ApplicationJSON,\n type ApplicationSetting,\n type ApplicationSettings,\n type LayoutJSON,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { usePersistenceManager } from \"../persistence-manager\";\nimport {\n getWorkspaceWithLayoutJSON,\n loadingJSON,\n type WorkspaceStackProps,\n} from \"./defaultWorkspaceJSON\";\n\nconst { info } = logger(\"useLayoutManager\");\n\nexport type WorkspaceProps = WorkspaceStackProps & {\n layoutPlaceholderJSON?: LayoutJSON;\n /**\n * layoutJSON defines the default layout to render on first load and until such time as\n * layout state has been persisted. After that, the persisted state will be rendered.\n */\n layoutJSON?: LayoutJSON | LayoutJSON[];\n activeLayoutIndex?: number;\n /**\n * The Vuu workspace is the container into which layouts are loaded. By default, it will be\n * a Tabbed Panel (Stack + Tabstrip), showing a tab per Layout.\n */\n workspaceJSON?: LayoutJSON | LayoutJSON[];\n};\n\nexport interface WorkspaceProviderProps extends WorkspaceProps {\n children: ReactElement | ReactElement[];\n\n /**\n * layoutPlaceholderJSON defines the layout to render when a new workspace layout is created.\n */\n layoutPlaceholderJSON?: LayoutJSON;\n}\n\nconst ensureLayoutHasTitle = (\n layout: LayoutJSON,\n layoutMetadata: LayoutMetadataDto,\n) => {\n if (layout.props?.title !== undefined) {\n return layout;\n } else {\n return {\n ...layout,\n props: {\n ...layout.props,\n title: layoutMetadata.name,\n },\n };\n }\n};\n\nconst loadingApplicationJSON: ApplicationJSON = {\n workspaceJSON: loadingJSON,\n};\n\n/**\n * LayoutManagementProvider supplies an API for loading and saving layout documents.\n * Initial layout is automatically loaded on startup. Because this hook is responsible\n * only for loading and saving layouts, it only triggers a render when content is loaded.\n *\n * Initial layout displays a loading state\n * User may supply a default layout. This will not be displayed until call has been made to\n * persistenceManager to retrieve stored layout state. If no stored state is returned, the\n * default layout provided by user will be set as current state (and hence rendered). If no\n * default layout has been provided by user, the sysem default will be used (simple PlaceHolder)\n * If saved layout state has been returned, that will be set as current state (and rendered)\n *\n */\nexport const WorkspaceProvider = ({\n TabstripProps,\n children,\n layoutJSON,\n activeLayoutIndex,\n layoutPlaceholderJSON,\n showTabs,\n workspaceJSON: customWorkspaceJSON,\n}: WorkspaceProviderProps) => {\n const [layoutMetadata, setLayoutMetadata] = useState<LayoutMetadata[]>([]);\n // TODO this default should probably be a loading state rather than the placeholder\n // It will be replaced as soon as the localStorage/remote layout is resolved\n const [, forceRefresh] = useState({});\n const { showNotification } = useNotifications();\n const persistenceManager = usePersistenceManager();\n const applicationJSONRef = useRef<ApplicationJSON>(loadingApplicationJSON);\n\n const setApplicationJSON = useCallback(\n (applicationJSON: ApplicationJSON, rerender = true) => {\n applicationJSONRef.current = applicationJSON;\n if (rerender) {\n forceRefresh({});\n }\n },\n [],\n );\n\n const setWorkspaceJSON = useCallback(\n (workspaceJSON: LayoutJSON, rerender = true) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n workspaceJSON,\n },\n rerender,\n );\n },\n [setApplicationJSON],\n );\n\n const setApplicationSettings = useCallback(\n (settings: ApplicationSettings) => {\n setApplicationJSON(\n {\n ...applicationJSONRef.current,\n settings: {\n ...applicationJSONRef.current.settings,\n ...settings,\n },\n },\n false,\n );\n },\n [setApplicationJSON],\n );\n\n useEffect(() => {\n //TODO this does not need to be done ahead of time\n persistenceManager\n ?.loadMetadata()\n .then((metadata) => {\n setLayoutMetadata(metadata);\n })\n .catch((error: Error) => {\n showNotification({\n content: \"Could not load list of available layouts\",\n header: \"Failed to Load Layouts\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while retrieving metadata\", error);\n });\n\n persistenceManager\n ?.loadApplicationJSON()\n .then((applicationJSON?: ApplicationJSON) => {\n if (applicationJSON) {\n info?.(\"applicationJSON loaded successfully\");\n setApplicationJSON(applicationJSON);\n } else {\n // No applicationJSON has been saved yet. Construct our\n // initial applicationJSON from user configuration and\n // default values.\n const workspaceJSON = getWorkspaceWithLayoutJSON(\n customWorkspaceJSON,\n layoutJSON,\n activeLayoutIndex,\n { TabstripProps, showTabs },\n );\n info?.(`applicationJSON not found, getting defaultWorkspaceJSON,\n ${JSON.stringify(workspaceJSON, null, 2)}\n `);\n setApplicationJSON({\n workspaceJSON,\n });\n }\n })\n .catch((error: Error) => {\n showNotification({\n content: \"Could not load your latest view\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\n \"Error occurred while retrieving application layout\",\n error,\n );\n });\n }, [\n TabstripProps,\n activeLayoutIndex,\n customWorkspaceJSON,\n layoutJSON,\n showNotification,\n persistenceManager,\n setApplicationJSON,\n showTabs,\n ]);\n\n const saveApplicationLayout = useCallback(\n (layout: LayoutJSON) => {\n if (isLayoutJSON(layout)) {\n setWorkspaceJSON(layout, false);\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n } else {\n console.error(\"Tried to save invalid application layout\", layout);\n }\n },\n [persistenceManager, setWorkspaceJSON],\n );\n\n const saveLayout = useCallback(\n (metadata: LayoutMetadataDto) => {\n let layoutToSave: LayoutJSON | undefined;\n try {\n const { workspaceJSON } = applicationJSONRef.current;\n if (Array.isArray(workspaceJSON)) {\n console.log(\"how do we identify the right thing to save\");\n } else {\n layoutToSave = resolveJSONPath(\n workspaceJSON,\n `#${VuuShellLocation.Workspace}.ACTIVE_CHILD`,\n );\n }\n } catch (e) {\n // ignore, code below will handle\n }\n\n if (layoutToSave && isLayoutJSON(layoutToSave)) {\n persistenceManager\n ?.createLayout(metadata, ensureLayoutHasTitle(layoutToSave, metadata))\n .then((metadata) => {\n showNotification({\n content: `${metadata.name} saved successfully`,\n header: \"Layout Saved Successfully\",\n status: \"success\",\n type: \"toast\",\n });\n setLayoutMetadata((prev) => [...prev, metadata]);\n })\n .catch((error: Error) => {\n showNotification({\n content: `Failed to save layout ${metadata.name}`,\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while saving layout\", error);\n });\n } else {\n console.error(\"Tried to save invalid layout\", layoutToSave);\n showNotification({\n content: \"Cannot save invalid layout\",\n header: \"Failed to Save Layout\",\n status: \"error\",\n type: \"toast\",\n });\n }\n },\n [showNotification, persistenceManager],\n );\n\n const saveApplicationSettings = useCallback(\n (\n settings: ApplicationSettings | ApplicationSetting,\n key?: keyof ApplicationSettings,\n ) => {\n const { settings: applicationSettings } = applicationJSONRef.current;\n if (key) {\n setApplicationSettings({\n ...applicationSettings,\n [key]: settings,\n });\n } else {\n setApplicationSettings(settings as ApplicationSettings);\n }\n persistenceManager?.saveApplicationJSON(applicationJSONRef.current);\n },\n [persistenceManager, setApplicationSettings],\n );\n\n const getApplicationSettings = useCallback(\n (key?: keyof ApplicationSettings) => {\n const { settings } = applicationJSONRef.current;\n return key ? settings?.[key] : settings;\n },\n [],\n );\n\n const loadLayoutById = useCallback(\n (id: string) => {\n persistenceManager\n ?.loadLayout(id)\n .then((layoutJson) => {\n const { workspaceJSON: currentLayout } = applicationJSONRef.current;\n if (Array.isArray(currentLayout)) {\n console.log(\"how do we deal witha amulti layoput\");\n } else {\n setWorkspaceJSON({\n ...currentLayout,\n children: (currentLayout.children || []).concat(layoutJson),\n props: {\n ...currentLayout.props,\n active: currentLayout.children?.length ?? 0,\n },\n });\n }\n })\n .catch((error: Error) => {\n showNotification({\n content: \"Failed to load the requested layout\",\n header: \"Failed to Load Layout\",\n status: \"error\",\n type: \"toast\",\n });\n console.error(\"Error occurred while loading layout\", error);\n });\n },\n [showNotification, persistenceManager, setWorkspaceJSON],\n );\n\n return (\n <WorkspaceContext.Provider\n value={{\n getApplicationSettings,\n layoutMetadata,\n layoutPlaceholderJSON,\n saveLayout,\n workspaceJSON: applicationJSONRef.current.workspaceJSON,\n saveApplicationLayout,\n saveApplicationSettings,\n loadLayoutById,\n }}\n >\n {children}\n </WorkspaceContext.Provider>\n );\n};\n\nexport const useWorkspace = () => {\n // The default Application JSON will be served if no LayoutManagementProvider\n const { workspaceJSON = getWorkspaceWithLayoutJSON(), ...contextProps } =\n useContext(WorkspaceContext);\n\n return {\n ...contextProps,\n workspaceJSON,\n };\n};\n"],"names":["metadata"],"mappings":"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"}
@@ -1,95 +0,0 @@
1
- import { VuuShellLocation } from '@vuu-ui/vuu-utils';
2
-
3
- const warningLayout = {
4
- type: "View",
5
- props: {
6
- style: { height: "calc(100% - 6px)" }
7
- },
8
- children: [
9
- {
10
- props: {
11
- className: "vuuShell-warningPlaceholder"
12
- },
13
- type: "Placeholder"
14
- }
15
- ]
16
- };
17
- const loadingJSON = {
18
- type: "Component",
19
- id: "loading-main",
20
- props: {}
21
- };
22
- const defaultWorkspaceJSON = {
23
- type: "Stack",
24
- id: VuuShellLocation.Workspace,
25
- props: {
26
- className: `${VuuShellLocation.Workspace}-tabs`,
27
- TabstripProps: {
28
- allowAddTab: true,
29
- allowCloseTab: true,
30
- allowRenameTab: true,
31
- animateSelectionThumb: false,
32
- "aria-label": "Workspace Tabs",
33
- location: "workspace-tab",
34
- variant: "primary"
35
- },
36
- preserve: true
37
- }
38
- };
39
- const getStackWorkspaceJSON = (activeLayoutIndex) => ({
40
- ...defaultWorkspaceJSON,
41
- active: activeLayoutIndex ?? 0
42
- });
43
- const placeholderLayout = {
44
- props: {
45
- id: "tab1",
46
- title: "Tab 1",
47
- className: "vuuShell-Placeholder"
48
- },
49
- type: "Placeholder"
50
- };
51
- const getWorkspaceWithLayoutJSON = (customWorkspaceJSON, layoutJSON = placeholderLayout, activeLayoutIndex, stackProps) => {
52
- const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);
53
- if (Array.isArray(customWorkspaceJSON)) {
54
- const workspace = customWorkspaceJSON.find(
55
- (layout) => layout.id === VuuShellLocation.Workspace
56
- );
57
- if (workspace) {
58
- return customWorkspaceJSON.map((ws) => {
59
- if (ws.id === VuuShellLocation.Workspace) {
60
- return {
61
- ...ws,
62
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
63
- };
64
- } else {
65
- return ws;
66
- }
67
- });
68
- } else {
69
- throw Error(
70
- "Multiple workspaces have been provided but none has the workspace id"
71
- );
72
- }
73
- } else if (customWorkspaceJSON) {
74
- return {
75
- ...customWorkspaceJSON,
76
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
77
- };
78
- } else {
79
- return {
80
- ...stackWorkspace,
81
- props: {
82
- ...stackWorkspace.props,
83
- ...stackProps,
84
- TabstripProps: {
85
- ...stackWorkspace.props?.TabstripProps,
86
- ...stackProps?.TabstripProps
87
- }
88
- },
89
- children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON]
90
- };
91
- }
92
- };
93
-
94
- export { defaultWorkspaceJSON, getStackWorkspaceJSON, getWorkspaceWithLayoutJSON, loadingJSON, warningLayout };
95
- //# sourceMappingURL=defaultWorkspaceJSON.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaultWorkspaceJSON.js","sources":["../../../../packages/vuu-shell/src/workspace-management/defaultWorkspaceJSON.ts"],"sourcesContent":["import { StackProps } from \"@vuu-ui/vuu-layout\";\nimport { LayoutJSON, VuuShellLocation } from \"@vuu-ui/vuu-utils\";\n\nexport type WorkspaceStackProps = Pick<\n StackProps,\n \"showTabs\" | \"TabstripProps\"\n>;\n\nexport const warningLayout: LayoutJSON = {\n type: \"View\",\n props: {\n style: { height: \"calc(100% - 6px)\" },\n },\n children: [\n {\n props: {\n className: \"vuuShell-warningPlaceholder\",\n },\n type: \"Placeholder\",\n },\n ],\n};\n\nexport const loadingJSON: Readonly<LayoutJSON> = {\n type: \"Component\",\n id: \"loading-main\",\n props: {},\n};\n\nexport const defaultWorkspaceJSON: LayoutJSON<\n StackProps & { preserve: boolean }\n> = {\n type: \"Stack\",\n id: VuuShellLocation.Workspace,\n props: {\n className: `${VuuShellLocation.Workspace}-tabs`,\n TabstripProps: {\n allowAddTab: true,\n allowCloseTab: true,\n allowRenameTab: true,\n animateSelectionThumb: false,\n \"aria-label\": \"Workspace Tabs\",\n location: \"workspace-tab\",\n variant: \"primary\",\n },\n preserve: true,\n },\n};\n\nexport const getStackWorkspaceJSON = (\n activeLayoutIndex?: number,\n): LayoutJSON => ({\n ...defaultWorkspaceJSON,\n active: activeLayoutIndex ?? 0,\n});\n\nconst placeholderLayout: LayoutJSON = {\n props: {\n id: \"tab1\",\n title: \"Tab 1\",\n className: \"vuuShell-Placeholder\",\n },\n type: \"Placeholder\",\n};\n\nexport const getWorkspaceWithLayoutJSON = (\n customWorkspaceJSON?: LayoutJSON | LayoutJSON[],\n layoutJSON: LayoutJSON | LayoutJSON[] = placeholderLayout,\n activeLayoutIndex?: number,\n stackProps?: WorkspaceStackProps,\n): LayoutJSON | LayoutJSON[] => {\n const stackWorkspace = getStackWorkspaceJSON(activeLayoutIndex);\n if (Array.isArray(customWorkspaceJSON)) {\n const workspace = customWorkspaceJSON.find(\n (layout) => layout.id === VuuShellLocation.Workspace,\n );\n if (workspace) {\n return customWorkspaceJSON.map((ws) => {\n if (ws.id === VuuShellLocation.Workspace) {\n return {\n ...ws,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return ws;\n }\n });\n } else {\n throw Error(\n \"Multiple workspaces have been provided but none has the workspace id\",\n );\n }\n } else if (customWorkspaceJSON) {\n return {\n ...customWorkspaceJSON,\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n } else {\n return {\n ...stackWorkspace,\n props: {\n ...stackWorkspace.props,\n ...stackProps,\n TabstripProps: {\n ...stackWorkspace.props?.TabstripProps,\n ...stackProps?.TabstripProps,\n },\n },\n children: Array.isArray(layoutJSON) ? layoutJSON : [layoutJSON],\n };\n }\n};\n"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { toPng } from 'html-to-image';
2
-
3
- const takeScreenshot = (node) => {
4
- return new Promise((resolve, reject) => {
5
- toPng(node, {
6
- cacheBust: true
7
- }).then((screenshot) => {
8
- if (!screenshot) {
9
- reject(new Error("No Screenshot available"));
10
- }
11
- resolve(screenshot);
12
- }).catch((error) => {
13
- console.error(
14
- "the following error occurred while taking a screenshot of a DOMNode",
15
- error
16
- );
17
- reject(new Error("Error taking screenshot"));
18
- });
19
- });
20
- };
21
-
22
- export { takeScreenshot };
23
- //# sourceMappingURL=screenshot-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screenshot-utils.js","sources":["../../../../packages/vuu-shell/src/workspace-management/screenshot-utils.ts"],"sourcesContent":["import { toPng } from \"html-to-image\";\n\n/**\n * Takes a screenshot of the given node and returns the base64 encoded image url\n * @param node HTMLElement to take screenshot of\n * @returns Base64 encoded image url\n */\nexport const takeScreenshot = (node: HTMLElement): Promise<string> => {\n return new Promise((resolve, reject) => {\n toPng(node, {\n cacheBust: true /*,\n filter: (child) =>\n // remove content of table rows\n child.nodeType === Node.TEXT_NODE ||\n child.getAttribute(\"role\") !== \"row\",*/,\n })\n .then((screenshot) => {\n if (!screenshot) {\n reject(new Error(\"No Screenshot available\"));\n }\n resolve(screenshot);\n })\n .catch((error: Error) => {\n console.error(\n \"the following error occurred while taking a screenshot of a DOMNode\",\n error\n );\n reject(new Error(\"Error taking screenshot\"));\n });\n });\n};\n"],"names":[],"mappings":";;AAOa,MAAA,cAAA,GAAiB,CAAC,IAAuC,KAAA;AACpE,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MACV,SAAW,EAAA;AAAA,KAKZ,CAAA,CACE,IAAK,CAAA,CAAC,UAAe,KAAA;AACpB,MAAA,IAAI,CAAC,UAAY,EAAA;AACf,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA;AAAA;AAE7C,MAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,KACnB,CAAA,CACA,KAAM,CAAA,CAAC,KAAiB,KAAA;AACvB,MAAQ,OAAA,CAAA,KAAA;AAAA,QACN,qEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,yBAAyB,CAAC,CAAA;AAAA,KAC5C,CAAA;AAAA,GACJ,CAAA;AACH;;;;"}
@@ -1,70 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useModal } from '@vuu-ui/vuu-ui-controls';
3
- import { useCallback, useMemo } from 'react';
4
- import { SaveLayoutPanel } from './SaveLayoutPanel.js';
5
- import { useWorkspace } from './WorkspaceProvider.js';
6
-
7
- const useWorkspaceContextMenuItems = () => {
8
- const { saveLayout } = useWorkspace();
9
- const { showDialog, closeDialog } = useModal();
10
- const handleCloseDialog = useCallback(() => {
11
- closeDialog();
12
- }, [closeDialog]);
13
- const handleSave = useCallback(
14
- (layoutMetadata) => {
15
- saveLayout(layoutMetadata);
16
- closeDialog();
17
- },
18
- [saveLayout, closeDialog]
19
- );
20
- const [buildMenuOptions, handleMenuAction] = useMemo(() => {
21
- return [
22
- (location, options) => {
23
- const locations = location.split(" ");
24
- const menuDescriptors = [];
25
- if (locations.includes("workspace-tab")) {
26
- menuDescriptors.push(
27
- {
28
- label: "Save Layout",
29
- id: "save-layout",
30
- options
31
- },
32
- {
33
- label: "Layout Settings",
34
- id: "layout-settings",
35
- options
36
- }
37
- );
38
- }
39
- return menuDescriptors;
40
- },
41
- (menuItemId, options) => {
42
- if (menuItemId === "save-layout") {
43
- showDialog(
44
- /* @__PURE__ */ jsx(
45
- SaveLayoutPanel,
46
- {
47
- onCancel: handleCloseDialog,
48
- onSave: handleSave,
49
- componentId: options?.controlledComponentId,
50
- defaultTitle: options?.controlledComponentTitle
51
- }
52
- ),
53
- "Save Layout",
54
- [],
55
- true
56
- );
57
- return true;
58
- }
59
- return false;
60
- }
61
- ];
62
- }, [handleCloseDialog, handleSave, showDialog]);
63
- return {
64
- buildMenuOptions,
65
- handleMenuAction
66
- };
67
- };
68
-
69
- export { useWorkspaceContextMenuItems };
70
- //# sourceMappingURL=useWorkspaceContextMenuItems.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWorkspaceContextMenuItems.js","sources":["../../../../packages/vuu-shell/src/workspace-management/useWorkspaceContextMenuItems.tsx"],"sourcesContent":["import {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport { TabContextMenuOptions, useModal } from \"@vuu-ui/vuu-ui-controls\";\nimport { type LayoutMetadataDto } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo } from \"react\";\nimport { SaveLayoutPanel } from \"./SaveLayoutPanel\";\nimport { useWorkspace } from \"./WorkspaceProvider\";\n\nexport const useWorkspaceContextMenuItems = () => {\n const { saveLayout } = useWorkspace();\n\n const { showDialog, closeDialog } = useModal();\n\n const handleCloseDialog = useCallback(() => {\n closeDialog();\n }, [closeDialog]);\n\n const handleSave = useCallback(\n (layoutMetadata: LayoutMetadataDto) => {\n saveLayout(layoutMetadata);\n closeDialog();\n },\n [saveLayout, closeDialog],\n );\n\n const [buildMenuOptions, handleMenuAction] = useMemo<\n [MenuBuilder, MenuActionHandler]\n >(() => {\n return [\n (location, options) => {\n const locations = location.split(\" \");\n const menuDescriptors: ContextMenuItemDescriptor[] = [];\n if (locations.includes(\"workspace-tab\")) {\n menuDescriptors.push(\n {\n label: \"Save Layout\",\n id: \"save-layout\",\n options,\n },\n {\n label: \"Layout Settings\",\n id: \"layout-settings\",\n options,\n },\n );\n }\n return menuDescriptors;\n },\n (menuItemId, options) => {\n if (menuItemId === \"save-layout\") {\n showDialog(\n <SaveLayoutPanel\n onCancel={handleCloseDialog}\n onSave={handleSave}\n componentId={\n (options as TabContextMenuOptions)?.controlledComponentId\n }\n defaultTitle={\n (options as TabContextMenuOptions)?.controlledComponentTitle\n }\n />,\n \"Save Layout\",\n [],\n true,\n );\n return true;\n }\n return false;\n },\n ];\n }, [handleCloseDialog, handleSave, showDialog]);\n\n return {\n buildMenuOptions,\n handleMenuAction,\n };\n};\n"],"names":[],"mappings":";;;;;;AAWO,MAAM,+BAA+B,MAAM;AAChD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,YAAa,EAAA;AAEpC,EAAA,MAAM,EAAE,UAAA,EAAY,WAAY,EAAA,GAAI,QAAS,EAAA;AAE7C,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAY,WAAA,EAAA;AAAA,GACd,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,UAAa,GAAA,WAAA;AAAA,IACjB,CAAC,cAAsC,KAAA;AACrC,MAAA,UAAA,CAAW,cAAc,CAAA;AACzB,MAAY,WAAA,EAAA;AAAA,KACd;AAAA,IACA,CAAC,YAAY,WAAW;AAAA,GAC1B;AAEA,EAAA,MAAM,CAAC,gBAAA,EAAkB,gBAAgB,CAAA,GAAI,QAE3C,MAAM;AACN,IAAO,OAAA;AAAA,MACL,CAAC,UAAU,OAAY,KAAA;AACrB,QAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA;AACpC,QAAA,MAAM,kBAA+C,EAAC;AACtD,QAAI,IAAA,SAAA,CAAU,QAAS,CAAA,eAAe,CAAG,EAAA;AACvC,UAAgB,eAAA,CAAA,IAAA;AAAA,YACd;AAAA,cACE,KAAO,EAAA,aAAA;AAAA,cACP,EAAI,EAAA,aAAA;AAAA,cACJ;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,iBAAA;AAAA,cACP,EAAI,EAAA,iBAAA;AAAA,cACJ;AAAA;AACF,WACF;AAAA;AAEF,QAAO,OAAA,eAAA;AAAA,OACT;AAAA,MACA,CAAC,YAAY,OAAY,KAAA;AACvB,QAAA,IAAI,eAAe,aAAe,EAAA;AAChC,UAAA,UAAA;AAAA,4BACE,GAAA;AAAA,cAAC,eAAA;AAAA,cAAA;AAAA,gBACC,QAAU,EAAA,iBAAA;AAAA,gBACV,MAAQ,EAAA,UAAA;AAAA,gBACR,aACG,OAAmC,EAAA,qBAAA;AAAA,gBAEtC,cACG,OAAmC,EAAA;AAAA;AAAA,aAExC;AAAA,YACA,aAAA;AAAA,YACA,EAAC;AAAA,YACD;AAAA,WACF;AACA,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA;AAAA;AACT,KACF;AAAA,GACC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAE9C,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}