@finsemble/finsemble-ui 6.6.0 → 7.0.0-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 (262) hide show
  1. package/package.json +18 -32
  2. package/react/assets/css/button.css +1 -1
  3. package/react/assets/css/favorites.css +0 -47
  4. package/react/assets/css/finsemble.css +3 -0
  5. package/react/assets/css/linkerWindow.css +13 -1
  6. package/react/assets/css/menus.css +2 -2
  7. package/react/assets/css/notificationsCenter.css +32 -1
  8. package/react/assets/css/shared/common.css +40 -0
  9. package/react/assets/css/userPreferences.css +17 -12
  10. package/react/assets/css/windowTitleBar.css +7 -0
  11. package/react/assets/icons/server.svg +26 -0
  12. package/react/components/common/ButtonIcon.js +1 -1
  13. package/react/components/common/ButtonIcon.js.map +1 -1
  14. package/react/components/common/ButtonRow.js +2 -2
  15. package/react/components/common/ButtonRow.js.map +1 -1
  16. package/react/components/common/Checkbox.js +1 -1
  17. package/react/components/common/Checkbox.js.map +1 -1
  18. package/react/components/common/ColorPicker.js +16 -15
  19. package/react/components/common/ColorPicker.js.map +1 -1
  20. package/react/components/common/ErrorBoundary.d.ts +16 -0
  21. package/react/components/common/ErrorBoundary.js +22 -0
  22. package/react/components/common/ErrorBoundary.js.map +1 -0
  23. package/react/components/common/FinsembleIcon.d.ts +3 -2
  24. package/react/components/common/FinsembleIcon.js +10 -3
  25. package/react/components/common/FinsembleIcon.js.map +1 -1
  26. package/react/components/common/FinsembleLink.d.ts +6 -0
  27. package/react/components/common/FinsembleLink.js +12 -0
  28. package/react/components/common/FinsembleLink.js.map +1 -0
  29. package/react/components/common/FinsembleToggle.d.ts +1 -2
  30. package/react/components/common/FinsembleToggle.js +2 -6
  31. package/react/components/common/FinsembleToggle.js.map +1 -1
  32. package/react/components/common/FinsembleToggleButtonBar.d.ts +13 -0
  33. package/react/components/common/FinsembleToggleButtonBar.js +44 -0
  34. package/react/components/common/FinsembleToggleButtonBar.js.map +1 -0
  35. package/react/components/common/InputTable.d.ts +3 -3
  36. package/react/components/common/InputTable.js +13 -13
  37. package/react/components/common/InputTable.js.map +1 -1
  38. package/react/components/common/Tab.js +33 -5
  39. package/react/components/common/Tab.js.map +1 -1
  40. package/react/components/common/css/FinsembleToggle.css +22 -0
  41. package/react/components/common/css/application-edit-page.css +10 -2
  42. package/react/components/common/css/tab.css +8 -8
  43. package/react/components/common/css/time-select.css +1 -1
  44. package/react/components/common/css/toggle.css +2 -10
  45. package/react/components/common/helpers.js +6 -1
  46. package/react/components/common/helpers.js.map +1 -1
  47. package/react/components/common/stories/ColorPicker.stories.js +6 -11
  48. package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
  49. package/react/components/common/stories/FinsembleToggle.stories.d.ts +1 -2
  50. package/react/components/common/stories/FinsembleToggle.stories.js +0 -7
  51. package/react/components/common/stories/FinsembleToggle.stories.js.map +1 -1
  52. package/react/components/common/stories/FinsembleToggleButtonBar.stories.d.ts +14 -0
  53. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js +97 -0
  54. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js.map +1 -0
  55. package/react/components/common/stories/InputTable.stories.d.ts +4 -3
  56. package/react/components/common/stories/InputTable.stories.js +18 -8
  57. package/react/components/common/stories/InputTable.stories.js.map +1 -1
  58. package/react/components/common/tests/ButtonRow.spec.js +5 -0
  59. package/react/components/common/tests/ButtonRow.spec.js.map +1 -1
  60. package/react/components/common/tests/FinsembleToggle.spec.js +1 -6
  61. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  62. package/react/components/common/tests/FinsembleToggleButtonBar.spec.d.ts +1 -0
  63. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +40 -0
  64. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -0
  65. package/react/components/common/tests/InputTable.spec.js +3 -3
  66. package/react/components/common/tests/InputTable.spec.js.map +1 -1
  67. package/react/components/favorites/FavoriteMaker.js +1 -1
  68. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  69. package/react/components/fdc3Resolver/ResolverContainer.js +4 -7
  70. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  71. package/react/components/icon/Icon.d.ts +1 -1
  72. package/react/components/icon/Icon.js +8 -1
  73. package/react/components/icon/Icon.js.map +1 -1
  74. package/react/components/legacyControls/FinsembleDnDContext.js +7 -7
  75. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  76. package/react/components/linker/remoteRedux.js +1 -0
  77. package/react/components/linker/remoteRedux.js.map +1 -1
  78. package/react/components/menu/MenuItem.js +1 -1
  79. package/react/components/menu/MenuItem.js.map +1 -1
  80. package/react/components/menu/MenuPortal.js +12 -21
  81. package/react/components/menu/MenuPortal.js.map +1 -1
  82. package/react/components/menu/MenuToggle.js +1 -1
  83. package/react/components/menu/MenuToggle.js.map +1 -1
  84. package/react/components/menu/keyboardNavigation.d.ts +1 -22
  85. package/react/components/menu/keyboardNavigation.js +110 -160
  86. package/react/components/menu/keyboardNavigation.js.map +1 -1
  87. package/react/components/notifications/components/drawer/DrawerControls.js +39 -25
  88. package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
  89. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +19 -6
  90. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  91. package/react/components/notifications/components/shared/CheckButton.js +19 -8
  92. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  93. package/react/components/notifications/components/shared/NotificationCardShell.js +2 -1
  94. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  95. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js +2 -1
  96. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
  97. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js +2 -1
  98. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
  99. package/react/components/notifications/components/views/CardView.js +5 -3
  100. package/react/components/notifications/components/views/CardView.js.map +1 -1
  101. package/react/components/notifications/components/views/ListView.js +3 -1
  102. package/react/components/notifications/components/views/ListView.js.map +1 -1
  103. package/react/components/notifications/types.d.ts +3 -0
  104. package/react/components/notifications/types.js.map +1 -1
  105. package/react/components/processMonitor/ProcessMonitor.js +4 -1
  106. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  107. package/react/components/processMonitor/components/ProcessStatistics.js +1 -3
  108. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  109. package/react/components/processMonitor/helpers.js +4 -3
  110. package/react/components/processMonitor/helpers.js.map +1 -1
  111. package/react/components/processMonitor/helpers.spec.js +7 -3
  112. package/react/components/processMonitor/helpers.spec.js.map +1 -1
  113. package/react/components/sdd/AddApp.d.ts +4 -3
  114. package/react/components/sdd/AddApp.js +132 -30
  115. package/react/components/sdd/AddApp.js.map +1 -1
  116. package/react/components/sdd/AppEditAccess.d.ts +4 -3
  117. package/react/components/sdd/AppEditAccess.js.map +1 -1
  118. package/react/components/sdd/AppEditPage.d.ts +4 -3
  119. package/react/components/sdd/AppEditPage.js +141 -116
  120. package/react/components/sdd/AppEditPage.js.map +1 -1
  121. package/react/components/sdd/Appearance.d.ts +2 -1
  122. package/react/components/sdd/Appearance.js +15 -7
  123. package/react/components/sdd/Appearance.js.map +1 -1
  124. package/react/components/sdd/Application.d.ts +5 -4
  125. package/react/components/sdd/Application.js +61 -42
  126. package/react/components/sdd/Application.js.map +1 -1
  127. package/react/components/sdd/Applications.d.ts +12 -11
  128. package/react/components/sdd/Applications.js +23 -4
  129. package/react/components/sdd/Applications.js.map +1 -1
  130. package/react/components/sdd/Authentication.js +1 -6
  131. package/react/components/sdd/Authentication.js.map +1 -1
  132. package/react/components/sdd/AuthenticationProviderConfig.js +5 -3
  133. package/react/components/sdd/AuthenticationProviderConfig.js.map +1 -1
  134. package/react/components/sdd/EditPreload.d.ts +4 -3
  135. package/react/components/sdd/EditPreload.js +39 -22
  136. package/react/components/sdd/EditPreload.js.map +1 -1
  137. package/react/components/sdd/Export.d.ts +7 -6
  138. package/react/components/sdd/Export.js +3 -2
  139. package/react/components/sdd/Export.js.map +1 -1
  140. package/react/components/sdd/GettingStarted.js +3 -3
  141. package/react/components/sdd/GettingStarted.js.map +1 -1
  142. package/react/components/sdd/Navigation.js +28 -4
  143. package/react/components/sdd/Navigation.js.map +1 -1
  144. package/react/components/sdd/OptionalSettingsView.d.ts +6 -5
  145. package/react/components/sdd/OptionalSettingsView.js +2 -10
  146. package/react/components/sdd/OptionalSettingsView.js.map +1 -1
  147. package/react/components/sdd/ProjectErrors.js +1 -1
  148. package/react/components/sdd/ProjectErrors.js.map +1 -1
  149. package/react/components/sdd/Publish.js +2 -2
  150. package/react/components/sdd/Publish.js.map +1 -1
  151. package/react/components/sdd/SmartDesktopDesigner.d.ts +17 -16
  152. package/react/components/sdd/SmartDesktopDesigner.js +37 -34
  153. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
  154. package/react/components/sdd/ThemePage.js +8 -5
  155. package/react/components/sdd/ThemePage.js.map +1 -1
  156. package/react/components/sdd/Themes.d.ts +2 -1
  157. package/react/components/sdd/Themes.js +2 -2
  158. package/react/components/sdd/Themes.js.map +1 -1
  159. package/react/components/sdd/Toolbar.d.ts +5 -4
  160. package/react/components/sdd/Toolbar.js +11 -9
  161. package/react/components/sdd/Toolbar.js.map +1 -1
  162. package/react/components/sdd/common/setPreloadDefaults.d.ts +1 -1
  163. package/react/components/sdd/common/setPreloadDefaults.js +5 -4
  164. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
  165. package/react/components/sdd/common/views.js +7 -4
  166. package/react/components/sdd/common/views.js.map +1 -1
  167. package/react/components/sdd/css/addApp.css +52 -0
  168. package/react/components/sdd/css/applications.css +0 -26
  169. package/react/components/sdd/css/nav.css +3 -3
  170. package/react/components/sdd/fixtures/authenticationProps.js +15 -1
  171. package/react/components/sdd/fixtures/authenticationProps.js.map +1 -1
  172. package/react/components/sdd/fixtures/preloads.js +14 -12
  173. package/react/components/sdd/fixtures/preloads.js.map +1 -1
  174. package/react/components/sdd/smartDesktopClient.d.ts +163 -0
  175. package/react/components/sdd/smartDesktopClient.js +573 -0
  176. package/react/components/sdd/smartDesktopClient.js.map +1 -0
  177. package/react/components/sdd/smartDesktopClient.spec.d.ts +1 -0
  178. package/react/components/sdd/smartDesktopClient.spec.js +61 -0
  179. package/react/components/sdd/smartDesktopClient.spec.js.map +1 -0
  180. package/react/components/sdd/stories/AddApp.stories.d.ts +10 -0
  181. package/react/components/sdd/stories/AddApp.stories.js +18 -0
  182. package/react/components/sdd/stories/AddApp.stories.js.map +1 -0
  183. package/react/components/sdd/stories/AppEditPage.stories.d.ts +2 -0
  184. package/react/components/sdd/stories/AppEditPage.stories.js +2 -0
  185. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
  186. package/react/components/sdd/stories/Appearance.stories.d.ts +1 -1
  187. package/react/components/sdd/stories/Appearance.stories.js +1 -0
  188. package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
  189. package/react/components/sdd/stories/Authentication.stories.js +2 -16
  190. package/react/components/sdd/stories/Authentication.stories.js.map +1 -1
  191. package/react/components/sdd/stories/OptionalSettingsView.stories.js +1 -1
  192. package/react/components/sdd/stories/OptionalSettingsView.stories.js.map +1 -1
  193. package/react/components/sdd/stories/SmartDesktopDesigner.stories.d.ts +1 -1
  194. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js +3 -0
  195. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js.map +1 -1
  196. package/react/components/sdd/stories/Themes.stories.d.ts +1 -1
  197. package/react/components/sdd/stories/Themes.stories.js +1 -0
  198. package/react/components/sdd/stories/Themes.stories.js.map +1 -1
  199. package/react/components/sdd/tests/AddApp.spec.d.ts +1 -0
  200. package/react/components/sdd/tests/AddApp.spec.js +96 -0
  201. package/react/components/sdd/tests/AddApp.spec.js.map +1 -0
  202. package/react/components/sdd/tests/AppEditPage.spec.js +92 -23
  203. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  204. package/react/components/sdd/tests/Application.spec.js +411 -24
  205. package/react/components/sdd/tests/Application.spec.js.map +1 -1
  206. package/react/components/sdd/tests/Applications.spec.js +1 -45
  207. package/react/components/sdd/tests/Applications.spec.js.map +1 -1
  208. package/react/components/sdd/tests/Authentication.spec.js +1 -1
  209. package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
  210. package/react/components/sdd/tests/EditPreload.spec.js +50 -7
  211. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
  212. package/react/components/sdd/tests/Navigation.spec.js +2 -2
  213. package/react/components/sdd/tests/Navigation.spec.js.map +1 -1
  214. package/react/components/sdd/tests/OptionalSettingsView.spec.js +235 -0
  215. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
  216. package/react/components/sdd/tests/ProjectErrors.spec.js +1 -1
  217. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
  218. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js +2 -2
  219. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +1 -1
  220. package/react/components/search/Search.js +1 -1
  221. package/react/components/search/Search.js.map +1 -1
  222. package/react/components/shared/DefaultDropdownButton.js +12 -1
  223. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  224. package/react/components/shared/tests/DefaultDropdownButton.spec.js +12 -0
  225. package/react/components/shared/tests/DefaultDropdownButton.spec.js.map +1 -1
  226. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.d.ts +1 -16
  227. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +0 -4
  228. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  229. package/react/components/toolbar/DragHandle.stories.js.map +1 -1
  230. package/react/components/toolbar/ToolbarIcon.js +2 -2
  231. package/react/components/toolbar/ToolbarIcon.js.map +1 -1
  232. package/react/components/toolbar/ToolbarSection.d.ts +1 -9
  233. package/react/components/toolbar/ToolbarSection.js +3 -7
  234. package/react/components/toolbar/ToolbarSection.js.map +1 -1
  235. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +1 -1
  236. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  237. package/react/components/toolbar/dashbar/Dashbar.js +21 -12
  238. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  239. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +1 -1
  240. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  241. package/react/components/userPreferences/components/ContentSection.js +1 -1
  242. package/react/components/userPreferences/components/ContentSection.js.map +1 -1
  243. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +4 -3
  244. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
  245. package/react/components/userPreferences/components/general/ScheduledClose.js +12 -3
  246. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
  247. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js +1 -1
  248. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js.map +1 -1
  249. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +17 -2
  250. package/react/components/windowTitleBar/WindowTitleBarShell.js +160 -6
  251. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  252. package/react/components/windowTitleBar/components/left/LinkerButton.js +7 -1
  253. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  254. package/react/components/windowTitleBar/components/windowTitle.js +10 -2
  255. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  256. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +11 -1
  257. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  258. package/react/reducers/rootReducer.d.ts +2 -2
  259. package/react/store.d.ts +4 -4
  260. package/react/tsconfig.tsbuildinfo +1 -0
  261. package/react/types/smartDesktopDesignerTypes.d.ts +3 -0
  262. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
