@sapui5/sap.ushell 1.111.1 → 1.112.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.
Files changed (303) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +1 -1
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +104 -4
  4. package/src/main/js/sap/ushell/ApplicationType.js +11 -4
  5. package/src/main/js/sap/ushell/Container.js +0 -32
  6. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  7. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
  8. package/src/main/js/sap/ushell/NWBCInterface.js +1 -1
  9. package/src/main/js/sap/ushell/TechnicalParameters.js +51 -21
  10. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  11. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  12. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  13. package/src/main/js/sap/ushell/_URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  14. package/src/main/js/sap/ushell/_URLTemplateProcessor/DependencyGraph.js +1 -1
  15. package/src/main/js/sap/ushell/_URLTemplateProcessor/Functions.js +1 -1
  16. package/src/main/js/sap/ushell/_URLTemplateProcessor/Resolvers.js +1 -1
  17. package/src/main/js/sap/ushell/_URLTemplateProcessor/TemplateParameterParser.js +1 -1
  18. package/src/main/js/sap/ushell/_URLTemplateProcessor/utils.js +1 -1
  19. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  20. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  21. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  22. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +1 -1
  23. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +24 -158
  24. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  25. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  26. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  28. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  29. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  30. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  31. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  33. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +1 -2
  34. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +22 -140
  35. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  36. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +2 -1
  41. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  44. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  51. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  60. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +12 -0
  61. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +28 -4
  62. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +7 -5
  63. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/bootstrap/_SchedulingAgent/logger.js +1 -1
  65. package/src/main/js/sap/ushell/bootstrap/_SchedulingAgent/state.js +1 -1
  66. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  67. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +1 -0
  68. package/src/main/js/sap/ushell/bootstrap/common/common.read.ushell.config.from.url.js +26 -23
  69. package/src/main/js/sap/ushell/components/appfinder/AppFinderView.js +69 -33
  70. package/src/main/js/sap/ushell/components/appfinder/VisualizationOrganizerHelper.js +3 -0
  71. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  72. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +15 -3
  73. package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +1 -1
  74. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +29 -18
  75. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +1 -1
  76. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +15 -2
  77. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +9 -4
  78. package/src/main/js/sap/ushell/components/applicationIntegration/elements/model.js +1 -1
  79. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +1 -1
  80. package/src/main/js/sap/ushell/components/applicationIntegration/relatedShellElements/RelatedShellElements.js +1 -1
  81. package/src/main/js/sap/ushell/components/cepsearchresult/app/Main.controller.js +1 -7
  82. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/controls/Paginator.css +14 -3
  83. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/controls/Paginator.js +57 -11
  84. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +14 -2
  85. package/src/main/js/sap/ushell/components/contentFinder/Component.js +470 -23
  86. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +308 -6
  87. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +83 -12
  88. package/src/main/js/sap/ushell/components/contentFinder/controller/WidgetGallery.controller.js +33 -6
  89. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +7 -7
  90. package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +96 -0
  91. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +44 -14
  92. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +82 -25
  93. package/src/main/js/sap/ushell/components/contentFinder/view/ContentFinderDialog.view.xml +18 -10
  94. package/src/main/js/sap/ushell/components/contentFinder/view/WidgetGallery.view.xml +52 -1
  95. package/src/main/js/sap/ushell/components/contentFinderAppSearch/Component.js +1 -1
  96. package/src/main/js/sap/ushell/components/contentFinderAppSearch/controller/ContentFinderAppSearch.controller.js +1 -1
  97. package/src/main/js/sap/ushell/components/contentFinderAppSearch/manifest.json +1 -1
  98. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  99. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  100. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +1 -1
  101. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +116 -40
  102. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  103. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  104. package/src/main/js/sap/ushell/components/pages/ActionMode.js +1 -1
  105. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  106. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  107. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +1 -1
  108. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  109. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  110. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  111. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  112. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  113. package/src/main/js/sap/ushell/components/shell/PostLoadingHeaderEnhancement/Component.js +17 -6
  114. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  115. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  116. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  117. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  118. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/NavigationSvcSearchProvider.js +1 -1
  119. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  120. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  121. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +1 -1
  122. package/src/main/js/sap/ushell/components/shell/Settings/ContentWrapper.fragment.xml +7 -1
  123. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsForm.js +9 -10
  124. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/UserDefaultsSetting.controller.js +49 -57
  125. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  126. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  127. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.controller.js +4 -1
  128. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +26 -27
  129. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +23 -4
  130. package/src/main/js/sap/ushell/components/workPageBuilder/controller/ContentFinderDialog.controller.js +12 -9
  131. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +67 -16
  132. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  133. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  134. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  135. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  136. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  137. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  138. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  139. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources.properties +5 -3
  140. package/src/main/js/sap/ushell/components/workPageBuilder/view/WorkPageBuilder.view.xml +1 -1
  141. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  142. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +4 -262
  143. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  144. package/src/main/js/sap/ushell/components/workPageRuntime/services/NavigationResolver.js +1 -1
  145. package/src/main/js/sap/ushell/components/workPageRuntime/services/WorkPage.js +1 -170
  146. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  147. package/src/main/js/sap/ushell/library.js +1 -3
  148. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  149. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +1 -1
  150. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  151. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  152. package/src/main/js/sap/ushell/renderers/fiori2/AccessKeysHandler.js +3 -1
  153. package/src/main/js/sap/ushell/renderers/fiori2/Renderer.js +2 -2
  154. package/src/main/js/sap/ushell/renderers/fiori2/allMyApps/AllMyApps.controller.js +2 -1
  155. package/src/main/js/sap/ushell/renderers/fiori2/allMyApps/AllMyApps.view.xml +10 -1
  156. package/src/main/js/sap/ushell/renderers/fiori2/resources/resources.properties +15 -5
  157. package/src/main/js/sap/ushell/renderers/fiori2/resources/resources_de.properties +1 -1
  158. package/src/main/js/sap/ushell/renderers/fiori2/search/searchComponent/manifest.json +1 -1
  159. package/src/main/js/sap/ushell/services/AppConfiguration.js +0 -37
  160. package/src/main/js/sap/ushell/services/AppLifeCycle.js +50 -3
  161. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  162. package/src/main/js/sap/ushell/services/Bookmark.js +93 -30
  163. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +1 -1
  164. package/src/main/js/sap/ushell/services/CommonDataModel.js +5 -243
  165. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  166. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  167. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  168. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +1 -1
  169. package/src/main/js/sap/ushell/services/DarkModeSupport.js +1 -1
  170. package/src/main/js/sap/ushell/services/LaunchPage.js +1 -1
  171. package/src/main/js/sap/ushell/services/Menu.js +1 -1
  172. package/src/main/js/sap/ushell/services/Message.js +1 -1
  173. package/src/main/js/sap/ushell/services/MessageBroker.js +31 -12
  174. package/src/main/js/sap/ushell/services/NavTargetResolution.js +4 -2
  175. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +1 -1
  176. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  177. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  178. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  179. package/src/main/js/sap/ushell/services/Pages.js +21 -3
  180. package/src/main/js/sap/ushell/services/Personalization.js +1 -1
  181. package/src/main/js/sap/ushell/services/PluginManager.js +1 -3
  182. package/src/main/js/sap/ushell/services/ReferenceResolver.js +178 -125
  183. package/src/main/js/sap/ushell/services/Search.js +1 -1
  184. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  185. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  186. package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +15 -18
  187. package/src/main/js/sap/ushell/services/SmartNavigation.js +32 -6
  188. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  189. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  190. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  191. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +1 -1
  192. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  193. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  194. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  195. package/src/main/js/sap/ushell/services/UserRecents.js +1 -1
  196. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  197. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
  198. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Formatter.js +1 -1
  199. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/InboundIndex.js +1 -1
  200. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/InboundProvider.js +1 -1
  201. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/PrelaunchOperations.js +5 -1
  202. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Search.js +1 -1
  203. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/StagedLogger.js +1 -1
  204. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/SystemContext.js +2 -2
  205. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Utils.js +1 -1
  206. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/VirtualInbounds.js +1 -1
  207. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  208. package/src/main/js/sap/ushell/services/_CommonDataModel/SiteConverter.js +1 -1
  209. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  210. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +131 -135
  211. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
  212. package/src/main/js/sap/ushell/services/_MessageBroker/MessageBrokerEngine.js +341 -308
  213. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  214. package/src/main/js/sap/ushell/services/_PluginManager/Extensions.js +1 -1
  215. package/src/main/js/sap/ushell/services/_PluginManager/HeaderExtensions.js +1 -1
  216. package/src/main/js/sap/ushell/services/_PluginManager/MenuExtensions.js +1 -1
  217. package/src/main/js/sap/ushell/services/_Ui5ComponentLoader/utils.js +1 -1
  218. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstanceLink.js +1 -1
  219. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  220. package/src/main/js/sap/ushell/themes/base/Catalog.less +4 -0
  221. package/src/main/js/sap/ushell/themes/base/ContentFinder.less +5 -1
  222. package/src/main/js/sap/ushell/themes/base/SearchFLP.less +0 -5
  223. package/src/main/js/sap/ushell/themes/base/ShellAppTitle.less +6 -9
  224. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.eot +0 -0
  225. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.json +16 -1
  226. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.ttf +0 -0
  227. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff +0 -0
  228. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff2 +0 -0
  229. package/src/main/js/sap/ushell/themes/base/fonts/horizon/BusinessSuiteInAppSymbols.eot +0 -0
  230. package/src/main/js/sap/ushell/themes/base/fonts/horizon/BusinessSuiteInAppSymbols.ttf +0 -0
  231. package/src/main/js/sap/ushell/themes/base/fonts/horizon/BusinessSuiteInAppSymbols.woff +0 -0
  232. package/src/main/js/sap/ushell/themes/base/fonts/horizon/BusinessSuiteInAppSymbols.woff2 +0 -0
  233. package/src/main/js/sap/ushell/themes/base/library.source.less +0 -2
  234. package/src/main/js/sap/ushell/themes/sap_belize/ShellHeader.less +0 -9
  235. package/src/main/js/sap/ushell/themes/sap_belize/library.source.less +0 -1
  236. package/src/main/js/sap/ushell/themes/sap_belize_hcb/ShellHeader.less +0 -27
  237. package/src/main/js/sap/ushell/themes/sap_belize_hcb/library.source.less +0 -2
  238. package/src/main/js/sap/ushell/themes/sap_belize_hcw/ShellHeader.less +0 -25
  239. package/src/main/js/sap/ushell/themes/sap_belize_hcw/library.source.less +0 -2
  240. package/src/main/js/sap/ushell/themes/sap_bluecrystal/library.source.less +0 -2
  241. package/src/main/js/sap/ushell/themes/sap_fiori_3/ShellHeader.less +2 -11
  242. package/src/main/js/sap/ushell/themes/sap_fiori_3/library.source.less +0 -1
  243. package/src/main/js/sap/ushell/themes/sap_fiori_3_dark/ShellHeader.less +2 -11
  244. package/src/main/js/sap/ushell/themes/sap_fiori_3_dark/library.source.less +0 -1
  245. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/ShellHeader.less +0 -25
  246. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/library.source.less +0 -2
  247. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/ShellHeader.less +0 -25
  248. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/library.source.less +0 -2
  249. package/src/main/js/sap/ushell/themes/sap_hcb/ShellHeader.less +0 -24
  250. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +0 -2
  251. package/src/main/js/sap/ushell/themes/sap_horizon/ShellAppTitle.less +2 -12
  252. package/src/main/js/sap/ushell/themes/sap_horizon/library.source.less +0 -1
  253. package/src/main/js/sap/ushell/themes/sap_horizon_dark/ShellAppTitle.less +2 -12
  254. package/src/main/js/sap/ushell/themes/sap_horizon_dark/library.source.less +0 -1
  255. package/src/main/js/sap/ushell/themes/sap_horizon_hcb/ShellAppTitle.less +0 -25
  256. package/src/main/js/sap/ushell/themes/sap_horizon_hcb/library.source.less +0 -1
  257. package/src/main/js/sap/ushell/themes/sap_horizon_hcw/ShellAppTitle.less +0 -25
  258. package/src/main/js/sap/ushell/themes/sap_horizon_hcw/library.source.less +0 -1
  259. package/src/main/js/sap/ushell/ui/appfinder/AppBoxRenderer.js +0 -15
  260. package/src/main/js/sap/ushell/ui/cards/FrequentActivitiesExtension.js +199 -0
  261. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +202 -0
  262. package/src/main/js/sap/ushell/ui/contentFinder/AppBox.js +17 -2
  263. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  264. package/src/main/js/sap/ushell/ui/launchpad/LoadingDialogRenderer.js +2 -45
  265. package/src/main/js/sap/ushell/ui/launchpad/Page.js +1 -1
  266. package/src/main/js/sap/ushell/ui/launchpad/Section.js +2 -2
  267. package/src/main/js/sap/ushell/ui/launchpad/TileRenderer.js +4 -21
  268. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  269. package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +6 -8
  270. package/src/main/js/sap/ushell/ui/shell/ShellHeadItem.js +1 -1
  271. package/src/main/js/sap/ushell/ui/shell/ShellLayout.js +1 -1
  272. package/src/main/js/sap/ushell/ui/shell/ShellNavigationMenu.js +21 -62
  273. package/src/main/js/sap/ushell/ui/shell/SplitContainer.js +1 -1
  274. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  275. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  276. package/src/main/js/sap/ushell/ui5service/ShellUIService.js +1 -1
  277. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  278. package/src/main/js/sap/ushell/utils/DynamicTileRequest.js +25 -5
  279. package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
  280. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  281. package/ui5.yaml +53 -51
  282. package/src/main/js/sap/ushell/services/ContentExtension.js +0 -114
  283. package/src/main/js/sap/ushell/themes/base/UserPreferencesButton.less +0 -35
  284. package/src/main/js/sap/ushell/themes/base/flower-standalone.less +0 -774
  285. package/src/main/js/sap/ushell/themes/sap_belize/UserPreferencesButton.less +0 -7
  286. package/src/main/js/sap/ushell/themes/sap_belize_hcb/UserPreferencesButton.less +0 -7
  287. package/src/main/js/sap/ushell/themes/sap_belize_hcb/flower-standalone.less +0 -34
  288. package/src/main/js/sap/ushell/themes/sap_belize_hcw/UserPreferencesButton.less +0 -7
  289. package/src/main/js/sap/ushell/themes/sap_belize_hcw/flower-standalone.less +0 -34
  290. package/src/main/js/sap/ushell/themes/sap_bluecrystal/UserPreferencesButton.less +0 -7
  291. package/src/main/js/sap/ushell/themes/sap_bluecrystal/flower-standalone.less +0 -23
  292. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/flower-standalone.less +0 -34
  293. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/flower-standalone.less +0 -33
  294. package/src/main/js/sap/ushell/themes/sap_hcb/UserPreferencesButton.less +0 -7
  295. package/src/main/js/sap/ushell/themes/sap_hcb/flower-standalone.less +0 -34
  296. package/src/main/js/sap/ushell/themes/sap_horizon/UserPreferencesButton.less +0 -9
  297. package/src/main/js/sap/ushell/themes/sap_horizon_dark/UserPreferencesButton.less +0 -8
  298. package/src/main/js/sap/ushell/ui/footerbar/SettingsButton.js +0 -90
  299. package/src/main/js/sap/ushell/ui/footerbar/UserPreferencesButton.js +0 -505
  300. package/src/main/js/sap/ushell/ui5service/CardNavigation.js +0 -131
  301. package/src/main/js/sap/ushell/ui5service/CardUserFrequents.js +0 -138
  302. package/src/main/js/sap/ushell/ui5service/CardUserRecents.js +0 -101
  303. package/src/main/js/sap/ushell/ui5service/_CardUserRecents/CardUserRecentsBase.js +0 -108