@@ -0,0 +1,573 @@
1
+ import { Logger, RouterClient, ConfigClient, System, FEAGlobals, REST, Desktop, } from "@finsemble/finsemble-api";
2
+ const MAKER_TOPIC = "SmartDesktopClient";
3
+ const UI_CHANGE_TOPIC = "Finsemble-ui-change";
4
+ const assetTests = {
5
+ Image: { acceptedTypes: ["PNG", "JPEG", "JPG"], regex: /\.(jpe?g|png)$/i },
6
+ GIF: { acceptedTypes: ["GIF"], regex: /\.(gif)$/i },
7
+ Icon: { acceptedTypes: ["ICO"], regex: /\.(ico)$/i },
8
+ JS: { acceptedTypes: ["JS"], regex: /\.(js)$/i },
9
+ JSON: { acceptedTypes: ["JSON"], regex: /\.(json)$/i },
10
+ CSS: { acceptedTypes: ["CSS"], regex: /\.(css)$/i },
11
+ Text: { acceptedTypes: ["TXT"], regex: /\.(txt)$/i },
12
+ };
13
+ const isInteropAuthorized = (sourceApp, targetApp, contextType) => {
14
+ var _a, _b;
15
+ const rules = ((_b = (_a = targetApp.manifest) === null || _a === void 0 ? void 0 : _a.interop) === null || _b === void 0 ? void 0 : _b.selectConnect) || [];
16
+ const allowedApps = rules.flatMap((rule) => {
17
+ var _a;
18
+ if (!contextType || (rule.contextType && rule.contextType !== contextType))
19
+ return [];
20
+ return (_a = rule.authorize) !== null && _a !== void 0 ? _a : [];
21
+ });
22
+ return allowedApps.some((rule) => rule.name === sourceApp.name);
23
+ };
24
+ const prettyList = (words) => {
25
+ const { length } = words;
26
+ if (length === 0)
27
+ return "";
28
+ if (length === 1)
29
+ return words[0];
30
+ if (length === 2)
31
+ return `${words[0]} or ${words[1]}`;
32
+ return `${words.slice(0, length - 2).join(", ")} or ${words[length - 1]}`;
33
+ };
34
+ export const SmartDesktopClient = {
35
+ getSDServerInfo: async () => await System.getSDServerInfo(),
36
+ async isEnabled() {
37
+ const { enabled } = await System.getSDServerInfo();
38
+ return enabled;
39
+ },
40
+ async applicationRoot() {
41
+ const { applicationRoot } = await System.getSDServerInfo();
42
+ return applicationRoot ? applicationRoot : null;
43
+ },
44
+ async projectConfig() {
45
+ const { projectConfig } = await System.getSDServerInfo();
46
+ return projectConfig ? projectConfig : null;
47
+ },
48
+ async getApps() {
49
+ var _a;
50
+ Logger.system.log("SmartDesktopClient.getApps");
51
+ const { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getApps`, {});
52
+ Logger.system.log("SmartDesktopClient.getApps result", err ? err : "successful", response);
53
+ return { err, apps: (_a = response === null || response === void 0 ? void 0 : response.data.applications) !== null && _a !== void 0 ? _a : [] };
54
+ },
55
+ async getMenus() {
56
+ Logger.system.log("ConfigClient getValue 'finsemble.toolbarMenus'");
57
+ const { err, data } = await ConfigClient.getValue({ field: "finsemble.toolbarMenus" });
58
+ Logger.system.log("finsemble.toolbarMenus result", err ? err : "successful", data);
59
+ return { err, menus: data };
60
+ },
61
+ async getPreloads() {
62
+ var _a;
63
+ Logger.system.log("SmartDesktopClient.getPreloads");
64
+ const { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});
65
+ Logger.system.log("SmartDesktopClient.getPreloads result", err ? err : "successful", response);
66
+ return { err, data: (_a = response === null || response === void 0 ? void 0 : response.data.preloads) !== null && _a !== void 0 ? _a : {} };
67
+ },
68
+ async getAppConfig(appId) {
69
+ var _a;
70
+ Logger.system.log("SmartDesktopClient.getAppConfig", appId);
71
+ const { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getAppConfig`, { appId });
72
+ Logger.system.log("SmartDesktopClient.getAppConfig result", err ? err : "successful", response);
73
+ return { err, config: (_a = response === null || response === void 0 ? void 0 : response.data) !== null && _a !== void 0 ? _a : {} };
74
+ },
75
+ async getAppConfigTemplate() {
76
+ Logger.system.log("SmartDesktopClient.getAppConfigTemplate");
77
+ const manifestJson = {
78
+ window: {
79
+ url: "",
80
+ width: 1280,
81
+ height: 600,
82
+ },
83
+ foreign: {
84
+ components: {
85
+ "App Launcher": {
86
+ launchableByUser: true,
87
+ },
88
+ "Window Manager": {
89
+ persistWindowState: true,
90
+ FSBLHeader: true,
91
+ },
92
+ },
93
+ },
94
+ };
95
+ const appdConfigTemplate = {
96
+ appId: "123",
97
+ name: "",
98
+ manifest: manifestJson,
99
+ manifestType: "finsemble",
100
+ version: "1",
101
+ };
102
+ Logger.system.log("SmartDesktopClient.getAppConfigTemplate result", appdConfigTemplate);
103
+ return { config: appdConfigTemplate };
104
+ },
105
+ async addApp(appId, appConfig) {
106
+ Logger.system.log("SmartDesktopClient.addApp", appId, appConfig);
107
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.addApp`, { appId, appConfig });
108
+ Logger.system.log("SmartDesktopClient.addApp result", err ? err : "successful");
109
+ return { err };
110
+ },
111
+ async addMenu(menuConfig) {
112
+ Logger.system.log("SmartDesktopClient.addMenu");
113
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.addMenu`, { menuConfig });
114
+ await this.syncMenuConfig();
115
+ Logger.system.log("SmartDesktopClient.addMenu result", err ? err : "successful");
116
+ return { err };
117
+ },
118
+ async syncMenuConfig() {
119
+ var _a;
120
+ Logger.system.log("SmartDesktopClient.syncMenuConfig");
121
+ const { response } = await RouterClient.query(`${MAKER_TOPIC}.getMenus`, {});
122
+ await ConfigClient.setValue({
123
+ field: "finsemble.toolbarMenus",
124
+ value: ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.menus) || {},
125
+ });
126
+ Logger.system.log("SmartDesktopClient.syncMenuConfig completed");
127
+ },
128
+ async updateMenu(menuId, menuConfig) {
129
+ Logger.system.log("SmartDesktopClient.updateMenu", menuId, menuConfig);
130
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.updateMenu`, { menuId, menuConfig });
131
+ await this.syncMenuConfig();
132
+ Logger.system.log("SmartDesktopClient.updateMenu result", err ? err : "successful");
133
+ return { err };
134
+ },
135
+ async updateApp(appId, appConfig) {
136
+ Logger.system.log("SmartDesktopClient.updateApp", appId, appConfig);
137
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.updateApp`, { appId, appConfig });
138
+ Logger.system.log("SmartDesktopClient.updateApp result", err ? err : "successful");
139
+ return { err };
140
+ },
141
+ async savePreload(oldAlias, newAlias, detail) {
142
+ Logger.system.log("SmartDesktopClient.savePreload");
143
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.savePreload`, { oldAlias, newAlias, detail });
144
+ Logger.system.log("SmartDesktopClient.savePreload result", err ? err : "successful");
145
+ const { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});
146
+ if (!err && response.data) {
147
+ await ConfigClient.setValue({
148
+ field: "finsemble.extensions.preloads",
149
+ value: response.data.preloads,
150
+ });
151
+ }
152
+ return { err };
153
+ },
154
+ async deleteApp(appId) {
155
+ Logger.system.log("SmartDesktopClient.deleteApp", appId);
156
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteApp`, { appId });
157
+ Logger.system.log("SmartDesktopClient.deleteApp result", err ? err : "successful");
158
+ return { err };
159
+ },
160
+ async deleteMenu(menuId) {
161
+ Logger.system.log("SmartDesktopClient.deleteMenu", menuId);
162
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.deleteMenu`, { menuId });
163
+ await this.syncMenuConfig();
164
+ Logger.system.log("SmartDesktopClient.deleteMenu result", err ? err : "successful");
165
+ return { err };
166
+ },
167
+ async deletePreload(alias) {
168
+ Logger.system.log("SmartDesktopClient.deletePreload");
169
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.deletePreload`, { alias });
170
+ Logger.system.log("SmartDesktopClient.deletePreload result", err ? err : "successful");
171
+ const { response } = await RouterClient.query(`${MAKER_TOPIC}.getPreloads`, {});
172
+ if (!err && response.data) {
173
+ await ConfigClient.setValue({
174
+ field: "finsemble.extensions.preloads",
175
+ value: response.data.preloads,
176
+ });
177
+ }
178
+ return { err };
179
+ },
180
+ async updateTheme(theme) {
181
+ Logger.system.log("SmartDesktopClient.updateTheme", theme);
182
+ const { err } = await RouterClient.query(`${MAKER_TOPIC}.updateTheme`, { theme });
183
+ Logger.system.log("SmartDesktopClient.updateTheme result", err ? err : "successful");
184
+ return { err };
185
+ },
186
+ async getTheme() {
187
+ Logger.system.log("SmartDesktopClient.getTheme");
188
+ const { err, response } = await RouterClient.query(`${MAKER_TOPIC}.getTheme`, {});
189
+ Logger.system.log("SmartDesktopClient.getTheme result", err ? err : "successful");
190
+ return { err, theme: response === null || response === void 0 ? void 0 : response.data };
191
+ },
192
+ onThemeUpdated(themeUpdatedHandler) {
193
+ RouterClient.addListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);
194
+ Logger.system.log("SmartDesktopClient.onThemeUpdated", themeUpdatedHandler);
195
+ return () => RouterClient.removeListener(`${UI_CHANGE_TOPIC}.themeUpdate`, themeUpdatedHandler);
196
+ },
197
+ async uploadAssets(assets, progress) {
198
+ Logger.system.log("SmartDesktopClient.uploadAssets", assets);
199
+ const applicationRoot = await this.applicationRoot();
200
+ const getAcceptedTypes = (asset) => {
201
+ let acceptedTypes = [];
202
+ let valid = false;
203
+ Object.entries(assetTests).forEach(([key, value]) => {
204
+ if (asset.type.includes(key)) {
205
+ if (value.regex.test(asset.file.name))
206
+ valid = true;
207
+ acceptedTypes = acceptedTypes.concat(value.acceptedTypes);
208
+ }
209
+ });
210
+ return valid ? [] : acceptedTypes;
211
+ };
212
+ return new Promise((resolve) => {
213
+ const endpointURL = `${applicationRoot}/project/assets`;
214
+ const data = new FormData();
215
+ const assetMeta = [];
216
+ for (let index = 0; index < assets.length; index++) {
217
+ const asset = assets[index];
218
+ const meta = {
219
+ key: `file-${index}`,
220
+ name: asset.file.name,
221
+ type: asset.file.type,
222
+ size: asset.file.size,
223
+ targetPath: asset.targetPath,
224
+ };
225
+ const acceptedTypes = getAcceptedTypes(asset);
226
+ if (acceptedTypes.length) {
227
+ const error = `File must be of type ${prettyList(acceptedTypes)}`;
228
+ Logger.system.log("SmartDesktopClient.uploadAssets wrong image type", error);
229
+ return resolve({ err: error, paths: [] });
230
+ }
231
+ else {
232
+ Logger.system.log("SmartDesktopClient.uploadAssets append", meta.key, asset.file);
233
+ data.append(meta.key, asset.file);
234
+ assetMeta.push(meta);
235
+ }
236
+ }
237
+ data.append("assets", JSON.stringify(assetMeta));
238
+ var xhr = new XMLHttpRequest();
239
+ Logger.system.log("SmartDesktopClient.uploadAssets put", data, endpointURL);
240
+ xhr.open("PUT", endpointURL, true);
241
+ xhr.addEventListener("progress", (e) => {
242
+ progress(Math.round((e.loaded / e.total) * 100));
243
+ });
244
+ xhr.onreadystatechange = () => {
245
+ if (xhr.readyState === XMLHttpRequest.DONE) {
246
+ progress(100);
247
+ if (xhr.status !== 200) {
248
+ Logger.system.log("SmartDesktopClient.uploadAssets Failed Response", xhr.response);
249
+ resolve({ err: `Got response code: ${xhr.status}`, paths: [] });
250
+ }
251
+ else {
252
+ try {
253
+ const response = JSON.parse(xhr.response);
254
+ Logger.system.log("SmartDesktopClient.uploadAssets Response", xhr.response);
255
+ resolve({ err: null, paths: response.paths });
256
+ }
257
+ catch (e) {
258
+ resolve({ err: "Couldn't parse response", paths: [] });
259
+ }
260
+ }
261
+ }
262
+ };
263
+ Logger.system.log("SmartDesktopClient.uploadAssets send", data);
264
+ xhr.send(data);
265
+ });
266
+ },
267
+ async uploadImages(files, progress) {
268
+ return this.uploadAssets(files.map((file) => ({
269
+ file,
270
+ type: ["Image", "GIF"],
271
+ })), progress);
272
+ },
273
+ async uploadImage(file, progress) {
274
+ return new Promise((resolve, reject) => {
275
+ this.uploadImages([file], progress)
276
+ .then((response) => {
277
+ resolve({ err: response.err, path: response.paths[0] });
278
+ })
279
+ .catch(reject);
280
+ });
281
+ },
282
+ async updateInstallerDescription(installerDescription) {
283
+ Logger.system.log("SmartDesktopClient updateInstallerDescription", installerDescription);
284
+ const { err } = await REST.httpPatch(`/project/installer`, installerDescription);
285
+ Logger.system.log("SmartDesktopClient.updateInstallerDescription Response", err ? err : "successful");
286
+ return { err };
287
+ },
288
+ async updateProjectSettings(settings) {
289
+ const { err } = await REST.httpPatch(`/project/settings`, settings);
290
+ return { err };
291
+ },
292
+ async getProjectSettings() {
293
+ const response = await REST.httpGet(`/project/settings`);
294
+ return response.getData;
295
+ },
296
+ progressIndicator(progress) {
297
+ Logger.system.log("SmartDesktopClient.progressIndicator Console-Only", progress);
298
+ console.log("Console-Only Progress Indicator:", progress);
299
+ },
300
+ async updateToolbarIcon(imageFile) {
301
+ const TARGET_FILE = "assets/img/Finsemble_Toolbar_Icon.png";
302
+ Logger.system.log("SmartDesktopClient.updateToolbarIcon", TARGET_FILE, imageFile);
303
+ const { err, paths } = await this.uploadAssets([
304
+ {
305
+ file: imageFile,
306
+ type: ["Image", "GIF"],
307
+ targetPath: TARGET_FILE,
308
+ },
309
+ ], this.progressIndicator);
310
+ if (!err) {
311
+ RouterClient.transmit("Finsemble-ui-change.toolbarIconUpdate", {});
312
+ }
313
+ Logger.system.log("SmartDesktopClient.updateToolbarIcon result", err ? err : "successful");
314
+ return { err, path: paths[0] };
315
+ },
316
+ async updateTaskbarIcon(imageFile) {
317
+ const TARGET_FILE = "assets/img/Finsemble_Taskbar_Icon.png";
318
+ Logger.system.log("SmartDesktopClient.updateTaskbarIcon", imageFile);
319
+ const { err, paths } = await this.uploadAssets([
320
+ {
321
+ file: imageFile,
322
+ type: ["Image"],
323
+ targetPath: TARGET_FILE,
324
+ },
325
+ ], this.progressIndicator);
326
+ if (!err) {
327
+ RouterClient.transmit("Finsemble-ui-change.taskbarIconUpdate", {});
328
+ }
329
+ Logger.system.log("SmartDesktopClient.updateTaskbarIcon result", err ? err : "successful");
330
+ return { err, path: paths[0] };
331
+ },
332
+ async updateSystemTrayIcon(imageFile) {
333
+ const TARGET_FILE = "assets/img/Finsemble_SystemTray_Icon.png";
334
+ Logger.system.log("SmartDesktopClient.updateSystemTrayIcon", imageFile);
335
+ const { err: error1, paths } = await this.uploadAssets([
336
+ {
337
+ file: imageFile,
338
+ type: ["Image"],
339
+ targetPath: TARGET_FILE,
340
+ },
341
+ ], this.progressIndicator);
342
+ const { err: error2 } = await RouterClient.query(`${MAKER_TOPIC}.refreshSystemTrayIconConfig`, {});
343
+ Logger.system.log("SmartDesktopClient.updateSystemTrayIcon result", error1 || error2 ? { error1, error2 } : "successful");
344
+ const error = error1 || error2 || null;
345
+ return { err: error ? error.toString() : null, path: paths[0] };
346
+ },
347
+ async updateInstallerIcon(iconFile) {
348
+ const TARGET_FILE = "assets/img/installer_icon.ico";
349
+ Logger.system.log("SmartDesktopClient.updateInstallerIcon", iconFile);
350
+ const { err, paths } = await this.uploadAssets([
351
+ {
352
+ file: iconFile,
353
+ type: ["Icon"],
354
+ targetPath: TARGET_FILE,
355
+ },
356
+ ], this.progressIndicator);
357
+ Logger.system.log("SmartDesktopClient.updateSystemTrayIcon result", err ? err : "successful");
358
+ return { err, path: paths[0] };
359
+ },
360
+ async updateInstallerGraphic(gifFile) {
361
+ const TARGET_FILE = "assets/img/installer_spinner.gif";
362
+ Logger.system.log("SmartDesktopClient.updateInstallerGraphic", gifFile);
363
+ const { err, paths } = await this.uploadAssets([
364
+ {
365
+ file: gifFile,
366
+ type: ["Image", "GIF"],
367
+ targetPath: TARGET_FILE,
368
+ },
369
+ ], this.progressIndicator);
370
+ Logger.system.log("SmartDesktopClient.updateInstallerGraphic result", err ? err : "successful");
371
+ return { err, path: paths[0] };
372
+ },
373
+ async updateSplashScreen(svgFile) {
374
+ const TARGET_FILE = "assets/img/FinsembleSplash.png";
375
+ Logger.system.log("SmartDesktopClient.updateSplashScreen", svgFile);
376
+ const { err, paths } = await this.uploadAssets([
377
+ {
378
+ file: svgFile,
379
+ type: ["Image", "GIF"],
380
+ targetPath: TARGET_FILE,
381
+ },
382
+ ], this.progressIndicator);
383
+ Logger.system.log("SmartDesktopClient.updateSplashScreen result", err ? err : "successful");
384
+ return { err, path: paths[0] };
385
+ },
386
+ async updateThemeVariable(varName, varValue) {
387
+ const theme = {};
388
+ theme[varName] = varValue;
389
+ Logger.system.log("SmartDesktopClient.updateThemeVariable", theme);
390
+ return this.updateTheme(theme);
391
+ },
392
+ async createProjectZip(appName, targetPath = undefined) {
393
+ const applicationRoot = await this.applicationRoot();
394
+ Logger.system.log("SmartDesktopClient.createProjectZip", applicationRoot);
395
+ return new Promise((resolve, reject) => {
396
+ const onTargetPath = (targetPathInner) => {
397
+ const endpointURL = `${applicationRoot}/project/${appName}/zip?targetPath=${encodeURIComponent(targetPathInner)}`;
398
+ Logger.system.log(endpointURL);
399
+ fetch(endpointURL)
400
+ .then((response) => response.json())
401
+ .then((data) => {
402
+ resolve(data.file);
403
+ })
404
+ .catch(reject);
405
+ };
406
+ if (targetPath) {
407
+ onTargetPath(targetPath);
408
+ }
409
+ else {
410
+ FEAGlobals.finsembleWindow.showNativeOpenDialog({
411
+ title: "Select an output directory",
412
+ buttonLabel: "Save .zip file",
413
+ properties: ["openDirectory"],
414
+ }, (err, response) => {
415
+ var _a, _b, _c;
416
+ if (((_b = (_a = response === null || response === void 0 ? void 0 : response[0]) === null || _a === void 0 ? void 0 : _a.filePaths) === null || _b === void 0 ? void 0 : _b.length) > 0) {
417
+ onTargetPath((_c = response === null || response === void 0 ? void 0 : response[0]) === null || _c === void 0 ? void 0 : _c.filePaths[0]);
418
+ }
419
+ else {
420
+ reject("No file selected");
421
+ }
422
+ });
423
+ }
424
+ });
425
+ },
426
+ async copyProjectFiles(appName, targetPath = undefined) {
427
+ const applicationRoot = await this.applicationRoot();
428
+ Logger.system.log("SmartDesktopClient.createProjectZip", applicationRoot);
429
+ return new Promise((resolve, reject) => {
430
+ const onTargetPath = (selectedTargetPath) => {
431
+ const endpointURL = `${applicationRoot}/project/${appName}/copy?targetPath=${encodeURIComponent(selectedTargetPath)}`;
432
+ Logger.system.debug(`copyProjectFiles: copying ${selectedTargetPath}, ${endpointURL}`);
433
+ fetch(endpointURL)
434
+ .then((response) => response.json())
435
+ .then((data) => {
436
+ if (data.error) {
437
+ reject(data.error);
438
+ }
439
+ else {
440
+ resolve(data.files);
441
+ }
442
+ })
443
+ .catch(reject);
444
+ };
445
+ if (targetPath) {
446
+ onTargetPath(targetPath);
447
+ }
448
+ else {
449
+ FEAGlobals.finsembleWindow.showNativeOpenDialog({
450
+ title: "Select Seed Project",
451
+ buttonLabel: "Copy to Seed Project",
452
+ properties: ["openDirectory"],
453
+ }, (err, response) => {
454
+ var _a, _b, _c;
455
+ if (((_b = (_a = response === null || response === void 0 ? void 0 : response[0]) === null || _a === void 0 ? void 0 : _a.filePaths) === null || _b === void 0 ? void 0 : _b.length) > 0) {
456
+ onTargetPath((_c = response === null || response === void 0 ? void 0 : response[0]) === null || _c === void 0 ? void 0 : _c.filePaths[0]);
457
+ }
458
+ else {
459
+ reject("No file selected");
460
+ }
461
+ });
462
+ }
463
+ });
464
+ },
465
+ async selectProjectPath() {
466
+ return new Promise((resolve, reject) => {
467
+ FEAGlobals.finsembleWindow.showNativeOpenDialog({
468
+ title: "Select Seed Project",
469
+ buttonLabel: "Select Seed Project",
470
+ properties: ["openDirectory"],
471
+ }, (err, response) => {
472
+ var _a, _b, _c;
473
+ if (((_b = (_a = response === null || response === void 0 ? void 0 : response[0]) === null || _a === void 0 ? void 0 : _a.filePaths) === null || _b === void 0 ? void 0 : _b.length) > 0) {
474
+ const path = (_c = response === null || response === void 0 ? void 0 : response[0]) === null || _c === void 0 ? void 0 : _c.filePaths[0];
475
+ Logger.system.log("SmartDesktopClient.selectProjectPath", path);
476
+ resolve(path);
477
+ }
478
+ else {
479
+ reject("No file selected");
480
+ }
481
+ });
482
+ });
483
+ },
484
+ checkValidProjectName(name) {
485
+ return /^[a-zA-Z0-9 \-_.]{1,}$/.test(name) && /[a-zA-Z0-9]{1,}/.test(name);
486
+ },
487
+ checkValidURL(url) {
488
+ if (url.length === 0) {
489
+ return true;
490
+ }
491
+ return /^https?:\/\/[^\s]+$/.test(url);
492
+ },
493
+ async isInboundInteropAuthorized(sourceApp, targetApp, contextType) {
494
+ return isInteropAuthorized(sourceApp, targetApp, contextType);
495
+ },
496
+ async isOutboundInteropAuthorized(sourceApp, targetApp, contextType) {
497
+ return isInteropAuthorized(targetApp, sourceApp, contextType);
498
+ },
499
+ async publishToCosaicCloud(uuid) {
500
+ const applicationRoot = await this.applicationRoot();
501
+ Logger.system.log("SmartDesktopClient.publishToCosaicCloud", applicationRoot);
502
+ return new Promise(async (resolve, reject) => {
503
+ const endpointURL = `${applicationRoot}/project/publish/cosaicCloud?uuid=${encodeURIComponent(uuid || "")}`;
504
+ const response = await fetch(endpointURL, {
505
+ method: "PUT",
506
+ });
507
+ const data = await response.json();
508
+ if (response.ok) {
509
+ resolve(data);
510
+ }
511
+ else {
512
+ reject(data);
513
+ }
514
+ });
515
+ },
516
+ async getPublishProgress() {
517
+ const applicationRoot = await this.applicationRoot();
518
+ Logger.system.log("SmartDesktopClient.getPublishProgress", applicationRoot);
519
+ return new Promise((resolve, reject) => {
520
+ const endpointURL = `${applicationRoot}/project/publish/progress`;
521
+ fetch(endpointURL)
522
+ .then((response) => response.json())
523
+ .then((data) => {
524
+ resolve(data);
525
+ })
526
+ .catch(reject);
527
+ });
528
+ },
529
+ async resetProject() {
530
+ const applicationRoot = await this.applicationRoot();
531
+ Logger.system.log("SmartDesktopClient.resetProject", applicationRoot);
532
+ const endpointURL = `${applicationRoot}/project/reset`;
533
+ const response = await fetch(endpointURL, {
534
+ method: "PUT",
535
+ });
536
+ const data = await response.json();
537
+ const error = response.ok ? null : new Error(data.message);
538
+ response.ok && Desktop.restartApplication();
539
+ return [error, data];
540
+ },
541
+ async getAuthenticationProviders() {
542
+ const applicationRoot = await this.applicationRoot();
543
+ Logger.system.log("SmartDesktopClient.getAuthenticationProviders", applicationRoot);
544
+ const endpointURL = `${applicationRoot}/authentication`;
545
+ const response = await fetch(endpointURL, {
546
+ method: "get",
547
+ headers: {
548
+ Accept: "application/json",
549
+ },
550
+ });
551
+ const data = await response.json();
552
+ if (!data || !Array.isArray(data.providers)) {
553
+ return [];
554
+ }
555
+ return data.providers;
556
+ },
557
+ async setAuthenticationProviders(authenticationProviders) {
558
+ const applicationRoot = await this.applicationRoot();
559
+ Logger.system.log("SmartDesktopClient.setAuthenticationProviders", applicationRoot);
560
+ const endpointURL = `${applicationRoot}/authentication`;
561
+ const response = await fetch(endpointURL, {
562
+ method: "PUT",
563
+ headers: {
564
+ Accept: "application/json",
565
+ "Content-Type": "application/json",
566
+ },
567
+ body: JSON.stringify({ authenticationProviders }),
568
+ });
569
+ const data = await response.json();
570
+ return response.ok ? null : new Error(data.message);
571
+ },
572
+ };
573
+ //# sourceMappingURL=smartDesktopClient.js.map