@@ -1,26 +1,29 @@
1
1
  // Copyright (c) 2009-2022 SAP SE, All Rights Reserved
2
2
 
3
3
  /**
4
- * @fileOverview This module contains API call processing logic
5
- * @version 1.111.1
4
+ * @fileOverview This module contains the implementation of the message broker
5
+ * @version 1.112.0
6
6
  */
7
7
  sap.ui.define([
8
8
  "sap/base/Log",
9
- "sap/base/util/deepExtend",
10
- "sap/ushell/components/applicationIntegration/application/Application"
11
- ], function (Log, deepExtend, Application) {
9
+ "sap/base/util/deepExtend"
10
+ ], function (Log, deepExtend) {
12
11
  "use strict";
13
12
 
14
13
  var oAcceptedOrigins = {},
15
14
  oClientsPerChannel = {},
16
- oActiveClients = {};
15
+ oConnectedClients = {},
16
+ oSubscribedClients = {};
17
+
18
+ //add default origin
19
+ oAcceptedOrigins[window.location.origin] = true;
17
20
 
18
21
  var MessageBrokerEngine = function () {
19
22
 
20
23
  /**
21
- * This method maps PostMessage to API
22
24
  *
23
25
  * @param {object} oPostMessageData The PostMessage object.
26
+ * @returns {Promise} Promise result.
24
27
  *
25
28
  * @since 1.110.0
26
29
  * @private
@@ -28,40 +31,110 @@ sap.ui.define([
28
31
 
29
32
  this.processPostMessage = function (oPostMessageData) {
30
33
 
31
- return new Promise(function (resolve, reject) {
34
+ var oMessageData = oPostMessageData.oMessageData,
35
+ oMessageDataBody = oMessageData.body,
36
+ oMessage = oPostMessageData.oMessage,
37
+ sOrigin = oMessage.origin,
38
+ oIframe = oMessage.source;
39
+
40
+ oMessageDataBody.requestId = oMessageData.request_id;
41
+
42
+ if (!oIframe) {
43
+ var sErrorMsg = "Missing iframe object in PostMessage request";
44
+ Log.error(sErrorMsg, null, "sap.ushell.services.MessageBroker");
45
+ return Promise.reject(sErrorMsg);
46
+ }
47
+
48
+ return this._handlePostMessageRequest(oMessageDataBody, oIframe, sOrigin);
49
+ };
50
+
51
+ /**
52
+ *
53
+ * @param {string} sClientId client id.
54
+ * @returns {Promise} the result.
55
+ *
56
+ * @since 1.110.0
57
+ * @private
58
+ */
32
59
 
33
- var oMessageData = oPostMessageData.oMessageData,
34
- oMessageDataBody = oMessageData.body,
35
- oMessage = oPostMessageData.oMessage,
36
- sOrigin = oMessage.origin,
37
- oIframe = oMessage.source;
60
+ this.connect = function (sClientId) {
38
61
 
39
- oMessageDataBody.requestId = oMessageData.request_id;
62
+ var sError;
63
+
64
+ if (typeof sClientId !== "string" || !sClientId.length) {
65
+ sError = "Missing required parameter client id";
66
+ } else if (oConnectedClients[sClientId]) {
67
+ sError = "Client is already connected";
68
+ } else {
69
+ var aSubscribedClients = Object.values(oSubscribedClients);
70
+ // add client initial entry to connected clients
71
+ oConnectedClients[sClientId] = true;
72
+ return Promise.resolve(aSubscribedClients);
73
+ }
40
74
 
41
- if (!oIframe) {
42
- Log.error("Missing iframe object");
43
- return reject("Missing iframe object");
75
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
76
+ return Promise.reject(sError);
77
+ };
78
+
79
+ /**
80
+ *
81
+ * @param {string} sClientId client id.
82
+ * @returns {Promise} the result.
83
+ *
84
+ * @since 1.110.0
85
+ * @private
86
+ */
87
+
88
+ this.disconnect = function (sClientId) {
89
+
90
+ var sError;
91
+
92
+ if (typeof sClientId !== "string" || !sClientId.length) {
93
+ sError = "Missing required parameter client id";
94
+ } else if (!oConnectedClients[sClientId]) {
95
+ sError = "Client is already disconnected";
96
+ } else {
97
+
98
+ for (var sChannelKey in oClientsPerChannel) {
99
+
100
+ var aChannelClients = oClientsPerChannel[sChannelKey];
101
+ // find client and remove from the channel
102
+ for (var oClientKey in aChannelClients) {
103
+
104
+ var oClient = aChannelClients[oClientKey];
105
+
106
+ if (oClient.clientId === sClientId) {
107
+ aChannelClients.splice(oClientKey, 1);
108
+ break;
109
+ }
110
+ }
44
111
  }
45
112
 
46
- this._handlePostMessageRequest(oMessageDataBody, oIframe, sOrigin)
47
- .then(function (oResponse) {
48
- return resolve(oResponse);
49
- })
50
- .catch(function (sError) {
51
- return reject(sError);
52
- });
53
- }.bind(this));
113
+ // if client disconnects but is still subscribed
114
+ if (oSubscribedClients[sClientId] && oSubscribedClients[sClientId].channels.length) {
115
+ this._emitEvent("clientUnsubscribed", sClientId, oSubscribedClients[sClientId].channels);
116
+
117
+ // remove from subscribed clients
118
+ delete oSubscribedClients[sClientId];
119
+ }
120
+ // remove from connected clients
121
+ delete oConnectedClients[sClientId];
122
+
123
+ return Promise.resolve();
124
+ }
125
+
126
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
127
+ return Promise.reject(sError);
54
128
  };
55
129
 
56
130
  /**
57
131
  *
58
132
  * @param {string} sClientId client id.
59
133
  * @param {array} aSubscribedChannels array of channel-objects.
60
- * @param {object} data additional data.
61
134
  * @param {function} fnMessageCallback callback function returns promise.
62
135
  * @param {function} fnClientConnectionCallback callback function returns promise.
63
- * @param {object} oIframe iframe object if embedded client.
64
- * @param {string} sOrigin iframe origin if embedded client.
136
+ * @param {object} oIframe iframe object if iframe client.
137
+ * @param {string} sOrigin iframe origin if iframe client.
65
138
  * @returns {Promise} the result.
66
139
  *
67
140
  * @since 1.110.0
@@ -71,30 +144,26 @@ sap.ui.define([
71
144
  this.subscribe = function (
72
145
  sClientId,
73
146
  aSubscribedChannels,
74
- data,
75
147
  fnMessageCallback,
76
148
  fnClientConnectionCallback,
77
149
  oIframe,
78
150
  sOrigin
79
151
  ) {
80
152
 
81
- return new Promise(function (resolve, reject) {
82
-
83
- // in case connect request received twice
84
- if (oActiveClients[sClientId]) {
85
- Log.error("MessageBroker.subscribe: attempt to subscribe twice");
86
- return reject("Client already subscribed");
87
- }
88
-
89
- if (!sClientId || !aSubscribedChannels.length ||
90
- (typeof oIframe !== "object" &&
91
- (typeof fnMessageCallback !== "function" ||
92
- typeof fnClientConnectionCallback !== "function"))
93
- ) {
94
- Log.error("MessageBroker.subscribe: Missing required parameter(s)");
95
- return reject("Missing required parameter(s)");
96
- }
97
-
153
+ var sError,
154
+ sMessageName = "clientSubscribed",
155
+ aOtherSubscribedClients = [],
156
+ bIsNewClient = false;
157
+
158
+ if (typeof sClientId !== "string" || !sClientId.length ||
159
+ !aSubscribedChannels.length ||
160
+ (typeof oIframe !== "object" &&
161
+ (typeof fnMessageCallback !== "function" ||
162
+ typeof fnClientConnectionCallback !== "function"))) {
163
+ sError = "Missing required parameter(s)";
164
+ } else if (!oConnectedClients[sClientId]) {
165
+ sError = "Client is not connected";
166
+ } else {
98
167
  for (var sChannelKey in aSubscribedChannels) {
99
168
 
100
169
  var oChannel = aSubscribedChannels[sChannelKey];
@@ -103,96 +172,142 @@ sap.ui.define([
103
172
  var oFullClientData = {
104
173
  clientId: sClientId,
105
174
  subscribedChannels: aSubscribedChannels,
106
- data: data,
107
175
  messageCallback: fnMessageCallback,
108
176
  clientConnectionCallback: fnClientConnectionCallback,
109
177
  iframe: oIframe || {},
110
178
  origin: sOrigin || "",
111
- isUI5: !oIframe && !sOrigin
179
+ isUI5: !oIframe
112
180
  };
113
181
 
182
+ // add new channel
114
183
  if (!oClientsPerChannel[oChannel.channelId]) {
115
184
  oClientsPerChannel[oChannel.channelId] = [];
116
185
  }
117
186
 
118
- oClientsPerChannel[oChannel.channelId].push(oFullClientData);
187
+ var oExistingClient = oClientsPerChannel[oChannel.channelId].find(function (oClient) {
188
+ return oClient.clientId === sClientId;
189
+ });
190
+
191
+ // add new client
192
+ if (!oExistingClient) {
193
+ oClientsPerChannel[oChannel.channelId].push(oFullClientData);
194
+ }
195
+
196
+ // if client is already subscribed to any channel
197
+ if (oSubscribedClients[sClientId]) {
198
+ var oExistingChannel = oSubscribedClients[sClientId].channels.find(function (oSubChannel) {
199
+ return oSubChannel.channelId === oChannel.channelId;
200
+ });
201
+
202
+ if (!oExistingChannel) {
203
+ // add new channel to the existing channels
204
+ oSubscribedClients[sClientId].channels.push(oChannel);
205
+ }
206
+ }
119
207
  }
120
208
 
121
- var oActiveClientData = {
122
- clientId: sClientId,
123
- subscribedChannels: aSubscribedChannels
124
- };
209
+ // if new client
210
+ if (!oSubscribedClients[sClientId]) {
125
211
 
126
- var aConnectedClients = Object.values(oActiveClients);
127
- oActiveClients[sClientId] = oActiveClientData;
212
+ bIsNewClient = true;
128
213
 
129
- // notify other connected clients
130
- if (Object.keys(oActiveClients).length > 1) {
131
- this._emitEvent("clientConnected", sClientId, aSubscribedChannels, data);
214
+ var oSubscriptionData = {
215
+ clientId: sClientId,
216
+ channels: aSubscribedChannels
217
+ };
218
+ // add to subscribed clients
219
+ oSubscribedClients[sClientId] = oSubscriptionData;
220
+
221
+ aOtherSubscribedClients = Object.values(oSubscribedClients).filter(function (oClient) {
222
+ return oClient.clientId !== sClientId;
223
+ });
224
+ // notify new UI5 client of other already subscribed clients
225
+ if (!oIframe && aOtherSubscribedClients.length) {
226
+ fnClientConnectionCallback(sMessageName, aOtherSubscribedClients);
227
+ }
132
228
  }
133
229
 
134
- return resolve(aConnectedClients);
135
- }.bind(this));
230
+ // notify other subscribed clients of new subscription
231
+ if (Object.keys(oSubscribedClients).length > 1) {
232
+ this._emitEvent(sMessageName, sClientId, aSubscribedChannels);
233
+ }
234
+
235
+ return Promise.resolve(oIframe && bIsNewClient ? aOtherSubscribedClients : "");
236
+ }
237
+
238
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
239
+ return Promise.reject(sError);
136
240
  };
137
241
 
138
242
  /**
139
243
  *
140
244
  * @param {string} sClientId client id.
245
+ * @param {array} aUnsubscribedChannels channels to unsubscribe from.
141
246
  * @returns {Promise} the resolve or error.
142
247
  *
143
248
  * @since 1.110.0
144
249
  * @private
145
250
  */
146
251
 
147
- this.unsubscribe = function (sClientId) {
148
-
149
- return new Promise(function (resolve, reject) {
252
+ this.unsubscribe = function (sClientId, aUnsubscribedChannels) {
150
253
 
151
- var aSubscribedChannels = [];
254
+ var sError;
152
255
 
153
- if (!sClientId) {
154
- Log.error("MessageBroker.unsubscribe: Missing required parameter sClientId");
155
- return reject("MessageBroker.unsubscribe: Missing required parameter sClientId");
156
- }
256
+ if (typeof sClientId !== "string" || !sClientId.length ||
257
+ !Array.isArray(aUnsubscribedChannels) || !aUnsubscribedChannels.length) {
258
+ sError = "Missing required parameter(s)";
259
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
260
+ return Promise.reject(sError);
261
+ }
157
262
 
158
- // in case disconnect request received twice
159
- if (!oActiveClients[sClientId]) {
160
- Log.error("MessageBroker.unsubscribe: attempt to unsubscribe twice");
161
- return reject("Client already unsubscribed");
162
- }
263
+ if (!oConnectedClients[sClientId]) {
264
+ sError = "Client is not connected";
265
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
266
+ return Promise.reject(sError);
267
+ }
163
268
 
164
- delete oActiveClients[sClientId];
269
+ for (var sChannelIndex in aUnsubscribedChannels) {
165
270
 
166
- for (var sChannelKey in oClientsPerChannel) {
271
+ var oChannel = aUnsubscribedChannels[sChannelIndex];
167
272
 
168
- var aChannelClients = oClientsPerChannel[sChannelKey];
273
+ if (oClientsPerChannel[oChannel.channelId]) {
274
+ var aChannelClients = oClientsPerChannel[oChannel.channelId];
169
275
  // find client and remove from the channel
170
276
  for (var oClientKey in aChannelClients) {
171
277
 
172
278
  var oClient = aChannelClients[oClientKey];
173
279
 
174
280
  if (oClient.clientId === sClientId) {
281
+ var aSubscribedChannels = oSubscribedClients[sClientId].channels;
282
+
283
+ oSubscribedClients[sClientId].channels = aSubscribedChannels.filter(function (oSubChannel) {
284
+ return oSubChannel.channelId !== oChannel.channelId;
285
+ });
175
286
 
176
- aSubscribedChannels = oClient.subscribedChannels;
177
287
  aChannelClients.splice(oClientKey, 1);
178
288
  break;
179
289
  }
180
290
  }
291
+ } else {
292
+ // if channel does not exist
293
+ var sMessage = "Unknown channel Id: " + oChannel.channelId;
294
+ Log.warning(sMessage, null, "sap.ushell.services.MessageBroker");
181
295
  }
296
+ }
182
297
 
183
- this._emitEvent( "clientDisconnected", sClientId, aSubscribedChannels, {});
184
- return resolve();
185
- }.bind(this));
298
+ this._emitEvent( "clientUnsubscribed", sClientId, aUnsubscribedChannels);
299
+ return Promise.resolve();
186
300
  };
187
301
 
188
302
  /**
189
303
  *
190
304
  * @param {string} sChannelId channel id.
191
305
  * @param {string} sClientId client id.
192
- * @param {string} sMessageId request id for embedded clients or message id for UI5 clients.
306
+ * @param {string} sMessageId request id for iframe clients or message id for UI5 clients.
193
307
  * @param {string} sMessageName message name.
194
308
  * @param {array} aTargetClientIds array of target clients Ids.
195
309
  * @param {object} data additional data.
310
+ * @returns {Promise} Promise result.
196
311
  *
197
312
  * @since 1.110.0
198
313
  * @private
@@ -200,54 +315,62 @@ sap.ui.define([
200
315
 
201
316
  this.publish = function (sChannelId, sClientId, sMessageId, sMessageName, aTargetClientIds, data) {
202
317
 
203
- return new Promise(function (resolve, reject) {
318
+ var sError,
319
+ aTargetClients = [];
204
320
 
205
- var sError;
321
+ // if client is not connected
322
+ if (!oConnectedClients[sClientId]) {
323
+ sError = "Client is not connected";
324
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
325
+ return Promise.reject(sError);
326
+ }
206
327
 
207
- // if channel does not exist
208
- if (!oClientsPerChannel[sChannelId]) {
209
- sError = "Unknown channel Id: " + sChannelId;
210
- Log.error(sError);
211
- return reject(sError);
212
- }
328
+ // if channel does not exist
329
+ if (!oClientsPerChannel[sChannelId]) {
330
+ sError = "Unknown channel Id: " + sChannelId;
331
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
332
+ return Promise.reject(sError);
333
+ }
213
334
 
214
- var aTargetClients = [];
335
+ var oPubClient = oClientsPerChannel[sChannelId].find(function (oSubClient) {
336
+ return oSubClient.clientId === sClientId;
337
+ });
215
338
 
216
- for (var sClientKey in aTargetClientIds) {
339
+ // if client is not subscribed to the channel
340
+ if (!oPubClient) {
341
+ sError = "Client is not subscribed to the provided channel";
342
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
343
+ return Promise.reject(sError);
344
+ }
217
345
 
346
+ for (var sClientKey in aTargetClientIds) {
218
347
 
219
- var sTargetClientId = aTargetClientIds[sClientKey];
348
+ var sTargetClientId = aTargetClientIds[sClientKey];
220
349
 
221
- // check if message is for all clients in the channel
222
- if (sTargetClientId === "*") {
223
- aTargetClients = oClientsPerChannel[sChannelId].concat();
224
- break;
225
- } else {
226
- // check if target client exists
227
- var oTargetClient = oClientsPerChannel[sChannelId].find(function (oClient) {
228
- return oClient.clientId === sTargetClientId;
229
- });
350
+ // if message is for all clients in the channel
351
+ if (sTargetClientId === "*") {
352
+ aTargetClients = oClientsPerChannel[sChannelId].concat();
353
+ break;
354
+ } else {
355
+ // check if target client exists
356
+ var oTargetClient = oClientsPerChannel[sChannelId].find(function (oClient) {
357
+ return oClient.clientId === sTargetClientId;
358
+ });
230
359
 
231
- if (oTargetClient) {
232
- aTargetClients.push(this._deepCopy(oTargetClient));
233
- }
360
+ if (oTargetClient) {
361
+ aTargetClients.push(this._deepCopy(oTargetClient));
234
362
  }
235
363
  }
364
+ }
236
365
 
237
- if (aTargetClients.length) {
238
- this._sendMessage("request", aTargetClients, sChannelId, sMessageId, sMessageName, sClientId, data)
239
- .then(function (oResponse) {
240
- return resolve(oResponse);
241
- })
242
- .catch(function (sErrorMsg) {
243
- return reject(sErrorMsg);
244
- });
245
- } else {
246
- sError = "Target client(s) not found in the provided channel";
247
- Log.error(sError);
248
- return reject(sError);
249
- }
250
- }.bind(this));
366
+ if (aTargetClients.length) {
367
+ this._sendMessage(aTargetClients, sChannelId, sMessageId, sMessageName, sClientId, data);
368
+ return Promise.resolve();
369
+ } else {
370
+ sError = "Target client(s) not found in the provided channel";
371
+ Log.error(sError, null, "sap.ushell.services.MessageBroker");
372
+ return Promise.reject(sError);
373
+ }
251
374
  };
252
375
 
253
376
  /**
@@ -260,10 +383,10 @@ sap.ui.define([
260
383
 
261
384
  this.addAcceptedOrigin = function (sOrigin) {
262
385
 
263
- if (sOrigin) {
386
+ if (typeof sOrigin === "string" && sOrigin.length > 0) {
264
387
  oAcceptedOrigins[sOrigin] = true;
265
388
  } else {
266
- Log.error("MessageBroker.addAcceptedOrigin: Missing required parameter sOrigin");
389
+ Log.warning("Missing required parameter sOrigin", null, "sap.ushell.services.MessageBroker");
267
390
  }
268
391
  };
269
392
 
@@ -281,18 +404,17 @@ sap.ui.define([
281
404
 
282
405
  /**
283
406
  *
284
- * @returns {promise} the result.
407
+ * @returns {array} the result.
285
408
  *
286
409
  * @since 1.110.0
287
410
  * @private
288
411
  */
289
412
 
290
413
  this.getAcceptedOrigins = function () {
291
- return Promise.resolve(Object.keys(oAcceptedOrigins));
414
+ return Object.keys(oAcceptedOrigins);
292
415
  };
293
416
 
294
417
  /**
295
- * This function is for testing the state of oActiveClients in qunit
296
418
  *
297
419
  * @returns {object} the result.
298
420
  *
@@ -300,23 +422,21 @@ sap.ui.define([
300
422
  * @private
301
423
  */
302
424
 
303
- this.getConnectedClients = function () {
425
+ this.getSubscribedClients = function () {
304
426
  return this._deepCopy(oClientsPerChannel);
305
427
  };
306
428
 
307
429
  /**
308
- * This function notifies clients of various events in a channel
309
430
  *
310
431
  * @param {string} sMessageName message name.
311
432
  * @param {string} sClientId client id.
312
- * @param {array} aSubscribedChannels subscribed channels of the client.
313
- * @param {object} data additional data.
433
+ * @param {array} aChannels subscribed/unsubscribed channels of the client.
314
434
  *
315
435
  * @since 1.110.0
316
436
  * @private
317
437
  */
318
438
 
319
- this._emitEvent = function (sMessageName, sClientId, aSubscribedChannels, data) {
439
+ this._emitEvent = function (sMessageName, sClientId, aChannels) {
320
440
 
321
441
  var oNotifiedClients = {};
322
442
 
@@ -329,17 +449,20 @@ sap.ui.define([
329
449
  var oClient = oChannel[sClientKey];
330
450
  // do not notify the same client who initiated the event
331
451
  if (oClient.clientId !== sClientId && !oNotifiedClients[oClient.clientId]) {
452
+
453
+ var oParams = {
454
+ clientId: sClientId,
455
+ channels: aChannels
456
+ };
457
+
332
458
  if (oClient.isUI5 !== false) {
333
- oClient.clientConnectionCallback(sMessageName, sClientId, aSubscribedChannels, data);
459
+ oClient.clientConnectionCallback(sMessageName, [oParams]);
334
460
  } else {
335
- var oParams = {
336
- clientId: sClientId,
337
- channelId: "sap.ushell.MessageBroker",
338
- messageName: sMessageName,
339
- subscribedChannels: aSubscribedChannels,
340
- data: data
341
- },
342
- oMessageBody = this._buildPostMessageObject("event", oParams);
461
+
462
+ oParams.channelId = "sap.ushell.MessageBroker";
463
+ oParams.messageName = sMessageName;
464
+
465
+ var oMessageBody = this._buildPostMessageObject("event", oParams);
343
466
  this._sendPostMessageToClient(oMessageBody, oClient.iframe, oClient.origin, false);
344
467
  }
345
468
 
@@ -350,161 +473,41 @@ sap.ui.define([
350
473
  };
351
474
 
352
475
  /**
353
- * This function sends message to UI5 client and awaits for reply
354
- *
355
- * @param {object} oClient target client object.
356
- * @param {string} sClientId client id.
357
- * @param {string} sChannelId channel id.
358
- * @param {string} sMessageId request id for embedded clients or message id for UI5 clients.
359
- * @param {string} sMessageName message name.
360
- * @param {object} data additional data.
361
- * @returns {Promise} Promise result.
362
476
  *
363
- * @since 1.110.0
364
- * @private
365
- */
366
-
367
-
368
- this._sendMessageToUI5Client = function(oClient, sClientId, sChannelId, sMessageId, sMessageName, data) {
369
-
370
- return new Promise(function (resolve, reject) {
371
- oClient.messageCallback(sClientId, sChannelId, sMessageName, data)
372
- .then(function (oResponse) {
373
- if (oResponse) {
374
- var oRequestingClient = oClientsPerChannel[sChannelId].find(function (oStoredClient) {
375
- return oStoredClient.clientId === sClientId;
376
- }),
377
- oRequestingClientClone = this._deepCopy(oRequestingClient);
378
-
379
- // send data back to client who requested it
380
- if (oRequestingClientClone.isUI5 !== false) {
381
- oRequestingClientClone.messageCallback(oClient.clientId, sChannelId, sMessageName, oResponse, sMessageId);
382
- } else {
383
- var oParams = {
384
- clientId: oClient.clientId,
385
- channelId: sChannelId,
386
- messageName: sMessageName,
387
- subscribedChannels: oClient.subscribedChannels,
388
- data: oResponse,
389
- requestId: sMessageId
390
- },
391
- oMessageBody = this._buildPostMessageObject("response", oParams);
392
- // send data back to client who requested it
393
- this._sendPostMessageToClient(oMessageBody, oRequestingClientClone.iframe, oRequestingClientClone.origin, false);
394
- }
395
- }
396
-
397
- return resolve();
398
- }.bind(this))
399
- .catch(function (sError) {
400
- return reject(sError);
401
- });
402
- }.bind(this));
403
- };
404
-
405
- /**
406
- * This function sends message to embedded client and awaits for reply
407
- *
408
- * @param {string} sActionType request/response.
409
- * @param {object} oClient target client object.
410
- * @param {object} oParams post message parameters.
411
- * @returns {Promise} Promise result.
412
- *
413
- * @since 1.110.0
414
- * @private
415
- */
416
-
417
-
418
- this._sendMessageToEmbeddedClient = function(sActionType, oClient, oParams) {
419
-
420
- return new Promise(function (resolve, reject) {
421
-
422
- var oMessageBody = this._buildPostMessageObject(sActionType, oParams);
423
-
424
- this._sendPostMessageToClient(oMessageBody, oClient.iframe, oClient.origin, true)
425
- .then(function (oResponse) {
426
- if (oResponse) {
427
- var oRequestingClient = oClientsPerChannel[oParams.channelId].find(function (oStoredClient) {
428
- return oStoredClient.clientId === oParams.clientId;
429
- }),
430
- oRequestingClientClone = this._deepCopy(oRequestingClient);
431
-
432
- // send data back to client who requested it
433
- if (oRequestingClientClone.isUI5 !== false) {
434
- oRequestingClientClone.messageCallback(oClient.clientId, oParams.channelId, oParams.messageName, oResponse.body, oParams.requestId);
435
- } else {
436
- oResponse.request_id = oResponse.correlationMessageId = oParams.requestId;
437
- this._sendPostMessageToClient(oResponse, oRequestingClientClone.iframe, oRequestingClientClone.origin, false);
438
- }
439
- }
440
-
441
- return resolve();
442
- }.bind(this))
443
- .catch(function (sError) {
444
- return reject(sError);
445
- });
446
- }.bind(this));
447
- };
448
-
449
- /**
450
- * This function sends message to client(s)
451
- *
452
- * @param {string} sActionType action type (response/request).
453
477
  * @param {array} aTargetClients target clients.
454
478
  * @param {string} sChannelId channel id.
455
- * @param {string} sMessageId request id for embedded clients or message id for UI5 clients.
479
+ * @param {string} sMessageId request id for iframe clients or message id for UI5 clients.
456
480
  * @param {string} sMessageName message name.
457
481
  * @param {string} sClientId client id.
458
482
  * @param {object} data additional data.
459
- * @returns {Promise} Promise result.
460
483
  *
461
484
  * @since 1.110.0
462
485
  * @private
463
486
  */
464
487
 
465
- this._sendMessage = function (sActionType, aTargetClients, sChannelId, sMessageId, sMessageName, sClientId, data) {
466
-
467
- return new Promise(function (resolve, reject) {
468
-
469
- if (!aTargetClients.length) {
470
- return resolve(aTargetClients);
471
- }
472
-
473
- for (var sClientKey in aTargetClients) {
488
+ this._sendMessage = function (aTargetClients, sChannelId, sMessageId, sMessageName, sClientId, data) {
474
489
 
475
- var oClient = aTargetClients[sClientKey];
490
+ for (var sClientKey in aTargetClients) {
476
491
 
477
- // do not send message to the same client who requested to send it
478
- if (oClient.clientId !== sClientId) {
479
- if (oClient.isUI5 !== false) {
492
+ var oClient = aTargetClients[sClientKey];
480
493
 
481
- this._sendMessageToUI5Client(oClient, sClientId, sChannelId, sMessageId, sMessageName, data)
482
- .then(function (oResponse) {
483
- return resolve(oResponse);
484
- })
485
- .catch(function (sError) {
486
- return reject(sError);
487
- });
488
- } else {
489
- var oParams = {
490
- clientId: sClientId,
491
- channelId: sChannelId,
492
- messageName: sMessageName,
493
- requestId: sMessageId,
494
- data: data
495
- };
496
-
497
- this._sendMessageToEmbeddedClient(sActionType, oClient, oParams)
498
- .then(function (oResponse) {
499
- return resolve(oResponse);
500
- })
501
- .catch(function (sError) {
502
- return reject(sError);
503
- });
504
- }
494
+ // do not send message to the same client who requested to send it
495
+ if (oClient.clientId !== sClientId) {
496
+ if (oClient.isUI5 !== false) {
497
+ oClient.messageCallback(sClientId, sChannelId, sMessageName, data);
498
+ } else {
499
+ var oParams = {
500
+ clientId: sClientId,
501
+ channelId: sChannelId,
502
+ messageName: sMessageName,
503
+ data: data
504
+ };
505
+
506
+ var oMessageBody = this._buildPostMessageObject("request", oParams);
507
+ this._sendPostMessageToClient(oMessageBody, oClient.iframe, oClient.origin, false);
505
508
  }
506
509
  }
507
- }.bind(this));
510
+ }
508
511
  };
509
512
 
510
513
  /**
@@ -536,28 +539,33 @@ sap.ui.define([
536
539
  return new Promise(function (resolve, reject) {
537
540
 
538
541
  var sEndpoint,
539
- sStatus = "accepted",
540
542
  bPostMsgResponse = false,
541
543
  sClientId = oMessageDataBody.clientId,
542
544
  sChannelId = oMessageDataBody.channelId,
543
545
  sRequestId = oMessageDataBody.requestId,
544
546
  sMessageName = oMessageDataBody.messageName,
545
547
  aSubscribedChannels = oMessageDataBody.subscribedChannels,
546
- aTargetClientIds = oMessageDataBody.targetClientIds || [],
548
+ aTargetClientIds = oMessageDataBody.targetClientIds,
547
549
  data = oMessageDataBody.data;
548
550
 
549
551
  var oEndpointParams = {
552
+ connect: [
553
+ sClientId
554
+ ],
555
+ disconnect: [
556
+ sClientId
557
+ ],
550
558
  subscribe: [
551
559
  sClientId,
552
560
  aSubscribedChannels,
553
- data,
554
561
  null,
555
562
  null,
556
563
  oIframe,
557
564
  sOrigin
558
565
  ],
559
566
  unsubscribe: [
560
- sClientId
567
+ sClientId,
568
+ aSubscribedChannels
561
569
  ],
562
570
  publish: [
563
571
  sChannelId,
@@ -573,18 +581,15 @@ sap.ui.define([
573
581
  channelId: sChannelId,
574
582
  clientId: sClientId,
575
583
  messageName: sMessageName,
576
- data: data,
577
584
  requestId: sRequestId
578
- },
579
- oResponseObject = this._buildPostMessageObject("response", oPostMessageParams);
585
+ };
580
586
 
581
587
  switch (sMessageName) {
582
588
  case "connect":
583
- sEndpoint = "subscribe";
584
- bPostMsgResponse = true;
585
- break;
586
589
  case "disconnect":
587
- sEndpoint = "unsubscribe";
590
+ case "subscribe":
591
+ case "unsubscribe":
592
+ sEndpoint = sMessageName;
588
593
  bPostMsgResponse = true;
589
594
  break;
590
595
  default:
@@ -592,6 +597,8 @@ sap.ui.define([
592
597
  break;
593
598
  }
594
599
 
600
+ var oResponseObject = this._buildPostMessageObject("response", oPostMessageParams);
601
+
595
602
  this._callApi(sEndpoint, oEndpointParams[sEndpoint])
596
603
  .then(function (oResponse) {
597
604
  if (Array.isArray(oResponse)) {
@@ -606,9 +613,7 @@ sap.ui.define([
606
613
  })
607
614
  .finally(function () {
608
615
  if (bPostMsgResponse) {
609
- if (sStatus) {
610
- oResponseObject.body.status = sStatus;
611
- }
616
+ oResponseObject.body.status = "accepted";
612
617
  this._sendPostMessageToClient(oResponseObject, oIframe, sOrigin, false);
613
618
  }
614
619
  }.bind(this));
@@ -625,46 +630,79 @@ sap.ui.define([
625
630
  */
626
631
 
627
632
  this._sendPostMessageToClient = function (oMessageDataBody, oIframe, sTargetDomain, bWaitForResponse) {
628
- return Application.postMessageToIframeObject(oMessageDataBody, oIframe, sTargetDomain, bWaitForResponse);
633
+ return new Promise(function (resolve, reject) {
634
+ sap.ui.require(["sap/ushell/components/applicationIntegration/application/Application"], function (Application) {
635
+ Application.postMessageToIframeObject(oMessageDataBody, oIframe, sTargetDomain, bWaitForResponse).then(resolve, reject);
636
+ });
637
+ });
629
638
  };
630
639
 
631
640
  /**
632
- * This function builds post message object
633
641
  *
634
642
  * @param {string} sType object type.
635
643
  * @param {object} oParams object properties.
636
- * @returns {function} relevant function to call.
644
+ * @returns {object} relevant post message object.
637
645
  *
638
646
  * @since 1.110.0
639
647
  * @private
640
648
  */
641
649
 
642
650
  this._buildPostMessageObject = function (sObjectType, oParams) {
651
+ function createPostMessageRequest (sServiceName, oMessageBody) {
652
+ var sRequestId = Date.now().toString();
653
+
654
+ return {
655
+ type: "request",
656
+ request_id: sRequestId,
657
+ service: sServiceName,
658
+ body: oMessageBody
659
+ };
660
+ }
661
+
662
+ function createPostMessageResponse (sServiceName, sRequestId, oMessageBody, bSuccess) {
663
+ return {
664
+ type: "response",
665
+ request_id: sRequestId,
666
+ service: sServiceName,
667
+ status: (bSuccess ? "success" : "error"),
668
+ body: oMessageBody
669
+ };
670
+ }
643
671
 
644
672
  var sServiceName = "sap.ushell.services.MessageBroker",
645
673
  oMessageBody = {
646
674
  request: {
647
675
  channelId: oParams.channelId,
648
676
  clientId: oParams.clientId,
649
- messageName: oParams.messageName,
650
- data: oParams.data
677
+ messageName: oParams.messageName
651
678
  },
652
679
  response: {
653
680
  channelId: oParams.channelId,
654
681
  clientId: oParams.clientId,
655
682
  correlationMessageId: oParams.requestId,
656
- messageName: oParams.messageName,
657
- data: oParams.data
683
+ messageName: oParams.messageName
658
684
  },
659
685
  event: {
660
686
  channelId: oParams.channelId,
661
687
  clientId: oParams.clientId,
662
- messageName: oParams.messageName,
663
- subscribedChannels: oParams.subscribedChannels,
664
- data: oParams.data
688
+ messageName: oParams.messageName
665
689
  }
666
690
  };
667
691
 
692
+ switch (sObjectType) {
693
+ case "event":
694
+ oMessageBody.event.channels = oParams.channels;
695
+ break;
696
+ case "request":
697
+ if (oParams.data) {
698
+ oMessageBody[sObjectType].data = oParams.data;
699
+ }
700
+ if (oParams.activeClients) {
701
+ oMessageBody[sObjectType].activeClients = oParams.activeClients;
702
+ }
703
+ break;
704
+ }
705
+
668
706
  var oObjectParams = {
669
707
  request: [
670
708
  sServiceName,
@@ -682,16 +720,12 @@ sap.ui.define([
682
720
  ]
683
721
  };
684
722
 
685
- if (oParams.activeClients) {
686
- oMessageBody[sObjectType].activeClients = oParams.activeClients;
687
- }
688
-
689
- var sMethod = this._buildFunctionName("createPostMessage", sObjectType === "response" ? sObjectType : "request");
690
- return Application[sMethod].apply(this, oObjectParams[sObjectType]);
723
+ var //sMethod = this._buildFunctionName("createPostMessage", sObjectType === "response" ? sObjectType : "request"),
724
+ fnMethod = (sObjectType === "response" ? createPostMessageResponse : createPostMessageRequest);
725
+ return fnMethod.apply(this, oObjectParams[sObjectType]);
691
726
  };
692
727
 
693
728
  /**
694
- * This function builds function name dynamically
695
729
  *
696
730
  * @param {string} sPrefix function name prefix.
697
731
  * @param {string} sType function type.
@@ -707,7 +741,6 @@ sap.ui.define([
707
741
  };
708
742
 
709
743
  /**
710
- * Deep copy
711
744
  *
712
745
  * @param {object} oEntity.
713
746
  * @returns {object} deep copy.