@sapui5/sap.ushell 1.133.0 → 1.134.1

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 (1183) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +3 -2
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +18 -4
  4. package/src/main/js/sap/ushell/ApplicationType/UrlPostProcessing.js +217 -0
  5. package/src/main/js/sap/ushell/ApplicationType/guiResolution.js +1 -1
  6. package/src/main/js/sap/ushell/ApplicationType/systemAlias.js +1 -1
  7. package/src/main/js/sap/ushell/ApplicationType/ui5Resolution.js +1 -1
  8. package/src/main/js/sap/ushell/ApplicationType/urlResolution.js +1 -1
  9. package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +14 -7
  10. package/src/main/js/sap/ushell/ApplicationType/utils.js +1 -1
  11. package/src/main/js/sap/ushell/ApplicationType/wcfResolution.js +1 -1
  12. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +1 -1
  13. package/src/main/js/sap/ushell/ApplicationType.js +1 -1
  14. package/src/main/js/sap/ushell/CanvasShapesManager.js +1 -1
  15. package/src/main/js/sap/ushell/Config/utils.js +1 -1
  16. package/src/main/js/sap/ushell/Config.js +1 -1
  17. package/src/main/js/sap/ushell/Container.js +1 -1
  18. package/src/main/js/sap/ushell/EventHub.js +1 -1
  19. package/src/main/js/sap/ushell/Fiori20Adapter.js +2 -2
  20. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +2 -2
  21. package/src/main/js/sap/ushell/Layout.js +1 -1
  22. package/src/main/js/sap/ushell/NWBCInterface.js +11 -5
  23. package/src/main/js/sap/ushell/SessionHandler.js +139 -97
  24. package/src/main/js/sap/ushell/System.js +1 -1
  25. package/src/main/js/sap/ushell/TechnicalParameters.js +2 -2
  26. package/src/main/js/sap/ushell/UI5ComponentType.js +1 -1
  27. package/src/main/js/sap/ushell/UIActions.js +1 -1
  28. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +2 -2
  29. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +2 -2
  30. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +2 -2
  31. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +2 -2
  32. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +2 -2
  33. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +2 -2
  34. package/src/main/js/sap/ushell/URLTemplateProcessor.js +2 -2
  35. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +2 -2
  36. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +2 -2
  37. package/src/main/js/sap/ushell/User.js +43 -11
  38. package/src/main/js/sap/ushell/UserActivityLog.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/AppVariantPersonalizationAdapter.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +2 -2
  41. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +2 -2
  42. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +2 -2
  43. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +22 -6
  44. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +2 -2
  45. package/src/main/js/sap/ushell/adapters/cdm/MenuAdapter.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +2 -2
  47. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +2 -2
  48. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +2 -2
  49. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.controller.js +251 -0
  50. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.view.xml +69 -0
  51. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegionEntry.js +67 -0
  52. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +2 -2
  53. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +2 -2
  54. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +2 -2
  55. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +2 -2
  56. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +2 -2
  57. package/src/main/js/sap/ushell/adapters/cdm/_Personalization/internals.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +2 -2
  59. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +2 -2
  60. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +2 -2
  61. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +2 -2
  62. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +2 -2
  63. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +2 -2
  64. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +2 -2
  65. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +2 -2
  66. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +2 -2
  67. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +2 -2
  68. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +2 -2
  69. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +2 -2
  70. package/src/main/js/sap/ushell/adapters/cdm/v3/utilsCdm.js +1 -1
  71. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +6 -1
  72. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +2 -2
  73. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +2 -2
  74. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +2 -2
  75. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +2 -2
  76. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +2 -2
  77. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +2 -2
  78. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +2 -2
  79. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +2 -2
  80. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +2 -2
  81. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +2 -2
  82. package/src/main/js/sap/ushell/adapters/local/MenuAdapter.js +1 -1
  83. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +2 -2
  84. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +2 -2
  85. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +2 -2
  86. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +2 -2
  87. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +2 -2
  88. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +2 -2
  89. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +2 -2
  90. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +2 -2
  91. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +2 -2
  92. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +2 -2
  93. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +2 -2
  94. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +2 -2
  95. package/src/main/js/sap/ushell/api/BootstrapObserver.js +1 -1
  96. package/src/main/js/sap/ushell/api/Copilot.js +1 -1
  97. package/src/main/js/sap/ushell/api/Inbox.js +1 -1
  98. package/src/main/js/sap/ushell/api/NewExperience/CustomOverflowListItem.js +1 -1
  99. package/src/main/js/sap/ushell/api/NewExperience.js +1 -1
  100. package/src/main/js/sap/ushell/api/RTA.js +1 -1
  101. package/src/main/js/sap/ushell/api/S4MyHome.js +1 -1
  102. package/src/main/js/sap/ushell/api/SAPBusinessClient.js +129 -0
  103. package/src/main/js/sap/ushell/api/common/ComponentInstantiation.js +1 -1
  104. package/src/main/js/sap/ushell/api/workpage/Designtime.js +1 -1
  105. package/src/main/js/sap/ushell/api/workpage/Runtime.js +1 -1
  106. package/src/main/js/sap/ushell/appRuntime/neo/AppInfoService.js +1 -1
  107. package/src/main/js/sap/ushell/appRuntime/neo/AppRuntimeNeo.js +1 -1
  108. package/src/main/js/sap/ushell/appRuntime/neo/ProxyAppUtils.js +1 -1
  109. package/src/main/js/sap/ushell/appRuntime/ui5/AppCommunicationMgr.js +24 -5
  110. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +1 -1
  111. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntimeContext.js +1 -1
  112. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntimeService.js +1 -1
  113. package/src/main/js/sap/ushell/appRuntime/ui5/BusyIndicator.js +1 -1
  114. package/src/main/js/sap/ushell/appRuntime/ui5/SessionHandlerAgent.js +1 -1
  115. package/src/main/js/sap/ushell/appRuntime/ui5/libsPreload.js +1 -1
  116. package/src/main/js/sap/ushell/appRuntime/ui5/performance/FesrEnhancer.js +1 -1
  117. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/AppLifeCycleUtils.js +1 -1
  118. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/BaseRTAPluginStatus.js +1 -1
  119. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/CheckConditions.js +1 -1
  120. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/Renderer.js +1 -1
  121. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/Trigger.js +1 -1
  122. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaAgent/Component.js +1 -1
  123. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaShell/Component.js +1 -1
  124. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/scriptAgent/Component.js +1 -1
  125. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/AccessKeysAgent.js +1 -1
  126. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/Renderer.js +1 -1
  127. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +2 -2
  128. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +2 -2
  129. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +2 -2
  130. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycleAgent.js +1 -1
  131. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +2 -2
  132. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +2 -2
  133. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +2 -2
  134. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +2 -2
  135. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +2 -2
  136. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +2 -2
  137. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +2 -2
  138. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +2 -2
  139. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +2 -2
  140. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +2 -2
  141. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +2 -2
  142. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +2 -2
  143. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +2 -2
  144. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +2 -2
  145. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +2 -2
  146. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +2 -2
  147. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +2 -2
  148. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +2 -2
  149. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserDefaultParameters.js +1 -1
  150. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +2 -2
  151. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/ContainerAdapter.js +1 -1
  152. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/EmptyAdapter.js +1 -1
  153. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +2 -2
  154. package/src/main/js/sap/ushell/appRuntime/ui5/ui/UIProxy.js +1 -1
  155. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/EventProcessor.js +1 -1
  156. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/FLPLoader.js +1 -1
  157. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/FLPScheduler.js +1 -1
  158. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/LoadingConfiguration.json +4 -0
  159. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/StepConfiguration.json +33 -1
  160. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +2 -2
  161. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +2 -2
  162. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent.js +1 -1
  163. package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def-dev.js +1 -1
  164. package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def-loader.js +1 -1
  165. package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def.js +1 -1
  166. package/src/main/js/sap/ushell/bootstrap/cdm/cdm.boot.task.js +1 -1
  167. package/src/main/js/sap/ushell/bootstrap/cdm/cdm.constants.js +1 -1
  168. package/src/main/js/sap/ushell/bootstrap/cdm.js +1 -1
  169. package/src/main/js/sap/ushell/bootstrap/common/common.boot.path.js +1 -1
  170. package/src/main/js/sap/ushell/bootstrap/common/common.boot.script.js +1 -1
  171. package/src/main/js/sap/ushell/bootstrap/common/common.boot.task.js +1 -1
  172. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5.extractLibs.js +1 -1
  173. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5.js +1 -1
  174. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +2 -2
  175. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5language.js +1 -1
  176. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5theme.js +1 -1
  177. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ushell.js +1 -1
  178. package/src/main/js/sap/ushell/bootstrap/common/common.constants.js +1 -1
  179. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +58 -25
  180. package/src/main/js/sap/ushell/bootstrap/common/common.debug.mode.js +1 -1
  181. package/src/main/js/sap/ushell/bootstrap/common/common.load.bootstrapExtension.js +1 -1
  182. package/src/main/js/sap/ushell/bootstrap/common/common.load.core-min.js +1 -1
  183. package/src/main/js/sap/ushell/bootstrap/common/common.load.launchpad.js +1 -1
  184. package/src/main/js/sap/ushell/bootstrap/common/common.load.model.js +1 -1
  185. package/src/main/js/sap/ushell/bootstrap/common/common.load.script.js +1 -1
  186. package/src/main/js/sap/ushell/bootstrap/common/common.override.registermodulepath.js +1 -1
  187. package/src/main/js/sap/ushell/bootstrap/common/common.read.metatags.js +1 -1
  188. package/src/main/js/sap/ushell/bootstrap/common/common.read.ui5theme.from.config.js +1 -1
  189. package/src/main/js/sap/ushell/bootstrap/common/common.read.ushell.config.from.url.js +1 -1
  190. package/src/main/js/sap/ushell/bootstrap/common/common.util.js +1 -1
  191. package/src/main/js/sap/ushell/bootstrap/sandbox2/sandbox.js +1 -1
  192. package/src/main/js/sap/ushell/bootstrap/sandbox2/sandboxBootTask.js +1 -1
  193. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +2 -2
  194. package/src/main/js/sap/ushell/bootstrap/ui5loader-config.js +1 -1
  195. package/src/main/js/sap/ushell/components/CatalogsManager.js +1 -1
  196. package/src/main/js/sap/ushell/components/ComponentKeysHandler.js +1 -1
  197. package/src/main/js/sap/ushell/components/DestroyHelper.js +1 -1
  198. package/src/main/js/sap/ushell/components/GroupsHelper.js +1 -1
  199. package/src/main/js/sap/ushell/components/HomepageManager.js +1 -1
  200. package/src/main/js/sap/ushell/components/MessagingHelper.js +1 -1
  201. package/src/main/js/sap/ushell/components/SharedComponentUtils.js +1 -1
  202. package/src/main/js/sap/ushell/components/_HomepageManager/DashboardLoadingManager.js +1 -1
  203. package/src/main/js/sap/ushell/components/_HomepageManager/PagingManager.js +1 -1
  204. package/src/main/js/sap/ushell/components/_HomepageManager/PersistentPageOperationAdapter.js +1 -1
  205. package/src/main/js/sap/ushell/components/_HomepageManager/TransientPageOperationAdapter.js +1 -1
  206. package/src/main/js/sap/ushell/components/appfinder/AppFinder.controller.js +11 -3
  207. package/src/main/js/sap/ushell/components/appfinder/AppFinderView.js +1 -1
  208. package/src/main/js/sap/ushell/components/appfinder/Catalog.controller.js +1 -1
  209. package/src/main/js/sap/ushell/components/appfinder/CatalogView.js +1 -1
  210. package/src/main/js/sap/ushell/components/appfinder/Component.js +1 -1
  211. package/src/main/js/sap/ushell/components/appfinder/EasyAccess.controller.js +1 -1
  212. package/src/main/js/sap/ushell/components/appfinder/EasyAccessView.js +1 -1
  213. package/src/main/js/sap/ushell/components/appfinder/GroupListPopover.controller.js +1 -1
  214. package/src/main/js/sap/ushell/components/appfinder/GroupListPopoverView.js +1 -1
  215. package/src/main/js/sap/ushell/components/appfinder/HierarchyApps.controller.js +1 -1
  216. package/src/main/js/sap/ushell/components/appfinder/HierarchyAppsView.js +1 -1
  217. package/src/main/js/sap/ushell/components/appfinder/HierarchyFolders.controller.js +1 -1
  218. package/src/main/js/sap/ushell/components/appfinder/HierarchyFoldersView.js +1 -1
  219. package/src/main/js/sap/ushell/components/appfinder/VisualizationOrganizerHelper.js +1 -1
  220. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  221. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +707 -916
  222. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainer.js +272 -0
  223. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerCache.js +229 -0
  224. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerRenderer.js +35 -0
  225. package/src/main/js/sap/ushell/components/applicationIntegration/IframeApplicationContainer.js +372 -0
  226. package/src/main/js/sap/ushell/components/applicationIntegration/IframeApplicationContainerRenderer.js +296 -0
  227. package/src/main/js/sap/ushell/components/applicationIntegration/KeepAliveApps.js +68 -0
  228. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/AppruntimeHandler.js +120 -0
  229. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/ExtensionItems.js +143 -0
  230. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/LifecycleHandler.js +618 -0
  231. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/MessageBrokerHandler.js +64 -0
  232. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/NWBCHandler.js +83 -0
  233. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/ServiceHandler.js +1503 -0
  234. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager.js +638 -0
  235. package/src/main/js/sap/ushell/components/applicationIntegration/PostMessagePluginInterface.js +152 -0
  236. package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +21 -50
  237. package/src/main/js/sap/ushell/components/applicationIntegration/UI5ApplicationContainer.js +168 -0
  238. package/src/main/js/sap/ushell/components/applicationIntegration/UI5ApplicationContainerRenderer.js +41 -0
  239. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +30 -679
  240. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +13 -390
  241. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +8 -249
  242. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +9 -2365
  243. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPIInterface.js +10 -127
  244. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageUtils.js +10 -177
  245. package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +10 -74
  246. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +21 -12
  247. package/src/main/js/sap/ushell/components/applicationIntegration/contracts/EmbeddedUI5Handler.js +176 -0
  248. package/src/main/js/sap/ushell/components/applicationIntegration/contracts/StatefulContainerV1Handler.js +91 -0
  249. package/src/main/js/sap/ushell/components/applicationIntegration/contracts/StatefulContainerV2Handler.js +175 -0
  250. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +13 -74
  251. package/src/main/js/sap/ushell/components/applicationIntegrationOld/AppLifeCycle.js +1926 -0
  252. package/src/main/js/sap/ushell/components/applicationIntegrationOld/Storage.js +62 -0
  253. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/Application.js +709 -0
  254. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler.js +406 -0
  255. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxesCache.js +263 -0
  256. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPI.js +2382 -0
  257. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPIInterface.js +143 -0
  258. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageUtils.js +192 -0
  259. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/WebGUIStatefulHandler.js +90 -0
  260. package/src/main/js/sap/ushell/components/applicationIntegrationOld/configuration/AppMeta.js +193 -0
  261. package/src/main/js/sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices.js +91 -0
  262. package/src/main/js/sap/ushell/components/cards/Card.controller.js +1 -1
  263. package/src/main/js/sap/ushell/components/cards/Configuration.controller.js +1 -1
  264. package/src/main/js/sap/ushell/components/cards/ManifestPropertyHelper.js +1 -1
  265. package/src/main/js/sap/ushell/components/cepsearchresult/app/Component.js +1 -1
  266. package/src/main/js/sap/ushell/components/cepsearchresult/app/Main.controller.js +1 -1
  267. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Component.js +1 -1
  268. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Config.js +1 -1
  269. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Extension.js +1 -1
  270. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/AdvancedFormatters.js +1 -1
  271. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/Edition.js +1 -1
  272. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/EditionAdvanced.js +1 -1
  273. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/EditionStandard.js +1 -1
  274. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/appendStyleVars.js +1 -1
  275. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Category.js +1 -1
  276. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Highlighter.js +1 -1
  277. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Paginator.js +1 -1
  278. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/All.js +1 -1
  279. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Application.js +1 -1
  280. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Event.js +1 -1
  281. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/People.js +1 -1
  282. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Workpage.js +1 -1
  283. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +38 -22
  284. package/src/main/js/sap/ushell/components/container/IframePOSTUtils.js +5 -1
  285. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +2 -2
  286. package/src/main/js/sap/ushell/components/contentFinder/Component.js +14 -5
  287. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +2 -2
  288. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +2 -2
  289. package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +2 -2
  290. package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +1 -1
  291. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  292. package/src/main/js/sap/ushell/components/contentFinder/model/GraphQLListBinding.js +1 -1
  293. package/src/main/js/sap/ushell/components/contentFinder/model/GraphQLModel.js +1 -1
  294. package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +32 -8
  295. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +6 -2
  296. package/src/main/js/sap/ushell/components/contentFinder/view/VisualizationsNoDataIllustratedMessage.fragment.xml +6 -3
  297. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +2 -2
  298. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +54 -14
  299. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
  300. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources.properties +6 -0
  301. package/src/main/js/sap/ushell/components/factsheet/Component.js +2 -2
  302. package/src/main/js/sap/ushell/components/factsheet/annotation/Mapping.js +1 -1
  303. package/src/main/js/sap/ushell/components/factsheet/controls/PictureTile.js +1 -1
  304. package/src/main/js/sap/ushell/components/factsheet/controls/PictureTileRenderer.js +1 -1
  305. package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewer.js +1 -1
  306. package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewerItem.js +1 -1
  307. package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewerRenderer.js +1 -1
  308. package/src/main/js/sap/ushell/components/factsheet/factory/ThingInspector.js +1 -1
  309. package/src/main/js/sap/ushell/components/factsheet/tools/ODataUrlTemplating.js +1 -1
  310. package/src/main/js/sap/ushell/components/factsheet/views/ThingViewer.controller.js +1 -1
  311. package/src/main/js/sap/ushell/components/factsheet/views/ThingViewer.view.js +1 -1
  312. package/src/main/js/sap/ushell/components/homeApp/error/Component.js +1 -1
  313. package/src/main/js/sap/ushell/components/homeApp/error/HomeAppError.controller.js +1 -1
  314. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +2 -2
  315. package/src/main/js/sap/ushell/components/homepage/Component.js +1 -1
  316. package/src/main/js/sap/ushell/components/homepage/DashboardContent.controller.js +1 -1
  317. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +2 -2
  318. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +2 -2
  319. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +2 -2
  320. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  321. package/src/main/js/sap/ushell/components/pages/ActionMode.js +2 -2
  322. package/src/main/js/sap/ushell/components/pages/Component.js +2 -2
  323. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +2 -2
  324. package/src/main/js/sap/ushell/components/pages/StateManager.js +1 -1
  325. package/src/main/js/sap/ushell/components/pages/controller/ImportDialog.controller.js +1 -1
  326. package/src/main/js/sap/ushell/components/pages/controller/MyHome.controller.js +1 -1
  327. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +2 -2
  328. package/src/main/js/sap/ushell/components/pages/controller/PagesAndSpaceId.js +1 -1
  329. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  330. package/src/main/js/sap/ushell/components/runtimeSwitcher/Component.js +1 -1
  331. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +2 -2
  332. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  333. package/src/main/js/sap/ushell/components/shell/FloatingContainer/Component.js +1 -1
  334. package/src/main/js/sap/ushell/components/shell/FloatingContainer/controls/FloatingContainer.js +1 -1
  335. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  336. package/src/main/js/sap/ushell/components/shell/MenuBar/Component.js +1 -1
  337. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +1 -2
  338. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  339. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/Component.js +39 -4
  340. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +30 -63
  341. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenuButton.controller.js +118 -0
  342. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -1
  343. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.view.xml +64 -17
  344. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuButton.view.xml +24 -0
  345. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +2 -2
  346. package/src/main/js/sap/ushell/components/shell/Notifications/Notifications.controller.js +1 -1
  347. package/src/main/js/sap/ushell/components/shell/PostLoadingHeaderEnhancement/Component.js +1 -1
  348. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +2 -2
  349. package/src/main/js/sap/ushell/components/shell/Search/Component.js +1 -1
  350. package/src/main/js/sap/ushell/components/shell/Search/ESearch.js +1 -1
  351. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  352. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +2 -2
  353. package/src/main/js/sap/ushell/components/shell/SearchCEP/ProvidersExecuter.js +1 -1
  354. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +1 -1
  355. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +2 -2
  356. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +2 -2
  357. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +2 -2
  358. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +2 -2
  359. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +19 -16
  360. package/src/main/js/sap/ushell/components/shell/Settings/ContentWrapper.fragment.xml +3 -2
  361. package/src/main/js/sap/ushell/components/shell/Settings/ErrorMessageHelper.js +1 -1
  362. package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.controller.js +44 -17
  363. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +29 -24
  364. package/src/main/js/sap/ushell/components/shell/Settings/appearance/AppearanceEntry.js +1 -1
  365. package/src/main/js/sap/ushell/components/shell/Settings/homepage/HomepageEntry.js +1 -1
  366. package/src/main/js/sap/ushell/components/shell/Settings/notifications/NotificationsEntry.js +1 -1
  367. package/src/main/js/sap/ushell/components/shell/Settings/notifications/NotificationsSetting.controller.js +1 -1
  368. package/src/main/js/sap/ushell/components/shell/Settings/search/Search.controller.js +1 -1
  369. package/src/main/js/sap/ushell/components/shell/Settings/search/SearchEntry.js +1 -1
  370. package/src/main/js/sap/ushell/components/shell/Settings/spaces/SpacesEntry.js +1 -1
  371. package/src/main/js/sap/ushell/components/shell/Settings/spaces/SpacesSetting.controller.js +1 -1
  372. package/src/main/js/sap/ushell/components/shell/Settings/userAccount/UserAccountEntry.js +1 -1
  373. package/src/main/js/sap/ushell/components/shell/Settings/userAccount/UserAccountSelector.controller.js +1 -1
  374. package/src/main/js/sap/ushell/components/shell/Settings/userActivities/UserActivitiesEntry.js +1 -1
  375. package/src/main/js/sap/ushell/components/shell/Settings/userActivities/UserActivitiesSetting.controller.js +1 -1
  376. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/Component.js +1 -1
  377. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsEntry.js +1 -1
  378. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsForm.js +1 -1
  379. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/ExtendedValueDialog.controller.js +1 -1
  380. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/UserDefaultsSetting.controller.js +1 -1
  381. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +1 -1
  382. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/UserLanguageRegionEntry.js +1 -1
  383. package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +95 -215
  384. package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +77 -178
  385. package/src/main/js/sap/ushell/components/shell/SideNavigation/css/style.css +3 -0
  386. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/Popover.fragment.xml +1 -1
  387. package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +8 -1
  388. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AllSpaces.js +52 -0
  389. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AppFinder.js +48 -0
  390. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Favorites.js +222 -0
  391. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericFixedNavigationListProvider.js +142 -0
  392. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericNavigationListProvider.js +186 -0
  393. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/MyHome.js +73 -0
  394. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/NavigationHelper.js +79 -0
  395. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/RecentActivity.js +141 -0
  396. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Spaces.js +288 -0
  397. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/SpacesNavigationListProvider.js +79 -0
  398. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +15 -6
  399. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ar.properties +10 -2
  400. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_bg.properties +10 -2
  401. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ca.properties +10 -2
  402. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cnr.properties +10 -2
  403. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cs.properties +10 -2
  404. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cy.properties +10 -2
  405. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_da.properties +10 -2
  406. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_de.properties +10 -2
  407. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_el.properties +10 -2
  408. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en.properties +10 -2
  409. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_GB.properties +10 -2
  410. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_US_saprigi.properties +10 -2
  411. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es.properties +10 -2
  412. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es_MX.properties +10 -2
  413. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_et.properties +10 -2
  414. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fi.properties +10 -2
  415. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr.properties +10 -2
  416. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr_CA.properties +10 -2
  417. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hi.properties +10 -2
  418. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hr.properties +10 -2
  419. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hu.properties +10 -2
  420. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_id.properties +10 -2
  421. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_it.properties +10 -2
  422. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_iw.properties +10 -2
  423. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ja.properties +10 -2
  424. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_kk.properties +10 -2
  425. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ko.properties +10 -2
  426. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lt.properties +10 -2
  427. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lv.properties +10 -2
  428. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_mk.properties +10 -2
  429. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ms.properties +10 -2
  430. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_nl.properties +10 -2
  431. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_no.properties +10 -2
  432. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pl.properties +10 -2
  433. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt.properties +10 -2
  434. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt_PT.properties +10 -2
  435. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ro.properties +10 -2
  436. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ru.properties +10 -2
  437. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sh.properties +10 -2
  438. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sk.properties +10 -2
  439. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sl.properties +10 -2
  440. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sr.properties +10 -2
  441. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sv.properties +10 -2
  442. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_th.properties +10 -2
  443. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_tr.properties +10 -2
  444. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_uk.properties +10 -2
  445. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_vi.properties +10 -2
  446. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_CN.properties +10 -2
  447. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_TW.properties +10 -2
  448. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +37 -28
  449. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +2 -2
  450. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.controller.js +142 -15
  451. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.fragment.xml +33 -0
  452. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenuPopover.fragment.xml +25 -8
  453. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +2 -2
  454. package/src/main/js/sap/ushell/components/tiles/action/ActionTile.controller.js +1 -1
  455. package/src/main/js/sap/ushell/components/tiles/action/Configuration.controller.js +1 -1
  456. package/src/main/js/sap/ushell/components/tiles/applauncher/Component.js +1 -1
  457. package/src/main/js/sap/ushell/components/tiles/applauncher/Configuration.controller.js +1 -1
  458. package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTile.controller.js +1 -1
  459. package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTile.view.js +1 -1
  460. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/Component.js +1 -1
  461. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/Configuration.controller.js +1 -1
  462. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/DynamicTile.controller.js +1 -3
  463. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/DynamicTile.view.js +1 -1
  464. package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/Component.js +1 -1
  465. package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/StaticTile.controller.js +1 -1
  466. package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/StaticTile.view.js +1 -1
  467. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/Component.js +1 -1
  468. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.controller.js +1 -1
  469. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.view.js +1 -1
  470. package/src/main/js/sap/ushell/components/tiles/generic.js +1 -1
  471. package/src/main/js/sap/ushell/components/tiles/indicatorArea/AreaChartTile.controller.js +1 -1
  472. package/src/main/js/sap/ushell/components/tiles/indicatorArea/AreaChartTile.view.js +1 -1
  473. package/src/main/js/sap/ushell/components/tiles/indicatorDual/DualTile.controller.js +1 -1
  474. package/src/main/js/sap/ushell/components/tiles/indicatorDual/DualTile.view.js +1 -1
  475. package/src/main/js/sap/ushell/components/tiles/indicatorDualComparison/DualComparison.controller.js +1 -1
  476. package/src/main/js/sap/ushell/components/tiles/indicatorDualComparison/DualComparison.view.js +1 -1
  477. package/src/main/js/sap/ushell/components/tiles/indicatorDualContribution/DualContribution.controller.js +1 -1
  478. package/src/main/js/sap/ushell/components/tiles/indicatorDualContribution/DualContribution.view.js +1 -1
  479. package/src/main/js/sap/ushell/components/tiles/indicatorDualDeviation/DualDeviation.controller.js +1 -1
  480. package/src/main/js/sap/ushell/components/tiles/indicatorDualDeviation/DualDeviation.view.js +1 -1
  481. package/src/main/js/sap/ushell/components/tiles/indicatorDualTrend/DualTrend.controller.js +1 -1
  482. package/src/main/js/sap/ushell/components/tiles/indicatorDualTrend/DualTrend.view.js +1 -1
  483. package/src/main/js/sap/ushell/components/tiles/indicatorHarveyBall/HarveyBallTile.controller.js +1 -1
  484. package/src/main/js/sap/ushell/components/tiles/indicatorHarveyBall/HarveyBallTile.view.js +1 -1
  485. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/cache.js +1 -1
  486. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/indicatorTileHelper.js +1 -1
  487. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/oData4Analytics.js +1 -1
  488. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/smartBusinessUtil.js +1 -1
  489. package/src/main/js/sap/ushell/components/tiles/indicatorcomparison/ComparisonTile.controller.js +1 -1
  490. package/src/main/js/sap/ushell/components/tiles/indicatorcomparison/ComparisonTile.view.js +1 -1
  491. package/src/main/js/sap/ushell/components/tiles/indicatorcontribution/ContributionTile.controller.js +1 -1
  492. package/src/main/js/sap/ushell/components/tiles/indicatorcontribution/ContributionTile.view.js +1 -1
  493. package/src/main/js/sap/ushell/components/tiles/indicatordeviation/DeviationTile.controller.js +1 -1
  494. package/src/main/js/sap/ushell/components/tiles/indicatordeviation/DeviationTile.view.js +1 -1
  495. package/src/main/js/sap/ushell/components/tiles/indicatornumeric/NumericTile.controller.js +1 -1
  496. package/src/main/js/sap/ushell/components/tiles/indicatornumeric/NumericTile.view.js +1 -1
  497. package/src/main/js/sap/ushell/components/tiles/sbtilecontent.js +1 -1
  498. package/src/main/js/sap/ushell/components/tiles/utils.js +1 -1
  499. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +2 -2
  500. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +2 -2
  501. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +2 -2
  502. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +2 -2
  503. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.layout.js +1 -1
  504. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +2 -2
  505. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +2 -2
  506. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +2 -2
  507. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +2 -2
  508. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnRenderer.js +1 -1
  509. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +2 -2
  510. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRenderer.js +1 -1
  511. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +2 -2
  512. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRowRenderer.js +1 -1
  513. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  514. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +2 -2
  515. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +2 -2
  516. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  517. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +2 -2
  518. package/src/main/js/sap/ushell/functionBindPrototype.js +1 -1
  519. package/src/main/js/sap/ushell/iconfonts.js +1 -1
  520. package/src/main/js/sap/ushell/library.js +68 -2
  521. package/src/main/js/sap/ushell/navigationMode.js +2 -2
  522. package/src/main/js/sap/ushell/override.js +1 -1
  523. package/src/main/js/sap/ushell/performance/FesrEnhancer.js +1 -1
  524. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +2 -2
  525. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +2 -2
  526. package/src/main/js/sap/ushell/plugins/BaseRTAPlugin.js +1 -1
  527. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +2 -2
  528. package/src/main/js/sap/ushell/plugins/appwarmup/ShellUIService.js +1 -1
  529. package/src/main/js/sap/ushell/plugins/ghostapp/Component.js +1 -1
  530. package/src/main/js/sap/ushell/plugins/ghostapp/FakeModel.js +1 -1
  531. package/src/main/js/sap/ushell/plugins/rta/Component.js +1 -1
  532. package/src/main/js/sap/ushell/plugins/rta-personalize/Component.js +1 -1
  533. package/src/main/js/sap/ushell/renderer/AccessKeysHandler.js +1 -1
  534. package/src/main/js/sap/ushell/renderer/History.js +1 -1
  535. package/src/main/js/sap/ushell/renderer/LogonFrameProvider.js +1 -1
  536. package/src/main/js/sap/ushell/renderer/Renderer.js +3 -3
  537. package/src/main/js/sap/ushell/renderer/Shell.controller.js +327 -140
  538. package/src/main/js/sap/ushell/renderer/Shell.view.js +1 -1
  539. package/src/main/js/sap/ushell/renderer/ShellLayout.js +10 -2
  540. package/src/main/js/sap/ushell/renderer/allMyApps/AllMyApps.controller.js +1 -1
  541. package/src/main/js/sap/ushell/renderer/allMyApps/AllMyAppsManager.js +1 -1
  542. package/src/main/js/sap/ushell/renderer/resources/resources.properties +18 -0
  543. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +10 -4
  544. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +10 -4
  545. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +9 -3
  546. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +9 -3
  547. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +10 -4
  548. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +10 -4
  549. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +10 -4
  550. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +9 -3
  551. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +10 -4
  552. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +10 -4
  553. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +10 -4
  554. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +5 -4
  555. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +9 -3
  556. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +9 -3
  557. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +10 -4
  558. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +10 -4
  559. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +9 -3
  560. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +9 -3
  561. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +10 -4
  562. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +10 -4
  563. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +10 -4
  564. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -3
  565. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +9 -3
  566. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +10 -4
  567. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +9 -3
  568. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +51 -45
  569. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +10 -4
  570. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +12 -6
  571. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +10 -4
  572. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +10 -4
  573. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +10 -4
  574. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +9 -3
  575. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +10 -4
  576. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +9 -3
  577. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +9 -3
  578. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +10 -4
  579. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +10 -4
  580. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +9 -3
  581. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +9 -3
  582. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +9 -3
  583. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +11 -5
  584. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +9 -3
  585. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +9 -3
  586. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +10 -4
  587. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +10 -4
  588. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +10 -4
  589. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +11 -5
  590. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +9 -3
  591. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +9 -3
  592. package/src/main/js/sap/ushell/renderer/search/searchComponent/Component.js +1 -1
  593. package/src/main/js/sap/ushell/renderer/search/searchComponent/controller/CEPSearchApp.controller.js +1 -1
  594. package/src/main/js/sap/ushell/renderer/search/searchComponent/controller/SearchApp.controller.js +1 -1
  595. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  596. package/src/main/js/sap/ushell/renderer/search/searchComponent/view/CEPSearchApp.view.js +1 -1
  597. package/src/main/js/sap/ushell/renderer/search/searchComponent/view/SearchApp.view.js +1 -1
  598. package/src/main/js/sap/ushell/renderer/search/util.js +1 -1
  599. package/src/main/js/sap/ushell/renderer/shellHeader/ShellHeader.controller.js +13 -7
  600. package/src/main/js/sap/ushell/renderer/utils.js +1 -1
  601. package/src/main/js/sap/ushell/renderers/fiori2/History.js +1 -1
  602. package/src/main/js/sap/ushell/renderers/fiori2/LogonFrameProvider.js +1 -1
  603. package/src/main/js/sap/ushell/renderers/fiori2/Renderer.js +1 -1
  604. package/src/main/js/sap/ushell/renderers/fiori2/RendererExtensions.js +1 -1
  605. package/src/main/js/sap/ushell/renderers/fiori2/Shell.controller.js +1 -1
  606. package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +1 -1
  607. package/src/main/js/sap/ushell/renderers/fiori2/allMyApps/AllMyAppsManager.js +1 -1
  608. package/src/main/js/sap/ushell/resources.js +1 -1
  609. package/src/main/js/sap/ushell/services/AllMyApps.js +1 -1
  610. package/src/main/js/sap/ushell/services/AppConfiguration.js +1 -1
  611. package/src/main/js/sap/ushell/services/AppLifeCycle.js +4 -3
  612. package/src/main/js/sap/ushell/services/AppState.js +2 -2
  613. package/src/main/js/sap/ushell/services/AppType.js +1 -1
  614. package/src/main/js/sap/ushell/services/Bookmark.js +2 -2
  615. package/src/main/js/sap/ushell/services/BookmarkV2.js +2 -2
  616. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +2 -2
  617. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +2 -2
  618. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +2 -2
  619. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/ParameterMapping.js +1 -1
  620. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +2 -2
  621. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +2 -2
  622. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +2 -2
  623. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +2 -2
  624. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +2 -2
  625. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +2 -2
  626. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +2 -2
  627. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +2 -2
  628. package/src/main/js/sap/ushell/services/CommonDataModel/PersonalizationProcessor.js +1 -1
  629. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +2 -2
  630. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +2 -2
  631. package/src/main/js/sap/ushell/services/CommonDataModel.js +2 -13
  632. package/src/main/js/sap/ushell/services/Configuration.js +2 -2
  633. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +2 -2
  634. package/src/main/js/sap/ushell/services/Container.js +1 -1
  635. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +2 -2
  636. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +2 -2
  637. package/src/main/js/sap/ushell/services/DarkModeSupport.js +2 -2
  638. package/src/main/js/sap/ushell/services/EndUserFeedback.js +1 -1
  639. package/src/main/js/sap/ushell/services/Extension/Item.js +2 -2
  640. package/src/main/js/sap/ushell/services/Extension.js +2 -2
  641. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +2 -2
  642. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +2 -2
  643. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +2 -2
  644. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +2 -2
  645. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +2 -2
  646. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +2 -2
  647. package/src/main/js/sap/ushell/services/FrameBoundExtension/UserSettingsEntry.js +63 -0
  648. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +14 -10
  649. package/src/main/js/sap/ushell/services/LaunchPage.js +2 -2
  650. package/src/main/js/sap/ushell/services/Menu.js +2 -2
  651. package/src/main/js/sap/ushell/services/Message.js +2 -2
  652. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +269 -143
  653. package/src/main/js/sap/ushell/services/MessageBroker.js +2 -2
  654. package/src/main/js/sap/ushell/services/MessageInternal.js +2 -2
  655. package/src/main/js/sap/ushell/services/NavTargetResolution.js +1 -1
  656. package/src/main/js/sap/ushell/services/NavTargetResolutionInternal.js +1 -1
  657. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +2 -2
  658. package/src/main/js/sap/ushell/services/Navigation/utils.js +2 -2
  659. package/src/main/js/sap/ushell/services/Navigation.js +6 -6
  660. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +2 -2
  661. package/src/main/js/sap/ushell/services/Notifications.js +1 -1
  662. package/src/main/js/sap/ushell/services/NotificationsV2.js +1 -1
  663. package/src/main/js/sap/ushell/services/PageBuilding.js +2 -2
  664. package/src/main/js/sap/ushell/services/PagePersistence.js +2 -2
  665. package/src/main/js/sap/ushell/services/PageReferencing.js +2 -2
  666. package/src/main/js/sap/ushell/services/Pages.js +2 -2
  667. package/src/main/js/sap/ushell/services/Personalization.js +2 -2
  668. package/src/main/js/sap/ushell/services/PersonalizationV2/ContextContainer.js +1 -1
  669. package/src/main/js/sap/ushell/services/PersonalizationV2/Personalizer.js +1 -1
  670. package/src/main/js/sap/ushell/services/PersonalizationV2/TransientPersonalizer.js +1 -1
  671. package/src/main/js/sap/ushell/services/PersonalizationV2/Variant.js +1 -1
  672. package/src/main/js/sap/ushell/services/PersonalizationV2/VariantSet.js +1 -1
  673. package/src/main/js/sap/ushell/services/PersonalizationV2/VariantSetAdapter.js +1 -1
  674. package/src/main/js/sap/ushell/services/PersonalizationV2/WindowAdapter.js +1 -1
  675. package/src/main/js/sap/ushell/services/PersonalizationV2/WindowAdapterContainer.js +1 -1
  676. package/src/main/js/sap/ushell/services/PersonalizationV2/constants.js +1 -1
  677. package/src/main/js/sap/ushell/services/PersonalizationV2/constants.private.js +1 -1
  678. package/src/main/js/sap/ushell/services/PersonalizationV2/utils.js +1 -1
  679. package/src/main/js/sap/ushell/services/PersonalizationV2.js +2 -2
  680. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +2 -2
  681. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +2 -2
  682. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +2 -2
  683. package/src/main/js/sap/ushell/services/PluginManager/SimpleExpression.js +2 -2
  684. package/src/main/js/sap/ushell/services/PluginManager.js +22 -9
  685. package/src/main/js/sap/ushell/services/ReferenceResolver.js +2 -2
  686. package/src/main/js/sap/ushell/services/Search.js +2 -2
  687. package/src/main/js/sap/ushell/services/SearchCEP.js +2 -2
  688. package/src/main/js/sap/ushell/services/SearchableContent.js +2 -2
  689. package/src/main/js/sap/ushell/services/ShellNavigation.js +2 -2
  690. package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +1 -1
  691. package/src/main/js/sap/ushell/services/ShellNavigationInternal.js +1 -1
  692. package/src/main/js/sap/ushell/services/SmartNavigation.js +2 -2
  693. package/src/main/js/sap/ushell/services/SpaceContent.js +2 -2
  694. package/src/main/js/sap/ushell/services/SupportTicket.js +1 -1
  695. package/src/main/js/sap/ushell/services/UITracer.js +2 -2
  696. package/src/main/js/sap/ushell/services/URLParsing.js +1 -1
  697. package/src/main/js/sap/ushell/services/URLShortening.js +2 -2
  698. package/src/main/js/sap/ushell/services/URLTemplate.js +2 -2
  699. package/src/main/js/sap/ushell/services/Ui5ComponentHandle.js +11 -1
  700. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +2 -2
  701. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +2 -2
  702. package/src/main/js/sap/ushell/services/UsageAnalytics.js +1 -1
  703. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +2 -2
  704. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +2 -2
  705. package/src/main/js/sap/ushell/services/UserInfo.js +2 -2
  706. package/src/main/js/sap/ushell/services/UserRecents/RecentActivity.js +1 -1
  707. package/src/main/js/sap/ushell/services/UserRecents/RecentAppsUsage.js +1 -1
  708. package/src/main/js/sap/ushell/services/UserRecents/RecentsList.js +1 -1
  709. package/src/main/js/sap/ushell/services/UserRecents/UserRecentsBase.js +1 -1
  710. package/src/main/js/sap/ushell/services/UserRecents.js +2 -2
  711. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +2 -2
  712. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +2 -2
  713. package/src/main/js/sap/ushell/services/_AppState/AppStatePersistencyMethod.js +1 -1
  714. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +2 -2
  715. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +2 -2
  716. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +2 -2
  717. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +2 -2
  718. package/src/main/js/sap/ushell/services/_Personalization/ContextContainer.js +1 -1
  719. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainer.js +1 -1
  720. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariant.js +1 -1
  721. package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariantSet.js +1 -1
  722. package/src/main/js/sap/ushell/services/_Personalization/Personalizer.js +1 -1
  723. package/src/main/js/sap/ushell/services/_Personalization/TransientPersonalizer.js +1 -1
  724. package/src/main/js/sap/ushell/services/_Personalization/Variant.js +1 -1
  725. package/src/main/js/sap/ushell/services/_Personalization/VariantSet.js +1 -1
  726. package/src/main/js/sap/ushell/services/_Personalization/VariantSetAdapter.js +1 -1
  727. package/src/main/js/sap/ushell/services/_Personalization/WindowAdapter.js +1 -1
  728. package/src/main/js/sap/ushell/services/_Personalization/WindowAdapterContainer.js +1 -1
  729. package/src/main/js/sap/ushell/services/_Personalization/constants.js +1 -1
  730. package/src/main/js/sap/ushell/services/_Personalization/constants.private.js +1 -1
  731. package/src/main/js/sap/ushell/services/_Personalization/utils.js +1 -1
  732. package/src/main/js/sap/ushell/services/appstate/AppState.js +1 -1
  733. package/src/main/js/sap/ushell/services/appstate/AppStatePersistencyMethod.js +1 -1
  734. package/src/main/js/sap/ushell/services/appstate/AppStatePersistencySettings.js +1 -1
  735. package/src/main/js/sap/ushell/services/appstate/LimitedBuffer.js +1 -1
  736. package/src/main/js/sap/ushell/services/appstate/Sequentializer.js +1 -1
  737. package/src/main/js/sap/ushell/services/appstate/SequentializingAdapter.js +1 -1
  738. package/src/main/js/sap/ushell/services/appstate/WindowAdapter.js +1 -1
  739. package/src/main/js/sap/ushell/services/personalization/VariantSetAdapter.js +1 -1
  740. package/src/main/js/sap/ushell/state/BackNavigation.js +91 -0
  741. package/src/main/js/sap/ushell/state/BaseState.js +1 -1
  742. package/src/main/js/sap/ushell/state/BindingHelper.js +18 -15
  743. package/src/main/js/sap/ushell/state/ControlManager.js +1 -1
  744. package/src/main/js/sap/ushell/state/CurrentState.js +1 -1
  745. package/src/main/js/sap/ushell/state/KeepAlive.js +1 -1
  746. package/src/main/js/sap/ushell/state/ShellModel.js +1 -1
  747. package/src/main/js/sap/ushell/state/StateManager/LaunchpadState.js +1 -1
  748. package/src/main/js/sap/ushell/state/StateManager/Operation.js +1 -1
  749. package/src/main/js/sap/ushell/state/StateManager/ShellMode.js +1 -1
  750. package/src/main/js/sap/ushell/state/StateManager.js +1 -1
  751. package/src/main/js/sap/ushell/state/StateRules.js +1 -1
  752. package/src/main/js/sap/ushell/state/StrategyFactory/DefaultStrategy.js +1 -1
  753. package/src/main/js/sap/ushell/state/StrategyFactory/FloatingActionsStrategy.js +1 -1
  754. package/src/main/js/sap/ushell/state/StrategyFactory/FloatingContainerStrategy.js +1 -1
  755. package/src/main/js/sap/ushell/state/StrategyFactory/HeadEndItemsStrategy.js +1 -1
  756. package/src/main/js/sap/ushell/state/StrategyFactory/HeadItemsStrategy.js +1 -1
  757. package/src/main/js/sap/ushell/state/StrategyFactory/SidePaneStrategy.js +1 -1
  758. package/src/main/js/sap/ushell/state/StrategyFactory/SubHeaderStrategy.js +1 -1
  759. package/src/main/js/sap/ushell/state/StrategyFactory/UserActionsStrategy.js +1 -1
  760. package/src/main/js/sap/ushell/state/StrategyFactory.js +1 -1
  761. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +2 -2
  762. package/src/main/js/sap/ushell/themes/base/library.source.less +1 -1
  763. package/src/main/js/sap/ushell/themes/sap_belize/library.source.less +1 -1
  764. package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +1 -1
  765. package/src/main/js/sap/ushell/themes/sap_belize_hcb/HistoryScreen.less +1 -1
  766. package/src/main/js/sap/ushell/themes/sap_belize_hcb/library.source.less +1 -1
  767. package/src/main/js/sap/ushell/themes/sap_belize_hcw/HistoryScreen.less +1 -1
  768. package/src/main/js/sap/ushell/themes/sap_belize_hcw/library.source.less +1 -1
  769. package/src/main/js/sap/ushell/themes/sap_belize_plus/library.source.less +1 -1
  770. package/src/main/js/sap/ushell/themes/sap_bluecrystal/HistoryScreen.less +1 -1
  771. package/src/main/js/sap/ushell/themes/sap_bluecrystal/library.source.less +1 -1
  772. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +1 -1
  773. package/src/main/js/sap/ushell/themes/sap_fiori_3/library.source.less +1 -1
  774. package/src/main/js/sap/ushell/themes/sap_fiori_3_dark/library.source.less +1 -1
  775. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/library.source.less +1 -1
  776. package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/library.source.less +1 -1
  777. package/src/main/js/sap/ushell/themes/sap_hcb/HistoryScreen.less +1 -1
  778. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +1 -1
  779. package/src/main/js/sap/ushell/themes/sap_horizon/library.source.less +1 -1
  780. package/src/main/js/sap/ushell/themes/sap_horizon_dark/library.source.less +1 -1
  781. package/src/main/js/sap/ushell/themes/sap_horizon_hcb/library.source.less +1 -1
  782. package/src/main/js/sap/ushell/themes/sap_horizon_hcw/library.source.less +1 -1
  783. package/src/main/js/sap/ushell/thirdparty/Icons.js +191 -0
  784. package/src/main/js/sap/ushell/thirdparty/UserMenu.js +1809 -0
  785. package/src/main/js/sap/ushell/thirdparty/UserMenuAccount.js +104 -0
  786. package/src/main/js/sap/ushell/thirdparty/UserMenuItem.js +420 -0
  787. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons.js +2508 -0
  788. package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons2.js +2508 -0
  789. package/src/main/js/sap/ushell/thirdparty/_dynamics/ar.js +7139 -0
  790. package/src/main/js/sap/ushell/thirdparty/_dynamics/ar_EG.js +7139 -0
  791. package/src/main/js/sap/ushell/thirdparty/_dynamics/ar_SA.js +7138 -0
  792. package/src/main/js/sap/ushell/thirdparty/_dynamics/bg.js +6031 -0
  793. package/src/main/js/sap/ushell/thirdparty/_dynamics/ca.js +6133 -0
  794. package/src/main/js/sap/ushell/thirdparty/_dynamics/cnr.js +6219 -0
  795. package/src/main/js/sap/ushell/thirdparty/_dynamics/cs.js +6759 -0
  796. package/src/main/js/sap/ushell/thirdparty/_dynamics/da.js +5977 -0
  797. package/src/main/js/sap/ushell/thirdparty/_dynamics/de.js +6098 -0
  798. package/src/main/js/sap/ushell/thirdparty/_dynamics/de_AT.js +6099 -0
  799. package/src/main/js/sap/ushell/thirdparty/_dynamics/de_CH.js +6097 -0
  800. package/src/main/js/sap/ushell/thirdparty/_dynamics/el.js +5882 -0
  801. package/src/main/js/sap/ushell/thirdparty/_dynamics/el_CY.js +5882 -0
  802. package/src/main/js/sap/ushell/thirdparty/_dynamics/en.js +6094 -0
  803. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_AU.js +6134 -0
  804. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_GB.js +6125 -0
  805. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_HK.js +6136 -0
  806. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_IE.js +6125 -0
  807. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_IN.js +6132 -0
  808. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_NZ.js +6125 -0
  809. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_PG.js +6126 -0
  810. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_SG.js +6132 -0
  811. package/src/main/js/sap/ushell/thirdparty/_dynamics/en_ZA.js +6126 -0
  812. package/src/main/js/sap/ushell/thirdparty/_dynamics/es.js +6153 -0
  813. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_AR.js +6156 -0
  814. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_BO.js +6155 -0
  815. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_CL.js +6048 -0
  816. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_CO.js +6048 -0
  817. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_MX.js +6157 -0
  818. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_PE.js +5939 -0
  819. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_UY.js +5941 -0
  820. package/src/main/js/sap/ushell/thirdparty/_dynamics/es_VE.js +5940 -0
  821. package/src/main/js/sap/ushell/thirdparty/_dynamics/et.js +6077 -0
  822. package/src/main/js/sap/ushell/thirdparty/_dynamics/fa.js +6002 -0
  823. package/src/main/js/sap/ushell/thirdparty/_dynamics/fi.js +6245 -0
  824. package/src/main/js/sap/ushell/thirdparty/_dynamics/fr.js +6047 -0
  825. package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_BE.js +6047 -0
  826. package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_CA.js +6041 -0
  827. package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_CH.js +6065 -0
  828. package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_LU.js +6047 -0
  829. package/src/main/js/sap/ushell/thirdparty/_dynamics/he.js +6593 -0
  830. package/src/main/js/sap/ushell/thirdparty/_dynamics/hi.js +5911 -0
  831. package/src/main/js/sap/ushell/thirdparty/_dynamics/hr.js +6246 -0
  832. package/src/main/js/sap/ushell/thirdparty/_dynamics/hu.js +5995 -0
  833. package/src/main/js/sap/ushell/thirdparty/_dynamics/id.js +5783 -0
  834. package/src/main/js/sap/ushell/thirdparty/_dynamics/it.js +6036 -0
  835. package/src/main/js/sap/ushell/thirdparty/_dynamics/it_CH.js +6036 -0
  836. package/src/main/js/sap/ushell/thirdparty/_dynamics/ja.js +5942 -0
  837. package/src/main/js/sap/ushell/thirdparty/_dynamics/kk.js +5989 -0
  838. package/src/main/js/sap/ushell/thirdparty/_dynamics/ko.js +5823 -0
  839. package/src/main/js/sap/ushell/thirdparty/_dynamics/lt.js +6628 -0
  840. package/src/main/js/sap/ushell/thirdparty/_dynamics/lv.js +6164 -0
  841. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar.js +182 -0
  842. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar2.js +650 -0
  843. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar3.js +515 -0
  844. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg.js +182 -0
  845. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg2.js +650 -0
  846. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg3.js +515 -0
  847. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca.js +182 -0
  848. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca2.js +650 -0
  849. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca3.js +515 -0
  850. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr.js +182 -0
  851. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr2.js +650 -0
  852. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr3.js +515 -0
  853. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs.js +182 -0
  854. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs2.js +650 -0
  855. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs3.js +515 -0
  856. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy.js +182 -0
  857. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy2.js +650 -0
  858. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy3.js +515 -0
  859. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da.js +182 -0
  860. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da2.js +650 -0
  861. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da3.js +515 -0
  862. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de.js +182 -0
  863. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de2.js +650 -0
  864. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de3.js +515 -0
  865. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el.js +182 -0
  866. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el2.js +650 -0
  867. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el3.js +515 -0
  868. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en.js +182 -0
  869. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en2.js +650 -0
  870. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en3.js +515 -0
  871. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB.js +182 -0
  872. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB2.js +650 -0
  873. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB3.js +515 -0
  874. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd.js +182 -0
  875. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd2.js +650 -0
  876. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd3.js +515 -0
  877. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi.js +182 -0
  878. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi2.js +656 -0
  879. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi3.js +542 -0
  880. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc.js +182 -0
  881. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc2.js +650 -0
  882. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc3.js +515 -0
  883. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es.js +182 -0
  884. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es2.js +650 -0
  885. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es3.js +515 -0
  886. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX.js +182 -0
  887. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX2.js +650 -0
  888. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX3.js +515 -0
  889. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et.js +182 -0
  890. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et2.js +650 -0
  891. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et3.js +515 -0
  892. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi.js +182 -0
  893. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi2.js +650 -0
  894. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi3.js +515 -0
  895. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr.js +182 -0
  896. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr2.js +650 -0
  897. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr3.js +515 -0
  898. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA.js +182 -0
  899. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA2.js +650 -0
  900. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA3.js +515 -0
  901. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi.js +182 -0
  902. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi2.js +650 -0
  903. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi3.js +515 -0
  904. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr.js +182 -0
  905. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr2.js +650 -0
  906. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr3.js +515 -0
  907. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu.js +182 -0
  908. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu2.js +650 -0
  909. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu3.js +515 -0
  910. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in.js +182 -0
  911. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in2.js +266 -0
  912. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in3.js +143 -0
  913. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it.js +182 -0
  914. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it2.js +650 -0
  915. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it3.js +515 -0
  916. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw.js +182 -0
  917. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw2.js +650 -0
  918. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw3.js +515 -0
  919. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja.js +182 -0
  920. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja2.js +650 -0
  921. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja3.js +515 -0
  922. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk.js +182 -0
  923. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk2.js +650 -0
  924. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk3.js +515 -0
  925. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko.js +182 -0
  926. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko2.js +650 -0
  927. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko3.js +515 -0
  928. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt.js +182 -0
  929. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt2.js +650 -0
  930. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt3.js +515 -0
  931. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv.js +182 -0
  932. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv2.js +650 -0
  933. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv3.js +515 -0
  934. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk.js +182 -0
  935. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk2.js +650 -0
  936. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk3.js +515 -0
  937. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms.js +182 -0
  938. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms2.js +650 -0
  939. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms3.js +515 -0
  940. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl.js +182 -0
  941. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl2.js +650 -0
  942. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl3.js +515 -0
  943. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no.js +182 -0
  944. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no2.js +650 -0
  945. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no3.js +515 -0
  946. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl.js +182 -0
  947. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl2.js +650 -0
  948. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl3.js +515 -0
  949. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt.js +182 -0
  950. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt2.js +650 -0
  951. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt3.js +515 -0
  952. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT.js +182 -0
  953. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT2.js +650 -0
  954. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT3.js +515 -0
  955. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro.js +182 -0
  956. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro2.js +650 -0
  957. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro3.js +515 -0
  958. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru.js +182 -0
  959. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru2.js +650 -0
  960. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru3.js +515 -0
  961. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh.js +182 -0
  962. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh2.js +650 -0
  963. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh3.js +515 -0
  964. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk.js +182 -0
  965. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk2.js +650 -0
  966. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk3.js +515 -0
  967. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl.js +182 -0
  968. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl2.js +650 -0
  969. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl3.js +515 -0
  970. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr.js +182 -0
  971. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr2.js +650 -0
  972. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr3.js +515 -0
  973. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv.js +182 -0
  974. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv2.js +650 -0
  975. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv3.js +515 -0
  976. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th.js +182 -0
  977. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th2.js +650 -0
  978. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th3.js +515 -0
  979. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr.js +182 -0
  980. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr2.js +650 -0
  981. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr3.js +515 -0
  982. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk.js +182 -0
  983. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk2.js +650 -0
  984. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk3.js +515 -0
  985. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi.js +182 -0
  986. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi2.js +650 -0
  987. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi3.js +515 -0
  988. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN.js +182 -0
  989. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN2.js +650 -0
  990. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN3.js +515 -0
  991. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW.js +182 -0
  992. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW2.js +650 -0
  993. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW3.js +515 -0
  994. package/src/main/js/sap/ushell/thirdparty/_dynamics/mk.js +6095 -0
  995. package/src/main/js/sap/ushell/thirdparty/_dynamics/ms.js +5617 -0
  996. package/src/main/js/sap/ushell/thirdparty/_dynamics/nb.js +6085 -0
  997. package/src/main/js/sap/ushell/thirdparty/_dynamics/nl.js +6252 -0
  998. package/src/main/js/sap/ushell/thirdparty/_dynamics/nl_BE.js +6252 -0
  999. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css.js +7 -0
  1000. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css10.js +7 -0
  1001. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css11.js +7 -0
  1002. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css12.js +7 -0
  1003. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css13.js +7 -0
  1004. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css14.js +7 -0
  1005. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css15.js +7 -0
  1006. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css16.js +7 -0
  1007. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css17.js +7 -0
  1008. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css18.js +7 -0
  1009. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css19.js +7 -0
  1010. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css2.js +7 -0
  1011. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css20.js +7 -0
  1012. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css21.js +7 -0
  1013. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css22.js +7 -0
  1014. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css23.js +7 -0
  1015. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css24.js +7 -0
  1016. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css3.js +7 -0
  1017. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css4.js +7 -0
  1018. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css5.js +7 -0
  1019. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css6.js +7 -0
  1020. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css7.js +7 -0
  1021. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css8.js +7 -0
  1022. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css9.js +7 -0
  1023. package/src/main/js/sap/ushell/thirdparty/_dynamics/pl.js +6639 -0
  1024. package/src/main/js/sap/ushell/thirdparty/_dynamics/pt.js +6165 -0
  1025. package/src/main/js/sap/ushell/thirdparty/_dynamics/pt_PT.js +6230 -0
  1026. package/src/main/js/sap/ushell/thirdparty/_dynamics/ro.js +6250 -0
  1027. package/src/main/js/sap/ushell/thirdparty/_dynamics/ru.js +6553 -0
  1028. package/src/main/js/sap/ushell/thirdparty/_dynamics/ru_UA.js +6553 -0
  1029. package/src/main/js/sap/ushell/thirdparty/_dynamics/sk.js +6482 -0
  1030. package/src/main/js/sap/ushell/thirdparty/_dynamics/sl.js +6494 -0
  1031. package/src/main/js/sap/ushell/thirdparty/_dynamics/sr.js +6291 -0
  1032. package/src/main/js/sap/ushell/thirdparty/_dynamics/sr_Latn.js +6278 -0
  1033. package/src/main/js/sap/ushell/thirdparty/_dynamics/sv.js +6126 -0
  1034. package/src/main/js/sap/ushell/thirdparty/_dynamics/th.js +5928 -0
  1035. package/src/main/js/sap/ushell/thirdparty/_dynamics/tr.js +6146 -0
  1036. package/src/main/js/sap/ushell/thirdparty/_dynamics/uk.js +6504 -0
  1037. package/src/main/js/sap/ushell/thirdparty/_dynamics/vi.js +5720 -0
  1038. package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_CN.js +5770 -0
  1039. package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_HK.js +5779 -0
  1040. package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_SG.js +5779 -0
  1041. package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_TW.js +5846 -0
  1042. package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css25.js +7177 -0
  1043. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/ListItem.js +81 -0
  1044. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/ListItemBase.js +44 -0
  1045. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/MenuItem.js +119 -0
  1046. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-base.js +212 -0
  1047. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenu.js +4 -0
  1048. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenuAccount.js +4 -0
  1049. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenuItem.js +4 -0
  1050. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenu.js +99 -0
  1051. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuAccount.js +75 -0
  1052. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuItem.js +39 -0
  1053. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori.js +347 -0
  1054. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-icons/AllIcons.js +26 -0
  1055. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents.js +650 -0
  1056. package/src/main/js/sap/ushell/thirdparty/webcomponents-base.js +4279 -0
  1057. package/src/main/js/sap/ushell/thirdparty/webcomponents-base2.js +7 -0
  1058. package/src/main/js/sap/ushell/thirdparty/webcomponents-fiori.js +146 -0
  1059. package/src/main/js/sap/ushell/thirdparty/webcomponents.js +381 -0
  1060. package/src/main/js/sap/ushell/ui/AppContainer.js +22 -8
  1061. package/src/main/js/sap/ushell/ui/AppContainerRenderer.js +1 -1
  1062. package/src/main/js/sap/ushell/ui/ContentNodeSelector.js +1 -1
  1063. package/src/main/js/sap/ushell/ui/ContentNodeSelectorRenderer.js +1 -1
  1064. package/src/main/js/sap/ushell/ui/ContentNodeTreeItem.js +1 -1
  1065. package/src/main/js/sap/ushell/ui/CustomGroupHeaderListItem.js +1 -1
  1066. package/src/main/js/sap/ushell/ui/CustomGroupHeaderListItemRenderer.js +1 -1
  1067. package/src/main/js/sap/ushell/ui/QuickAccess.js +1 -1
  1068. package/src/main/js/sap/ushell/ui/ShellHeader.js +56 -40
  1069. package/src/main/js/sap/ushell/ui/ShellHeaderRenderer.js +1 -1
  1070. package/src/main/js/sap/ushell/ui/appfinder/AppBox.js +1 -1
  1071. package/src/main/js/sap/ushell/ui/appfinder/AppBoxInternal.js +1 -1
  1072. package/src/main/js/sap/ushell/ui/appfinder/AppBoxInternalRenderer.js +1 -1
  1073. package/src/main/js/sap/ushell/ui/appfinder/AppBoxRenderer.js +1 -1
  1074. package/src/main/js/sap/ushell/ui/appfinder/PinButton.js +1 -1
  1075. package/src/main/js/sap/ushell/ui/appfinder/PinButtonRenderer.js +1 -1
  1076. package/src/main/js/sap/ushell/ui/bookmark/SaveOnPage.controller.js +1 -1
  1077. package/src/main/js/sap/ushell/ui/cards/FrequentActivitiesExtension.js +1 -1
  1078. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +2 -2
  1079. package/src/main/js/sap/ushell/ui/footerbar/AboutButton.js +1 -1
  1080. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +1 -1
  1081. package/src/main/js/sap/ushell/ui/footerbar/AddBookmarkButton.js +1 -1
  1082. package/src/main/js/sap/ushell/ui/footerbar/ContactSupportButton.js +1 -1
  1083. package/src/main/js/sap/ushell/ui/footerbar/ContactSupportDialog.controller.js +1 -1
  1084. package/src/main/js/sap/ushell/ui/footerbar/JamDiscussButton.js +1 -1
  1085. package/src/main/js/sap/ushell/ui/footerbar/JamShareButton.js +1 -1
  1086. package/src/main/js/sap/ushell/ui/footerbar/LogoutButton.js +1 -1
  1087. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.controller.js +1 -1
  1088. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.view.js +1 -1
  1089. package/src/main/js/sap/ushell/ui/footerbar/SendAsEmailButton.js +1 -1
  1090. package/src/main/js/sap/ushell/ui/launchpad/AccessibilityCustomData.js +1 -1
  1091. package/src/main/js/sap/ushell/ui/launchpad/ActionItem.js +1 -1
  1092. package/src/main/js/sap/ushell/ui/launchpad/AnchorItem.js +1 -1
  1093. package/src/main/js/sap/ushell/ui/launchpad/AnchorItemRenderer.js +1 -1
  1094. package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBar.js +1 -1
  1095. package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBarRenderer.js +1 -1
  1096. package/src/main/js/sap/ushell/ui/launchpad/CatalogEntryContainer.js +1 -1
  1097. package/src/main/js/sap/ushell/ui/launchpad/CatalogsContainer.js +1 -1
  1098. package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainer.js +1 -1
  1099. package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainerRenderer.js +1 -1
  1100. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +2 -2
  1101. package/src/main/js/sap/ushell/ui/launchpad/FailedTileDialog.js +1 -1
  1102. package/src/main/js/sap/ushell/ui/launchpad/GroupHeaderActions.js +1 -1
  1103. package/src/main/js/sap/ushell/ui/launchpad/GroupListItem.js +1 -1
  1104. package/src/main/js/sap/ushell/ui/launchpad/GroupListItemRenderer.js +1 -1
  1105. package/src/main/js/sap/ushell/ui/launchpad/LinkTileWrapper.js +1 -1
  1106. package/src/main/js/sap/ushell/ui/launchpad/LinkTileWrapperRenderer.js +1 -1
  1107. package/src/main/js/sap/ushell/ui/launchpad/LoadingDialog.js +1 -1
  1108. package/src/main/js/sap/ushell/ui/launchpad/LoadingDialogRenderer.js +1 -1
  1109. package/src/main/js/sap/ushell/ui/launchpad/Page.js +1 -1
  1110. package/src/main/js/sap/ushell/ui/launchpad/PageRenderer.js +1 -1
  1111. package/src/main/js/sap/ushell/ui/launchpad/PlusTile.js +1 -1
  1112. package/src/main/js/sap/ushell/ui/launchpad/PlusTileRenderer.js +1 -1
  1113. package/src/main/js/sap/ushell/ui/launchpad/Section.js +2 -2
  1114. package/src/main/js/sap/ushell/ui/launchpad/SectionRenderer.js +1 -1
  1115. package/src/main/js/sap/ushell/ui/launchpad/Tile.js +1 -1
  1116. package/src/main/js/sap/ushell/ui/launchpad/TileContainer.js +1 -1
  1117. package/src/main/js/sap/ushell/ui/launchpad/TileContainerRenderer.js +1 -1
  1118. package/src/main/js/sap/ushell/ui/launchpad/TileContainerUtils.js +1 -1
  1119. package/src/main/js/sap/ushell/ui/launchpad/TileRenderer.js +1 -1
  1120. package/src/main/js/sap/ushell/ui/launchpad/TileState.js +1 -1
  1121. package/src/main/js/sap/ushell/ui/launchpad/TileStateInternal.js +1 -1
  1122. package/src/main/js/sap/ushell/ui/launchpad/TileStateInternalRenderer.js +1 -1
  1123. package/src/main/js/sap/ushell/ui/launchpad/TileStateRenderer.js +1 -1
  1124. package/src/main/js/sap/ushell/ui/launchpad/ViewPortState.js +1 -1
  1125. package/src/main/js/sap/ushell/ui/launchpad/VizInstance.js +1 -1
  1126. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceAbap.js +1 -1
  1127. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceBase.js +1 -1
  1128. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceCdm.js +1 -1
  1129. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceLaunchPage.js +1 -1
  1130. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceLink.js +1 -1
  1131. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceRenderer.js +1 -1
  1132. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +2 -2
  1133. package/src/main/js/sap/ushell/ui/launchpad/section/CompactAreaRenderer.js +1 -1
  1134. package/src/main/js/sap/ushell/ui/shell/ContentRenderer.js +1 -1
  1135. package/src/main/js/sap/ushell/ui/shell/NavigationMiniTile.js +1 -1
  1136. package/src/main/js/sap/ushell/ui/shell/OverflowListItem.js +1 -1
  1137. package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +1 -1
  1138. package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +1 -1
  1139. package/src/main/js/sap/ushell/ui/shell/ShellFloatingAction.js +1 -1
  1140. package/src/main/js/sap/ushell/ui/shell/ShellFloatingActionRenderer.js +1 -1
  1141. package/src/main/js/sap/ushell/ui/shell/ShellFloatingActions.js +1 -9
  1142. package/src/main/js/sap/ushell/ui/shell/ShellHeadItem.js +1 -1
  1143. package/src/main/js/sap/ushell/ui/shell/ShellNavigationMenu.js +1 -1
  1144. package/src/main/js/sap/ushell/ui/shell/SidePane.js +1 -1
  1145. package/src/main/js/sap/ushell/ui/shell/SubHeader.js +8 -51
  1146. package/src/main/js/sap/ushell/ui/shell/SysInfoBar.js +1 -1
  1147. package/src/main/js/sap/ushell/ui/shell/SysInfoBarRenderer.js +1 -1
  1148. package/src/main/js/sap/ushell/ui/shell/ToolArea.js +1 -1
  1149. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +2 -2
  1150. package/src/main/js/sap/ushell/ui/tile/DynamicTile.js +1 -1
  1151. package/src/main/js/sap/ushell/ui/tile/DynamicTileRenderer.js +1 -1
  1152. package/src/main/js/sap/ushell/ui/tile/ImageTile.js +1 -1
  1153. package/src/main/js/sap/ushell/ui/tile/ImageTileRenderer.js +1 -1
  1154. package/src/main/js/sap/ushell/ui/tile/StaticTile.js +1 -1
  1155. package/src/main/js/sap/ushell/ui/tile/StaticTileRenderer.js +1 -1
  1156. package/src/main/js/sap/ushell/ui/tile/TileBase.js +1 -1
  1157. package/src/main/js/sap/ushell/ui/tile/TileBaseRenderer.js +1 -1
  1158. package/src/main/js/sap/ushell/ui/utils.js +2 -2
  1159. package/src/main/js/sap/ushell/ui5service/ShellUIService.js +1 -1
  1160. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +2 -2
  1161. package/src/main/js/sap/ushell/ui5service/UserStatus.js +2 -2
  1162. package/src/main/js/sap/ushell/utils/AppType.js +1 -1
  1163. package/src/main/js/sap/ushell/utils/Deferred.js +1 -1
  1164. package/src/main/js/sap/ushell/utils/DynamicTileRequest.js +1 -1
  1165. package/src/main/js/sap/ushell/utils/HttpClient.js +1 -1
  1166. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +17 -1
  1167. package/src/main/js/sap/ushell/utils/UriParameters.js +1 -1
  1168. package/src/main/js/sap/ushell/utils/UrlParsing.js +1 -1
  1169. package/src/main/js/sap/ushell/utils/UrlShortening.js +2 -2
  1170. package/src/main/js/sap/ushell/utils/WindowUtils.js +1 -1
  1171. package/src/main/js/sap/ushell/utils/chipsUtils.js +1 -1
  1172. package/src/main/js/sap/ushell/utils/objectOperations.js +1 -1
  1173. package/src/main/js/sap/ushell/utils/tilecard/TileCard.js +1 -1
  1174. package/src/main/js/sap/ushell/utils/tilecard/TileCardExtension.js +1 -1
  1175. package/src/main/js/sap/ushell/utils/type.js +1 -1
  1176. package/src/main/js/sap/ushell/utils/utilsCdm.js +1 -1
  1177. package/src/main/js/sap/ushell/utils/workpage/DestinationResolver.js +1 -1
  1178. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +2 -2
  1179. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +3 -3
  1180. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +3 -3
  1181. package/src/main/js/sap/ushell/utils.js +9 -1
  1182. package/src/test/js/sap/ushell/bootstrap/sandbox.js +2 -2
  1183. package/ui5.yaml +20 -1
@@ -1,20 +1,31 @@
1
- // Copyright (c) 2009-2024 SAP SE, All Rights Reserved
1
+ // Copyright (c) 2009-2025 SAP SE, All Rights Reserved
2
2
 
3
3
  /**
4
4
  * @fileOverview handle all the resources for the different applications.
5
- * @version 1.133.0
5
+ * @version 1.134.1
6
6
  */
7
7
  sap.ui.define([
8
+ "sap/base/util/deepEqual",
9
+ "sap/base/util/ObjectPath",
8
10
  "sap/ui/Device",
9
11
  "sap/ui/core/Element",
10
12
  "sap/ui/core/EventBus",
11
- "sap/ushell/components/applicationIntegration/Storage",
12
- "sap/ushell/components/applicationIntegration/application/BlueBoxHandler",
13
- "sap/ushell/components/applicationIntegration/application/Application",
14
- "sap/ushell/components/applicationIntegration/application/PostMessageUtils",
15
- "sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler",
16
- "sap/ushell/components/applicationIntegration/relatedServices/RelatedServices",
13
+ "sap/ushell/components/applicationIntegration/KeepAliveApps",
14
+ "sap/ushell/state/BackNavigation",
17
15
  "sap/ushell/components/applicationIntegration/configuration/AppMeta",
16
+ "sap/ushell/components/applicationIntegration/contracts/EmbeddedUI5Handler",
17
+ "sap/ushell/components/applicationIntegration/contracts/StatefulContainerV1Handler",
18
+ "sap/ushell/components/applicationIntegration/contracts/StatefulContainerV2Handler",
19
+ "sap/ushell/components/applicationIntegration/ApplicationContainerCache",
20
+ "sap/ushell/components/applicationIntegration/PostMessageManager/AppruntimeHandler",
21
+ "sap/ushell/components/applicationIntegration/PostMessageManager/NWBCHandler",
22
+ "sap/ushell/components/applicationIntegration/PostMessageManager/LifecycleHandler",
23
+ "sap/ushell/components/applicationIntegration/PostMessageManager/ServiceHandler",
24
+ "sap/ushell/components/applicationIntegration/PostMessageManager/MessageBrokerHandler",
25
+ "sap/ushell/components/applicationIntegration/PostMessageManager",
26
+ "sap/ushell/components/applicationIntegration/PostMessagePluginInterface",
27
+ "sap/ushell/components/applicationIntegration/IframeApplicationContainer",
28
+ "sap/ushell/components/applicationIntegration/UI5ApplicationContainer",
18
29
  "sap/ushell/services/AppConfiguration",
19
30
  "sap/ushell/utils",
20
31
  "sap/ushell/Config",
@@ -36,18 +47,30 @@ sap.ui.define([
36
47
  "sap/ushell/state/KeepAlive",
37
48
  "sap/ushell/ui5service/ShellUIServiceFactory",
38
49
  "sap/ui/core/service/ServiceFactoryRegistry",
39
- "sap/base/util/ObjectPath"
50
+ "sap/ushell/library",
51
+ "sap/ushell/components/applicationIntegrationOld/AppLifeCycle"
40
52
  ], (
53
+ deepEqual,
54
+ ObjectPath,
41
55
  Device,
42
56
  Element,
43
57
  EventBus,
44
- Storage,
45
- BlueBoxHandler,
46
- Application,
47
- PostMessageUtils,
48
- WebGUIStatefulHandler,
49
- RelatedServices,
58
+ KeepAliveApps,
59
+ BackNavigation,
50
60
  AppMeta,
61
+ EmbeddedUI5Handler,
62
+ StatefulContainerV1Handler,
63
+ StatefulContainerV2Handler,
64
+ ApplicationContainerCache,
65
+ AppRuntimeHandler,
66
+ NWBCHandler,
67
+ LifecycleHandler,
68
+ ServiceHandler,
69
+ MessageBrokerHandler,
70
+ PostMessageManager,
71
+ PostMessagePluginInterface,
72
+ IframeApplicationContainer,
73
+ UI5ApplicationContainer,
51
74
  AppConfiguration,
52
75
  ushellUtils,
53
76
  Config,
@@ -69,10 +92,19 @@ sap.ui.define([
69
92
  KeepAlive,
70
93
  ShellUIServiceFactory,
71
94
  ServiceFactoryRegistry,
72
- ObjectPath
95
+ ushellLibrary,
96
+ AppLifeCycleFallback
73
97
  ) => {
74
98
  "use strict";
75
99
 
100
+ if (Config.last("/core/navigation/enableAppLifeCycleFallback")) {
101
+ ObjectPath.set("sap.ushell.components.applicationIntegration.AppLifeCycle", AppLifeCycleFallback);
102
+ return AppLifeCycleFallback;
103
+ }
104
+
105
+ // shortcut for sap.ushell.components.applicationIntegration.contracts.StatefulType
106
+ const StatefulType = ushellLibrary.components.applicationIntegration.contracts.StatefulType;
107
+
76
108
  // shortcut for sap.ushell.state.StateManager.ShellMode
77
109
  const ShellMode = StateManager.ShellMode;
78
110
 
@@ -89,11 +121,13 @@ sap.ui.define([
89
121
  // const CACHED_APP_TYPES = ["URL"];
90
122
 
91
123
  const KEEP_ALIVE_MODES = {
92
- FULL: "true",
93
- RESTRICTED: "restricted",
94
- FALSE: "false"
124
+ True: "true",
125
+ Restricted: "restricted",
126
+ False: ""
95
127
  };
96
128
 
129
+ const iValidIframeTimeout = 3500;
130
+
97
131
  function AppLifeCycle () {
98
132
  //Dangling controls is a queue of requests to change shell elements attributes, requested by the application in the process of createContent before the actual application state was apply.
99
133
  let bDisableHomeAppCache = false;
@@ -109,13 +143,6 @@ sap.ui.define([
109
143
  MessageBrokerEngine.connect("FLP");
110
144
  }
111
145
 
112
- /**
113
- * @returns {object} Returns the RelatedServices API.
114
- */
115
- this.service = function () {
116
- return RelatedServices;
117
- };
118
-
119
146
  /**
120
147
  * Sets the componentCreated promise for a given appId if it does not exist yet.
121
148
  * Returns the promise along with the resolve and reject functions.
@@ -156,12 +183,14 @@ sap.ui.define([
156
183
  /**
157
184
  * Returns the componentCreated promise for the given appId. If the promise does not yet exist, it is created.
158
185
  * @param {string} sStorageAppId The id of the created application.
159
- * @returns {Promise | undefined} The componentCreated promise for the given appId or undefined if no appId is given.
186
+ * @returns {Promise} The componentCreated promise for the given appId.
160
187
  * @private
161
188
  * @since 1.125.0
162
189
  */
163
- this._getComponentCreatedPromise = function (sStorageAppId) {
164
- if (!sStorageAppId) { return; }
190
+ this._getComponentCreatedPromise = async function (sStorageAppId) {
191
+ if (!sStorageAppId) {
192
+ return;
193
+ }
165
194
  return this._setComponentCreatedPromise(sStorageAppId).promise;
166
195
  };
167
196
 
@@ -185,20 +214,18 @@ sap.ui.define([
185
214
  * @param {object} oData
186
215
  */
187
216
  this._onComponentCreated = function (oEvent, sChannel, oData) {
188
- const oApp = oData.component;
189
- const sStorageAppId = this._normalizeAppId(oApp.getId());
190
- const oStorageEntry = Storage.get(sStorageAppId);
217
+ const oAppComponent = oData.component;
218
+ const sStorageAppId = this._normalizeAppId(oAppComponent.getId());
219
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
191
220
 
192
221
  if (oStorageEntry) {
193
- oStorageEntry.app = oApp;
194
- Application.active(oStorageEntry.app);
195
-
222
+ oStorageEntry.app = oAppComponent;
196
223
  } else {
197
- oCurrentApplication.app = oApp;
224
+ oCurrentApplication.app = oAppComponent;
225
+ }
198
226
 
199
- if (oApp.active) {
200
- oApp.active();
201
- }
227
+ if (oAppComponent.active) {
228
+ oAppComponent.active();
202
229
  }
203
230
 
204
231
  this._resolveComponentCreatedPromise(sStorageAppId);
@@ -216,56 +243,108 @@ sap.ui.define([
216
243
  /**
217
244
  * @param {string} sStorageAppId
218
245
  */
219
- this._store = function (sStorageAppId) {
220
- const oStorageEntry = Storage.get(sStorageAppId);
246
+ this._storeApplication = async function (sStorageAppId) {
247
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
221
248
 
222
249
  if (oStorageEntry) {
223
- Application.store(oStorageEntry);
250
+ const oApplicationContainer = oStorageEntry.container;
251
+ const bShouldBeKeptAlive = oApplicationContainer.getIsKeepAlive();
252
+ if (!bShouldBeKeptAlive) {
253
+ Log.error("Application should be kept alive but the flag is not set", null, "sap.ushell.components.applicationIntegration.AppLifeCycle");
254
+ return;
255
+ }
256
+
257
+ if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer")) {
258
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
259
+ const bSupportsKeepAliveWithinSameFrame = StatefulContainerV2Handler.isStatefulContainerSupportingKeepAlive(oApplicationContainer);
260
+
261
+ if (bSupportsKeepAliveWithinSameFrame) {
262
+ const sActualAppFromId = oApplicationContainer.getCurrentAppId();
263
+ if (!sActualAppFromId) {
264
+ return; // stateful container is already stored
265
+ }
266
+
267
+ // return the container to the pool
268
+ this._setContainerReadyForReuse(oApplicationContainer);
269
+
270
+ await StatefulContainerV2Handler.storeAppWithinSameFrame(oApplicationContainer, sActualAppFromId);
271
+ }
272
+ }
273
+
274
+ await oApplicationContainer.sendRequest("sap.ushell.appRuntime.keepAliveAppHide", {}, false);
275
+
276
+ } else if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
277
+ await EmbeddedUI5Handler.storeApp(oApplicationContainer, oStorageEntry);
278
+ }
279
+
280
+ // close storage entry
224
281
  oStorageEntry.stateStored = true;
282
+
283
+ // todo: [FLPCOREANDUX-10024] clarify how to handle appClosed events
284
+ EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
225
285
  }
226
286
  };
227
287
 
228
288
  /**
289
+ * Should remove their foot print and prepare for possible reuse.
229
290
  * @param {string} sStorageAppId
230
291
  * @param {object} oApplicationContainer
231
- * @param {boolean} bHardDestroy
292
+ * @param {boolean} [bIgnoreReuse=false]
232
293
  * @returns {Promise} Resolves when the app is destroyed.
233
294
  */
234
- this._destroyApplication = async function (sStorageAppId, oApplicationContainer, bHardDestroy) {
235
- const oStorageEntry = Storage.get(sStorageAppId);
295
+ this._destroyApplication = async function (sStorageAppId, oApplicationContainer, bIgnoreReuse) {
296
+ if (typeof sStorageAppId !== "string" || !oApplicationContainer) {
297
+ return;
298
+ }
236
299
 
237
- if (!sStorageAppId || !oApplicationContainer) {
300
+ if (!oApplicationContainer.getCurrentAppId() && !bIgnoreReuse) {
301
+ // no active app in the container, only destroy this app if it shall not be reused.
238
302
  return;
239
303
  }
240
304
 
241
- // todo: [FLPCOREANDUX-10024] instead we should check for keepAlive property
242
- // ignore stateful destroy when hard destroy is requested
243
- if (oStorageEntry && !bHardDestroy) { // keep alive
244
- Storage.removeById(sStorageAppId);
305
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
245
306
 
246
- // Stateful - appruntime (v1, v2 keepAlive is not stateful)
247
- if (BlueBoxHandler.isStatefulContainer(oStorageEntry.container)) {
248
- await BlueBoxHandler.statefulDestroyApp(oStorageEntry.container, sStorageAppId);
307
+ KeepAliveApps.removeById(sStorageAppId);
308
+ KeepAlive.destroy(oStorageEntry);
249
309
 
250
- // Return v1, v2 keepAlive to pool
251
- } else if (oStorageEntry.container.getIsKeepAlive() && BlueBoxHandler.isReusableContainer(oStorageEntry.container)) {
252
- BlueBoxHandler.returnUnusedKeepAliveContainer(oStorageEntry.container);
253
- await this._handleExitStateful(oStorageEntry.container, false);
310
+ // ===============================================================================
311
+ // try to reuse the iframe
254
312
 
255
- // embedded keep alive
256
- } else {
257
- this._removeApplicationContainerFromViewPort(sStorageAppId);
258
- BlueBoxHandler.deleteBlueBoxByContainer(oStorageEntry.container);
259
- oStorageEntry.container.destroy();
313
+ const bIsReusableContainer = oApplicationContainer.getStatefulType() !== StatefulType.NotSupported;
314
+ if (!bIgnoreReuse && bIsReusableContainer) {
315
+ // First return the container to the pool in case it was keep alive.
316
+ // the "return to pool" step requires the current metadata and has to be done before the actual close
317
+ this._setContainerReadyForReuse(oApplicationContainer);
318
+
319
+ // Second close the app
320
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
321
+ await StatefulContainerV2Handler.destroyApp(oApplicationContainer, sStorageAppId);
322
+
323
+ } else if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
324
+ await StatefulContainerV1Handler.destroyApp(oApplicationContainer, sStorageAppId);
260
325
  }
326
+
327
+ // todo: [FLPCOREANDUX-10024] clarify how to handle appClosed events
328
+ EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
261
329
  return;
262
330
  }
263
331
 
264
- if (bHardDestroy) {
265
- Storage.removeByContainer(oApplicationContainer);
332
+ // ===============================================================================
333
+ // the app or iframe cannot be reused (or should not be reused) so we destroy it
334
+
335
+ // try to close the iframe gracefully
336
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
337
+ await StatefulContainerV2Handler.destroyApp(oApplicationContainer, sStorageAppId);
338
+
339
+ } else if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
340
+ await StatefulContainerV1Handler.destroyApp(oApplicationContainer, sStorageAppId);
266
341
  }
267
342
 
268
- this._removeApplicationContainerFromViewPort(sStorageAppId);
343
+ // remove all other related apps from the storage
344
+ KeepAliveApps.removeByContainer(oApplicationContainer, (oStorageEntry) => {
345
+ KeepAlive.destroy(oStorageEntry);
346
+ });
347
+
269
348
  /**
270
349
  * If the application running in an iframe registered for "before close" event,
271
350
  * we first post it a message to prepare for closing (usually, the app will close
@@ -290,158 +369,105 @@ sap.ui.define([
290
369
  );
291
370
  }
292
371
 
293
- if (oStorageEntry) {
294
- KeepAlive.destroy(oStorageEntry);
295
- }
372
+ ApplicationContainerCache.removeByContainer(oApplicationContainer);
373
+ this._removeApplicationContainerFromViewPort(oApplicationContainer);
296
374
 
297
- BlueBoxHandler.deleteBlueBoxByContainer(oApplicationContainer);
298
- Application.destroy(oApplicationContainer);
375
+ try {
376
+ oApplicationContainer.destroy();
377
+ } catch (oError) {
378
+ Log.error(
379
+ `Exception when trying to close application with id '${oApplicationContainer.getId()}'. This error must be fixed in order for FLP to operate properly.`,
380
+ oError,
381
+ "sap.ushell.components.applicationIntegration.AppLifeCycle"
382
+ );
383
+ }
299
384
  };
300
385
 
301
386
  /**
302
387
  * @param {string} sStorageAppId
303
388
  */
304
- this._restore = function (sStorageAppId) {
305
- const oStorageEntry = Storage.get(sStorageAppId);
389
+ this._restoreApplication = async function (sStorageAppId) {
390
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
306
391
 
307
392
  if (oStorageEntry?.stateStored) {
308
393
  // 1) Extensions
309
- RelatedServices.restore(oStorageEntry.service);
394
+ BackNavigation.restore(oStorageEntry.service);
310
395
  AppMeta.restore(oStorageEntry.meta);
396
+
311
397
  // 2) Extension API
312
398
  ShellUIServiceFactory.restore(oStorageEntry);
399
+
313
400
  // 3) Application
314
- Application.restore(oStorageEntry);
315
- }
316
- };
401
+ const oApplicationContainer = oStorageEntry.container;
402
+ if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer")) {
403
+ await oApplicationContainer.sendRequest("sap.ushell.appRuntime.keepAliveAppShow", {}, false);
317
404
 
318
- /**
319
- * @param {object} oApplicationContainer
320
- * @param {boolean} bNavigationToFlpComponent
321
- * @param {boolean} [bForceCloseApp]
322
- * @returns {Promise} Resolves when the app is closed.
323
- */
324
- this._handleExitStateful = function (oApplicationContainer, bNavigationToFlpComponent, bForceCloseApp) {
325
- const sActualAppFromId = oApplicationContainer.getCurrentAppId();
326
-
327
- if (Storage.get(sActualAppFromId)) {
328
- const bDestroyApp = bForceCloseApp || (RelatedServices.isBackNavigation() && !bNavigationToFlpComponent);
329
- if (bDestroyApp) {
330
- EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
331
- Storage.removeById(sActualAppFromId);
332
- return BlueBoxHandler.statefulDestroyApp(oApplicationContainer);
405
+ } else if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
406
+ await EmbeddedUI5Handler.restoreAppAfterNavigate(oApplicationContainer, oStorageEntry);
333
407
  }
334
- // in this case the store of the currently running application, so we do not need to pass the sCacheId
335
- EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
336
- return BlueBoxHandler.statefulStoreKeepAliveApp(oApplicationContainer, sActualAppFromId);
337
408
  }
338
- // in this case the destroy of the currently running application, so we do not need to pass the sCacheId
339
- return BlueBoxHandler.statefulDestroyApp(oApplicationContainer);
340
409
  };
341
410
 
342
411
  /**
343
412
  * @param {object} oOldApplicationContainer
344
413
  * @param {boolean} bNavigationToFlpComponent
345
- * @param {boolean} bFromAfterNavigate
346
414
  * @returns {Promise} Resolves when the app is closed.
347
415
  */
348
- this._handleExitApplication = async function (oOldApplicationContainer, bNavigationToFlpComponent, bFromAfterNavigate) {
416
+ this._handleExitApplication = async function (oOldApplicationContainer, bNavigationToFlpComponent) {
349
417
  if (!oOldApplicationContainer) {
350
418
  return;
351
419
  }
352
420
 
353
421
  const sOldStorageAppId = oOldApplicationContainer.getCurrentAppId();
354
-
355
422
  if (!sOldStorageAppId) {
423
+ // no active app in the container
356
424
  return;
357
425
  }
358
426
 
359
- // todo: [FLPCOREANDUX-10024] should not be necessary; the destroy should be callable multiple times w/o issues
360
- // if called from onAfterNavigate, do nothing if oOldApplicationContainer is stateful container, because
361
- // application was already closed at the beginning of 'handleCreateApplicationContainer'
362
- if (!bNavigationToFlpComponent
363
- && bFromAfterNavigate
364
- && (
365
- BlueBoxHandler.isStatefulContainer(oOldApplicationContainer)
366
- || BlueBoxHandler.isStatefulContainerInKeepAlivePool(oOldApplicationContainer)
367
- )
368
- ) {
369
- return;
370
- }
371
-
372
- const oOldStorageEntry = Storage.get(sOldStorageAppId);
373
- // STATEFUL
374
- if (BlueBoxHandler.isStatefulContainer(oOldApplicationContainer)) {
375
- await this._handleExitStateful(oOldApplicationContainer, bNavigationToFlpComponent);
427
+ const bNavigationBackToApp = BackNavigation.isBackNavigation() && !bNavigationToFlpComponent;
376
428
 
377
- //STATELESS
378
- } else if (oOldStorageEntry) {
379
- // Back Navigation Case
380
- if (RelatedServices.isBackNavigation() && !bNavigationToFlpComponent) {
381
- //check if the Iframe needs to be cached instead of destroy
382
- if (oOldApplicationContainer.getIsKeepAlive() && BlueBoxHandler.isReusableContainer(oOldApplicationContainer)) {
383
- BlueBoxHandler.returnUnusedKeepAliveContainer(oOldApplicationContainer);
384
- await this._handleExitStateful(oOldApplicationContainer, bNavigationToFlpComponent);
429
+ // Back Navigation Case
430
+ if (bNavigationBackToApp) {
431
+ await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer); // todo: [FLPCOREANDUX-10024] new marker
385
432
 
386
- } else {
387
- await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
388
- }
389
-
390
- // Forward Navigation Cases
391
- } else if (oOldApplicationContainer.getApplicationType() === "UI5") {
433
+ // Forward Navigation Case
434
+ // (and back navigation to FLP component)
435
+ } else {
436
+ // todo: [FLPCOREANDUX-10024] this should probably moved to a UI5 ApplicationContainer implementation
437
+ if (oOldApplicationContainer.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
392
438
  // Wait until navigation's source app has been started completely, so that a later back navigation finds a proper app that
393
439
  // can be re-enabled (keep-alive scenario)
394
440
  await this._getComponentCreatedPromise(sOldStorageAppId);
395
- this._store(sOldStorageAppId);
396
- } else {
397
- this._store(sOldStorageAppId);
398
441
  }
399
- EventBus.getInstance().publish("sap.ushell", "appClosed", oOldApplicationContainer);
400
442
 
401
- // LEGACY STATEFUL (WebGUI)
402
- } else if (oOldApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
403
- if (bNavigationToFlpComponent) {
404
- await PostMessageUtils.postMessageToIframeApp(oOldApplicationContainer, "sap.gui", "triggerCloseSessionImmediately");
443
+ if (oOldApplicationContainer.getIsKeepAlive()) {
444
+ return this._storeApplication(sOldStorageAppId);
405
445
  }
406
-
407
- // THE REST...
408
- } else {
409
- //destroy the application and its resources
410
- await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
446
+ return this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
411
447
  }
412
448
  };
413
449
 
414
450
  /**
415
451
  * @param {function(): boolean} fnFilterApps The filter function
452
+ * @param {boolean} [bIgnoreReuse=false]
416
453
  * @returns {Promise} Resolves when all keep alive apps are closed.
417
454
  */
418
- this._closeKeepAliveApps = function (fnFilterApps) {
455
+ this._destroyKeepAliveApps = async function (fnFilterApps, bIgnoreReuse) {
419
456
  try {
420
- const aKeepAliveRestrictedApps = [];
457
+ const aFilteredApps = [];
421
458
 
422
- Storage.forEach((oStorageEntry) => {
459
+ KeepAliveApps.forEach((oStorageEntry) => {
423
460
  if (fnFilterApps(oStorageEntry)) {
424
- aKeepAliveRestrictedApps.push(oStorageEntry);
461
+ aFilteredApps.push(oStorageEntry);
425
462
  }
426
463
  });
427
- const aClosePromises = aKeepAliveRestrictedApps.map((oRestrictedApp) => {
428
- //check if it needs to be cached instead of destroy
429
- const bCanHandleKeepAlive = BlueBoxHandler.isStatefulContainerSupportingKeepAlive(oRestrictedApp.container);
430
- const bIsKeepAlive = oRestrictedApp.container.getIsKeepAlive();
431
- const bIsReusable = BlueBoxHandler.isReusableContainer(oRestrictedApp.container);
432
-
433
- if (!bCanHandleKeepAlive && bIsKeepAlive && bIsReusable) {
434
- BlueBoxHandler.returnUnusedKeepAliveContainer(oRestrictedApp.container);
435
- // todo: [FLPCOREANDUX-10024] what is the actual difference between destroyApplication and handleExitStateful?
436
- return this._handleExitStateful(oRestrictedApp.container, true, true);
437
- }
438
-
439
- return this._destroyApplication(oRestrictedApp.appId, oRestrictedApp.container);
464
+ const aClosePromises = aFilteredApps.map((oFilteredApp) => {
465
+ return this._destroyApplication(oFilteredApp.appId, oFilteredApp.container, bIgnoreReuse);
440
466
  });
441
467
 
442
- return Promise.all(aClosePromises);
468
+ await Promise.allSettled(aClosePromises);
443
469
  } catch (e) {
444
- Log.error("closeKeepAliveApps call failed", e);
470
+ Log.error("_destroyKeepAliveApps call failed", e);
445
471
  }
446
472
  };
447
473
 
@@ -450,18 +476,18 @@ sap.ui.define([
450
476
  * @param {object} oFrom
451
477
  */
452
478
  this.onBeforeNavigate = function (sFromId, oFrom) {
453
- if (sFromId && oFrom && oFrom.isA("sap.ushell.components.container.ApplicationContainer")) {
479
+ if (sFromId && oFrom && oFrom.isA("sap.ushell.components.applicationIntegration.ApplicationContainer")) {
454
480
  const sStorageAppId = sFromId;
455
481
  const oApplicationContainer = oFrom;
456
482
 
457
- const bHasIframe = !!oApplicationContainer._getIFrame(); // todo: [FLPCOREANDUX-10024] is this really required?
458
- const bIsSupportedType = oApplicationContainer.getStatefulType() > BlueBoxHandler.STATEFUL_TYPES.NOT_SUPPORTED;
483
+ const bHasIframe = !!oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer"); // todo: [FLPCOREANDUX-10024] is this really required?
484
+ const bIsSupportedType = oApplicationContainer.getStatefulType() > StatefulType.NotSupported;
459
485
 
460
- const bCached = !!Storage.get(sStorageAppId);
486
+ const bCached = !!KeepAliveApps.get(sStorageAppId);
461
487
  const bSessionHandlingSupported = bHasIframe && bIsSupportedType;
462
488
 
463
- if (bCached || bSessionHandlingSupported) {
464
- PostMessageUtils.postMessageToIframeApp(oApplicationContainer, "sap.ushell.sessionHandler", "beforeApplicationHide", {}, false);
489
+ if (bHasIframe && (bCached || bSessionHandlingSupported)) {
490
+ oApplicationContainer.sendRequest("sap.ushell.sessionHandler.beforeApplicationHide", {}, false);
465
491
  }
466
492
  }
467
493
 
@@ -480,7 +506,7 @@ sap.ui.define([
480
506
  if (!sFromId) {
481
507
  sFromId = "";
482
508
  }
483
- //destroy the application if not cached or marked for reuse.
509
+
484
510
  const aFlpComponentIds = [
485
511
  "Shell-appfinder-component",
486
512
  "Shell-home-component",
@@ -491,71 +517,63 @@ sap.ui.define([
491
517
  ];
492
518
 
493
519
  const bNavigationToFlpComponent = aFlpComponentIds.some((sFlpComponentId) => sToId.includes(sFlpComponentId));
494
- const bNavigationFromFlpComponent = aFlpComponentIds.some((sFlpComponentId) => sFromId.includes(sFlpComponentId));
495
520
 
496
- if (bNavigationToFlpComponent) {
497
- await this._closeKeepAliveApps((oStorageEntry) => oStorageEntry.keepAliveMode === KEEP_ALIVE_MODES.RESTRICTED);
521
+ if (sToId && oTo) {
522
+ // ==== Navigation from [any] to app ====
523
+ if (oTo.isA("sap.ushell.components.applicationIntegration.ApplicationContainer")) {
524
+ const sStorageAppId = sToId;
525
+ const oApplicationContainer = oTo;
526
+
527
+ // this code must be at the beginning of the function to allow it to be processed once in
528
+ // a cycle of opening an app
529
+ if (oApplicationContainer.getIframeReusedForApp()) {
530
+ oApplicationContainer.setProperty("iframeReusedForApp", false, true);
531
+ if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer")) {
532
+ oApplicationContainer.sendRequest("sap.ushell.sessionHandler.afterApplicationShow", {}, false);
533
+ }
534
+ }
498
535
 
499
- Application.setActiveAppContainer(undefined);
536
+ if (KeepAliveApps.get(sStorageAppId)) {
537
+ await this._restoreApplication(sStorageAppId);
538
+ }
500
539
 
501
- // Clear custom About Dialog parameters
502
- AppInfoParameters.flush();
503
- } else if (sToId && oTo) {
504
- const sStorageAppId = sToId;
505
- const oApplicationContainer = oTo;
506
-
507
- // this code must be at the beginning of the function to allow it to be processed once in
508
- // a cycle of opening an app
509
- if (oApplicationContainer.getIframeReusedForApp()) {
510
- oApplicationContainer.setProperty("iframeReusedForApp", false, true);
511
- PostMessageUtils.postMessageToIframeApp(oApplicationContainer, "sap.ushell.sessionHandler", "afterApplicationShow", {}, false);
512
- }
540
+ // ==== Navigation from [any] to renderer managed component ====
541
+ } else {
542
+ // navigation to home
543
+ if (bNavigationToFlpComponent) {
544
+ await this._destroyKeepAliveApps((oStorageEntry) => oStorageEntry.keepAliveMode === KEEP_ALIVE_MODES.Restricted);
545
+ }
513
546
 
514
- if (Storage.get(sStorageAppId)) {
515
- this._restore(sStorageAppId);
547
+ // Clear custom About Dialog parameters
548
+ AppInfoParameters.flush();
516
549
  }
517
550
  }
518
551
 
519
- if (bNavigationFromFlpComponent) {
520
- //handle the case of appFinder
521
- if (sToId.indexOf("Shell-appfinder-component") > 0) {
522
- EventBus.getInstance().publish("sap.ushell", "appFinderAfterNavigate");
523
- }
552
+ if (sFromId && oFrom) {
553
+ // ==== Navigation from app to [any] ====
554
+ if (oFrom.isA("sap.ushell.components.applicationIntegration.ApplicationContainer")) {
555
+ const oApplicationContainer = oFrom;
524
556
 
525
- if (bDisableHomeAppCache) {
526
- try {
527
- this._removeApplicationContainerFromViewPort(sFromId);
528
- oFrom.destroy();
529
- } catch (oError) {
530
- Log.error(`Error when trying to destroy the home component: '${sToId}'`, oError);
531
- }
532
- }
533
- } else if (sFromId && oFrom) {
534
- const oApplicationContainer = oFrom;
535
-
536
- await this._handleExitApplication(oApplicationContainer, bNavigationToFlpComponent, true);
537
- }
538
- };
557
+ await this._handleExitApplication(oApplicationContainer, bNavigationToFlpComponent);
539
558
 
540
- /**
541
- * @param {object} oOldResolvedHashFragment
542
- * @param {object} oResolvedHashFragment
543
- * @returns {Promise} Resolves when the after navigation was handled.
544
- */
545
- // todo: [FLPCOREANDUX-10024] should be moved to onAfterNavigate
546
- this.handleAfterNavigate = async function (oResolvedHashFragment, oOldResolvedHashFragment) {
547
- if (!oOldResolvedHashFragment) {
548
- return;
549
- }
559
+ // ==== Navigation from renderer managed component to [any] ====
560
+ } else {
561
+ const sFromControlId = sFromId;
562
+ const oFromControl = oFrom;
550
563
 
551
- const sAppFrameworkId = ObjectPath.get("appCapabilities.appFrameworkId", oOldResolvedHashFragment);
552
- const bFromApplicationIsTR = ushellUtils.isTRApplicationType(oOldResolvedHashFragment.applicationType, sAppFrameworkId);
553
- const bToApplicationIsTR = ushellUtils.isTRApplicationType(oResolvedHashFragment.applicationType);
564
+ // handle the case of appFinder
565
+ if (sToId.indexOf("Shell-appfinder-component") > 0) {
566
+ EventBus.getInstance().publish("sap.ushell", "appFinderAfterNavigate");
567
+ }
554
568
 
555
- if (bFromApplicationIsTR && !bToApplicationIsTR) {
556
- const oPreviousStatefulContainer = BlueBoxHandler.getBlueBoxByUrl(oOldResolvedHashFragment.url);
557
- if (oPreviousStatefulContainer && oPreviousStatefulContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
558
- return WebGUIStatefulHandler.guiStatefulCloseCurrentApp(oPreviousStatefulContainer);
569
+ if (bDisableHomeAppCache) {
570
+ try {
571
+ this._removeApplicationContainerFromViewPort(oFromControl);
572
+ oFromControl.destroy();
573
+ } catch (oError) {
574
+ Log.error(`Error when trying to destroy the home component: '${sFromControlId}'`, oError);
575
+ }
576
+ }
559
577
  }
560
578
  }
561
579
  };
@@ -566,16 +584,15 @@ sap.ui.define([
566
584
  * @param {object} oResolvedHashFragment
567
585
  * @param {string} oParsedShellHash
568
586
  * @param {string} sKeepAliveMode
569
- * @returns {boolean} Returns true if the app was stored
587
+ * @returns {object} Returns the storage entry.
570
588
  */
571
- this._storeApp = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
572
- if (Storage.get(sStorageAppId)) {
573
- return false;
589
+ this._addStorageEntry = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
590
+ const oOldStorageEntry = KeepAliveApps.get(sStorageAppId);
591
+ if (oOldStorageEntry) {
592
+ return oOldStorageEntry;
574
593
  }
575
594
 
576
- oApplicationContainer.setProperty("isKeepAlive", true, true);
577
-
578
- Storage.set(sStorageAppId, {
595
+ const oNewStorageEntry = {
579
596
  service: {},
580
597
  shellHash: `#${UrlParsing.constructShellHash(oParsedShellHash)}`,
581
598
  appId: sStorageAppId,
@@ -583,16 +600,18 @@ sap.ui.define([
583
600
  currentState: null, // current state is stored before close see: sap/ushell/state/CurrentState
584
601
  controlManager: null, // control manager state is stored before close see: sap/ushell/state/ControlManager
585
602
  container: oApplicationContainer,
586
- meta: AppConfiguration.getMetadata(oResolvedHashFragment),
603
+ meta: undefined, // is set after application start
587
604
  app: undefined,
588
605
  keepAliveMode: sKeepAliveMode,
589
606
  appTarget: oResolvedHashFragment,
590
607
  ui5ComponentName: oResolvedHashFragment.ui5ComponentName,
591
608
  enableRouterRetrigger: bEnableRouterRetrigger,
592
609
  stateStored: false
593
- });
610
+ };
611
+
612
+ KeepAliveApps.set(sStorageAppId, oNewStorageEntry);
594
613
 
595
- return true;
614
+ return oNewStorageEntry;
596
615
  };
597
616
 
598
617
  /**
@@ -611,19 +630,19 @@ sap.ui.define([
611
630
  return;
612
631
  }
613
632
  const sStorageAppId = oCurrentApp.appId;
614
- const oStorageEntry = Storage.get(sStorageAppId);
633
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
615
634
 
616
635
  if (!oStorageEntry) {
617
636
  // do not store for non-keep-alive apps
618
637
  return;
619
638
  }
620
639
 
621
- if (oStorageEntry.container.getApplicationType() === "UI5") {
640
+ if (oStorageEntry.container.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
622
641
  await this._getComponentCreatedPromise(sStorageAppId);
623
642
  }
624
643
 
625
644
  // back navigation
626
- RelatedServices.store(oStorageEntry.service);
645
+ BackNavigation.store(oStorageEntry.service);
627
646
  // currentState, controlManager
628
647
  KeepAlive.store(oStorageEntry);
629
648
  // About Dialog
@@ -637,34 +656,30 @@ sap.ui.define([
637
656
  * @returns {string} Returns the keep alive mode.
638
657
  */
639
658
  this._calculateKeepAliveMode = function (sStorageAppId, oResolvedHashFragment, oParsedShellHash) {
659
+ const aKeepAliveModes = Object.values(KEEP_ALIVE_MODES);
660
+
640
661
  //generic intent currently can never be keep alive
641
662
  if (sStorageAppId === "application-Shell-startIntent") {
642
- return;
663
+ return KEEP_ALIVE_MODES.False;
643
664
  }
644
665
 
645
666
  // Global override in query parameters
646
667
  let sKeepAlive = new URLSearchParams(window.location.search).get("sap-keep-alive");
647
- if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
668
+ if (aKeepAliveModes.includes(sKeepAlive)) {
648
669
  return sKeepAlive;
649
- } else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
650
- return;
651
670
  }
652
671
 
653
672
  // App override in intent parameters
654
673
  sKeepAlive = oParsedShellHash.params?.["sap-keep-alive"];
655
- if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
674
+ if (aKeepAliveModes.includes(sKeepAlive)) {
656
675
  return sKeepAlive;
657
- } else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
658
- return;
659
676
  }
660
677
 
661
678
  // Magic override in resolved hash fragment
662
679
  if (oResolvedHashFragment.url) {
663
680
  sKeepAlive = UriParameters.fromURL(oResolvedHashFragment.url).get("sap-keep-alive");
664
- if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
681
+ if (aKeepAliveModes.includes(sKeepAlive)) {
665
682
  return sKeepAlive;
666
- } else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
667
- return;
668
683
  }
669
684
  }
670
685
 
@@ -672,8 +687,10 @@ sap.ui.define([
672
687
  // can be overridden by the above checks
673
688
  const sShellHash = UrlParsing.constructShellHash(oParsedShellHash);
674
689
  if (sShellHash && ushellUtils.isRootIntent(sShellHash)) {
675
- return KEEP_ALIVE_MODES.FULL;
690
+ return KEEP_ALIVE_MODES.True;
676
691
  }
692
+
693
+ return KEEP_ALIVE_MODES.False;
677
694
  };
678
695
 
679
696
  /**
@@ -692,14 +709,9 @@ sap.ui.define([
692
709
  * @returns {Promise} Resolves when the app is reloaded.
693
710
  */
694
711
  this._reloadCurrentApp = async function (oData) {
695
- const oTmpAppContainer = BlueBoxHandler.getBlueBoxById(oData.sAppContainerId);
696
- if (oTmpAppContainer) {
697
- // todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
698
- const sTmpUrl = oTmpAppContainer.getUrl();
699
- BlueBoxHandler.removeCapabilities(oTmpAppContainer);
700
- Storage.removeByContainer(oTmpAppContainer);
701
- await this._destroyApplication(oData.sAppContainerId, oTmpAppContainer);
702
- BlueBoxHandler.deleteBlueBoxByUrl(sTmpUrl);
712
+ const oTargetApplicationContainer = ApplicationContainerCache.getById(oData.sAppContainerId);
713
+ if (oTargetApplicationContainer) {
714
+ await this._destroyApplication(oTargetApplicationContainer.getCurrentAppId(), oTargetApplicationContainer);
703
715
  }
704
716
 
705
717
  const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
@@ -713,151 +725,72 @@ sap.ui.define([
713
725
  /**
714
726
  * Opens an application in an application container and sets it as the current application.
715
727
  *
716
- * @param {string} sAppId the id of the application.
728
+ * @param {string} sStorageAppId the id of the application.
717
729
  * @param {object} oResolvedHashFragment the resolved hash fragment.
718
- * @param {object} oParsedShellHash the parsed shell hash.
730
+ * @param {object} bShouldBeCached Wether it should be cached.
719
731
  */
720
- this._openApp = async function (sAppId, oResolvedHashFragment, oParsedShellHash) {
721
- // format appId, the is the storage identifier
722
- const sStorageAppId = `application-${sAppId}`;
732
+ this._createOrReuseApplicationContainer = function (sStorageAppId, oResolvedHashFragment, bShouldBeCached) {
733
+ let oApplicationContainer;
723
734
 
724
- // this case will handle the stateful containers flow.
725
- let oApplicationContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
726
-
727
- const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
728
- const bShouldBeCached = !!sKeepAliveMode;
729
-
730
- if (BlueBoxHandler.isStatefulContainer(oApplicationContainer)) {
731
- this._openAppInStatefulContainer(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bShouldBeCached);
732
- return;
735
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
736
+ // app was kept alive
737
+ if (oStorageEntry && oStorageEntry.container) {
738
+ oApplicationContainer = oStorageEntry.container;
733
739
  }
734
740
 
735
- if (bShouldBeCached) {
736
- await this._openAppAndCacheIt(sStorageAppId, sAppId, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
737
- return;
738
- }
739
-
740
- if (oResolvedHashFragment.applicationType === "TR" || oResolvedHashFragment.appCapabilities?.appFrameworkId === "GUI") {
741
- await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
742
-
743
- if (!oApplicationContainer || oApplicationContainer.getStatefulType() !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
744
- oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
745
- }
746
-
747
- } else {
748
- const aSpecialApplicationTypes = [
749
- "URL",
750
- "TR",
751
- "NWBC",
752
- "WDA"
753
- ];
754
-
755
- if (!oApplicationContainer || aSpecialApplicationTypes.includes(oResolvedHashFragment.applicationType)) {
756
- await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
757
- }
758
-
759
- if (oApplicationContainer) {
760
- const oApplicationContainerFromViewPort = this._getApplicationContainerFromViewPort(sAppId);
741
+ // try to find a reusable container
742
+ if (!oApplicationContainer) {
743
+ const oStatefulApplicationContainer = ApplicationContainerCache.findFreeContainerByUrl(oResolvedHashFragment.url);
761
744
 
762
- if (oApplicationContainerFromViewPort) {
763
- this._removeApplicationContainerFromViewPort(oApplicationContainerFromViewPort.getId());
764
- oApplicationContainerFromViewPort.destroy();
765
- }
745
+ const bIsReusableContainer = oStatefulApplicationContainer?.getStatefulType() !== StatefulType.NotSupported;
746
+ if (bIsReusableContainer) {
747
+ oApplicationContainer = oStatefulApplicationContainer;
766
748
  }
767
-
768
- oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
769
749
  }
770
750
 
771
- // create application that is not persisted and not cashed
772
- oCurrentApplication = {
773
- appId: sStorageAppId,
774
- stt: "loading",
775
- container: oApplicationContainer,
776
- meta: AppConfiguration.getMetadata(oResolvedHashFragment),
777
- app: undefined
778
- };
779
- };
780
-
781
- /**
782
- * Open an application in a stateful container that already exists.
783
- *
784
- * @param {string} sStorageAppId the storage id of the application.
785
- * @param {sap.ushell.components.container.ApplicationContainer} oApplicationContainer the stateful application container.
786
- * @param {object} oResolvedHashFragment the resolved hash fragment.
787
- * @param {object} oParsedShellHash the parsed shell hash.
788
- * @param {string} sKeepAliveMode the keep alive mode.
789
- * @param {boolean} bShouldBeCached whether the application container should be cached in the storage.
790
- */
791
- this._openAppInStatefulContainer = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bShouldBeCached) {
792
- if (bShouldBeCached) {
793
- //this is the case where we have a stateful container and keep alive
794
- //is cached application
795
- let oStorageEntry = Storage.get(sStorageAppId);
796
- if (!oStorageEntry) {
797
- this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
798
- oStorageEntry = Storage.get(sStorageAppId);
799
- }
800
-
801
- oCurrentApplication = oStorageEntry;
802
- } else {
803
- // create application that is not persisted and not cashed
804
- oCurrentApplication = {
805
- appId: sStorageAppId,
806
- stt: "loading",
807
- container: oApplicationContainer,
808
- meta: AppConfiguration.getMetadata(oResolvedHashFragment),
809
- app: undefined
751
+ // create a new container if no reusable container was found
752
+ if (!oApplicationContainer) {
753
+ // Add new ShellUIService instance of the interface to the application container
754
+ // this will only be used by iframe applications
755
+ oResolvedHashFragment.shellUIService = oGlobalShellUIService.getInterface();
756
+ const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
757
+ const bIsUI5App = !!sTargetUi5ComponentName;
758
+
759
+ const oCommonProperties = {
760
+ id: sStorageAppId,
761
+ currentAppId: sStorageAppId,
762
+ currentAppUrl: oResolvedHashFragment.url,
763
+ shellUIService: oResolvedHashFragment.shellUIService,
764
+ currentAppTargetResolution: oResolvedHashFragment,
765
+ applicationType: oResolvedHashFragment.applicationType,
766
+ openWithPostByAppParam: oResolvedHashFragment.openWithPostByAppParam,
767
+ reservedParameters: oResolvedHashFragment.reservedParameters,
768
+ systemAlias: oResolvedHashFragment.systemAlias,
769
+ targetNavigationMode: oResolvedHashFragment.targetNavigationMode,
770
+ url: oResolvedHashFragment.url,
771
+ frameworkId: oResolvedHashFragment.appCapabilities?.appFrameworkId
810
772
  };
811
- }
812
- };
813
-
814
- /**
815
- * Fetches an existing application container from storage or creates this application container and sets it in to the storage.
816
- *
817
- * @param {string} sStorageAppId the storage id of the application.
818
- * @param {string} sAppId the id of the application.
819
- * @param {object} oResolvedHashFragment the resolved hash fragment.
820
- * @param {object} oParsedShellHash the parsed shell hash.
821
- * @param {string} sKeepAliveMode the keep alive mode.
822
- */
823
- this._openAppAndCacheIt = async function (sStorageAppId, sAppId, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
824
- // is cached application
825
- let oStorageEntry = Storage.get(sStorageAppId);
826
- if (!oStorageEntry) {
827
- let oApplicationContainer = BlueBoxHandler.findFreeContainerForNewKeepAliveApp(oResolvedHashFragment);
828
773
 
829
- if (!oApplicationContainer) {
830
- await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
831
- oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
774
+ if (bIsUI5App) {
775
+ oApplicationContainer = new UI5ApplicationContainer({
776
+ ...oCommonProperties,
777
+ ui5ComponentName: oResolvedHashFragment.ui5ComponentName
778
+ });
779
+ } else {
780
+ oApplicationContainer = new IframeApplicationContainer({
781
+ ...oCommonProperties
782
+ });
832
783
  }
833
784
 
834
- this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
835
- oStorageEntry = Storage.get(sStorageAppId);
785
+ this._initializeApplicationContainer(oApplicationContainer, oResolvedHashFragment);
786
+ } else {
787
+ oApplicationContainer.setProperty("isFetchedFromCache", true, true);
836
788
  }
837
789
 
838
- oCurrentApplication = oStorageEntry;
839
- };
790
+ ApplicationContainerCache.setContainerActive(oApplicationContainer);
791
+ oApplicationContainer.setProperty("isKeepAlive", bShouldBeCached, true);
840
792
 
841
- /**
842
- * There might be two apps with the same Semantic object + Action, from two different servers,
843
- * so we will need to destroy the first application to avoid duplicate id.
844
- *
845
- * The current stateful container mechanism does not support it.
846
- * Until it is supported, we delete here the blue box and then create the new one.
847
- * In future BLI, we plan to change the id of the container to be more unique.
848
- *
849
- * @param {string} sStorageAppId the storage app id.
850
- * @param {string} sAppId the app id.
851
- */
852
- this._deleteSameIdAppContainer = async function (sStorageAppId, sAppId) {
853
- const oTmpAppContainer = BlueBoxHandler.getBlueBoxById(sStorageAppId) || this._getApplicationContainerFromViewPort(sAppId);
854
- if (oTmpAppContainer) {
855
- // todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
856
- const sTmpUrl = oTmpAppContainer.getUrl();
857
- BlueBoxHandler.removeCapabilities(oTmpAppContainer);
858
- await this._destroyApplication(sStorageAppId, oTmpAppContainer, true);
859
- BlueBoxHandler.deleteBlueBoxByUrl(sTmpUrl);
860
- }
793
+ return oApplicationContainer;
861
794
  };
862
795
 
863
796
  /**
@@ -877,8 +810,9 @@ sap.ui.define([
877
810
 
878
811
  bEnableRouterRetrigger = oData.disable;
879
812
 
880
- if (Storage.get(sStorageAppId)) {
881
- Storage.get(sStorageAppId).enableRouterRetrigger = oData.disable;
813
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
814
+ if (oStorageEntry) {
815
+ oStorageEntry.enableRouterRetrigger = oData.disable;
882
816
  }
883
817
  });
884
818
  EventHub.on("setApplicationFullWidth").do((oData) => {
@@ -917,6 +851,8 @@ sap.ui.define([
917
851
  });
918
852
  }
919
853
 
854
+ this._startPostMessageHandling();
855
+
920
856
  ShellUIServiceFactory.init().then(() => {
921
857
  ServiceFactoryRegistry.register(
922
858
  "sap.ushell.ui5service.ShellUIService",
@@ -928,116 +864,87 @@ sap.ui.define([
928
864
  oViewPortContainer = oInViewPortContainer;
929
865
  bDisableHomeAppCache = bInDisableHomeAppCache;
930
866
 
931
- BlueBoxHandler.init();
932
- Application.init(BlueBoxHandler, PostMessageUtils);
933
- PostMessageUtils.init(Application, BlueBoxHandler);
934
-
935
- //setup & register communication
936
- this.registerShellCommunicationHandler({
937
- "sap.ushell.services.AppLifeCycle": {
938
- oRequestCalls: {
939
- create: {
940
- isActiveOnly: true,
941
- distributionType: ["URL"]
942
- },
943
- destroy: {
944
- isActiveOnly: true,
945
- distributionType: ["URL"]
946
- },
947
- store: {
948
- isActiveOnly: true,
949
- distributionType: ["URL"]
950
- },
951
- restore: {
952
- isActiveOnly: true,
953
- distributionType: ["URL"]
954
- }
955
- },
956
- oServiceCalls: {
957
- subscribe: {
958
- executeServiceCallFn: async function (oServiceParams) {
959
- const { oContainer: oApplicationContainer } = oServiceParams;
960
- const aNewCapabilities = oServiceParams.oMessageData.body;
961
- if (!Array.isArray(aNewCapabilities)) {
962
- Log.error("subscribe service call failed: capabilities must be an array");
963
- return {};
964
- }
965
- oApplicationContainer.addBlueBoxCapabilities(aNewCapabilities);
966
- return {};
967
- }
968
- },
969
- setup: {
970
- executeServiceCallFn: async function (oServiceParams) {
971
- const oSetup = oServiceParams?.oMessageData?.body;
972
- const { oContainer: oApplicationContainer } = oServiceParams;
973
-
974
- const aNewCapabilities = [];
975
- if (oSetup) {
976
- const bIsSAPLegacyApplicationType = ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId());
977
- // appruntime supports statefulContainer + keepAlive
978
- const bIgnoreStateful = oApplicationContainer.getIsKeepAlive() && bIsSAPLegacyApplicationType;
979
-
980
- if (oSetup.isStateful) {
981
- if (bIgnoreStateful) {
982
- // todo: [FLPCOREANDUX-10024] why not NOT_SUPPORTED instead?
983
- oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.FLP_V2_KEEP_ALIVE, true);
984
- } else {
985
- aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "create" });
986
- aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "destroy" });
987
- oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.FLP_V2, true);
867
+ //TODO add unsubscribe
868
+ EventBus.getInstance().subscribe("sap.ushell", "appComponentLoaded", this._onComponentCreated, this);
869
+ EventBus.getInstance().subscribe("sap.ushell", "getAppLifeCycle", this._onGetMe, this);
870
+
871
+ this._addEvents();
872
+ };
873
+
874
+ this._startPostMessageHandling = function () {
875
+ PostMessageManager.init({
876
+ getCurrentApplication: () => {
877
+ return this.getCurrentApplication().container;
878
+ },
879
+ getAllApplications: () => {
880
+ return ApplicationContainerCache.getAll();
881
+ }
882
+ });
883
+ AppRuntimeHandler.register();
884
+ NWBCHandler.register();
885
+ LifecycleHandler.register();
886
+ ServiceHandler.register();
887
+ MessageBrokerHandler.register();
888
+ this._waitForPluginsAndReplayPostMessages();
889
+
890
+ // todo: [FLPCOREANDUX-10024] harmonize with Appruntime
891
+ PostMessagePluginInterface.init(
892
+ true, // bRunsInOuterShell
893
+ (oCommObj) => { // fnAddCommunicationObject
894
+ Object.keys(oCommObj).forEach((sService) => {
895
+ const oServiceDef = oCommObj[sService];
896
+
897
+ if (oServiceDef.oServiceCalls) {
898
+ Object.keys(oServiceDef.oServiceCalls).forEach((sInterface) => {
899
+ const oInterface = oServiceDef.oServiceCalls[sInterface];
900
+ const sServiceRequest = `${sService}.${sInterface}`;
901
+
902
+ if (oInterface.executeServiceCallFn) {
903
+ PostMessageManager.setRequestHandler(
904
+ sServiceRequest,
905
+ async (oMessageBody, oEvent) => {
906
+ const oServiceParams = {
907
+ oMessageData: JSON.parse(oEvent.data),
908
+ oMessage: oEvent
909
+ };
910
+ return ushellUtils.promisify(oInterface.executeServiceCallFn(oServiceParams));
988
911
  }
989
- }
990
- if (oSetup.isIframeValid) {
991
- aNewCapabilities.push({ action: "iframeIsValid", service: "sap.ushell.appRuntime" });
992
- }
993
- if (oSetup.session?.bLogoutSupport) {
994
- aNewCapabilities.push({ action: "logout", service: "sap.ushell.sessionHandler" });
995
- }
996
-
997
- // todo: [FLPCOREANDUX-10024] this is a workaround
998
- const bIsAppruntime = ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId());
999
- if (bIsAppruntime) {
1000
- aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "store" });
1001
- aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "restore" });
1002
- }
1003
-
1004
- oApplicationContainer.addBlueBoxCapabilities(aNewCapabilities);
912
+ );
1005
913
  }
1006
- }
914
+ });
1007
915
  }
1008
- }
1009
- },
1010
- "sap.gui": {
1011
- oServiceCalls: {
1012
- loadFinished: {
1013
- executeServiceCallFn: async function (oServiceParams) {
1014
- const { oContainer: oApplicationContainer } = oServiceParams;
1015
-
1016
- if (!oApplicationContainer.getIsKeepAlive()) {
1017
- oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.GUI_V1, true);
1018
- oCurrentApplication = {
1019
- appId: oApplicationContainer.getId(),
1020
- stt: "loading",
1021
- container: oApplicationContainer,
1022
- meta: undefined,
1023
- app: undefined
1024
- };
1025
- } else {
1026
- oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.GUI_V1_KEEP_ALIVE, true);
916
+
917
+ if (oServiceDef.oRequestCalls) {
918
+ Object.keys(oServiceDef.oRequestCalls).forEach((sInterface) => {
919
+ const oInterface = oServiceDef.oRequestCalls[sInterface];
920
+ const sServiceRequest = `${sService}.${sInterface}`;
921
+ const oTarget = {};
922
+
923
+ if (deepEqual(oInterface.distributionType, ["all"])) {
924
+ oTarget.ignoreCapabilities = true;
925
+ } else if (oInterface.distributionType) {
926
+ Log.error("Unsupported distribution type", oInterface.distributionType, "sap.ushell.components.applicationIntegration.AppLifeCycle");
1027
927
  }
1028
- return {};
1029
- }
928
+
929
+ if (oInterface.isActiveOnly) {
930
+ oTarget.activeOnly = true;
931
+ }
932
+
933
+ PostMessageManager.setDistributionPolicy(sServiceRequest, oTarget);
934
+ });
1030
935
  }
1031
- }
936
+ });
1032
937
  }
938
+ );
939
+ };
1033
940
 
1034
- });
941
+ this._waitForPluginsAndReplayPostMessages = async function () {
942
+ const PluginManager = await Container.getServiceAsync("PluginManager");
943
+ const oPluginDeferred = PluginManager.getPluginLoadingPromise("RendererExtensions");
1035
944
 
1036
- //TODO add unsubscribe
1037
- EventBus.getInstance().subscribe("sap.ushell", "appComponentLoaded", this._onComponentCreated, this);
1038
- EventBus.getInstance().subscribe("sap.ushell", "getAppLifeCycle", this._onGetMe, this);
945
+ await ushellUtils.promisify(oPluginDeferred);
1039
946
 
1040
- this._addEvents();
947
+ PostMessageManager.replayStoredMessages();
1041
948
  };
1042
949
 
1043
950
  /**
@@ -1054,14 +961,14 @@ sap.ui.define([
1054
961
  return;
1055
962
  }
1056
963
  if (oHashChange.mParameters && oShellNavigationInternal.hashChanger.isInnerAppNavigation(oHashChange.mParameters.newHash, oHashChange.mParameters.oldHash)) {
1057
- PostMessageUtils.postMessageToMultipleIframes("sap.ushell.appRuntime", "innerAppRouteChange", {
964
+ PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.innerAppRouteChange", {
1058
965
  oHash: oHashChange.mParameters
1059
- });
966
+ }, false);
1060
967
  }
1061
968
 
1062
- PostMessageUtils.postMessageToMultipleIframes("sap.ushell.appRuntime", "hashChange", {
969
+ PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.hashChange", {
1063
970
  sHash: oHashChange.mParameters.fullHash
1064
- });
971
+ }, false);
1065
972
  });
1066
973
  };
1067
974
 
@@ -1075,13 +982,8 @@ sap.ui.define([
1075
982
  /**
1076
983
  * @param {string} sId
1077
984
  */
1078
- this._removeApplicationContainerFromViewPort = function (sId) {
1079
- const oBlueBox = BlueBoxHandler.getBlueBoxById(sId);
1080
- const bIsStateful = BlueBoxHandler.isStatefulContainer(oBlueBox);
1081
-
1082
- if (!bIsStateful) {
1083
- oViewPortContainer.removeCenterViewPort(sId, true);
1084
- }
985
+ this._removeApplicationContainerFromViewPort = function (oApplicationContainer) {
986
+ oViewPortContainer.removeCenterViewPort(oApplicationContainer.getId(), true);
1085
987
  };
1086
988
 
1087
989
  /**
@@ -1117,12 +1019,6 @@ sap.ui.define([
1117
1019
  return oCurrentApplication;
1118
1020
  };
1119
1021
 
1120
- /**
1121
- */
1122
- this.unsetCurrentApplication = function () {
1123
- oCurrentApplication = {};
1124
- };
1125
-
1126
1022
  /**
1127
1023
  * @param {boolean} bIsFull
1128
1024
  */
@@ -1183,8 +1079,8 @@ sap.ui.define([
1183
1079
  *
1184
1080
  * @private
1185
1081
  */
1186
- this._activeContainer = function (oTargetApplicationContainer) {
1187
- BlueBoxHandler.forEach((oApplicationContainer) => {
1082
+ this._setApplicationContainerActive = function (oTargetApplicationContainer) {
1083
+ ApplicationContainerCache.forEach((oApplicationContainer) => {
1188
1084
  if (oApplicationContainer && oApplicationContainer !== oTargetApplicationContainer) {
1189
1085
  try {
1190
1086
  Log.info(`Deactivating container ${oApplicationContainer.getId()}`);
@@ -1201,19 +1097,107 @@ sap.ui.define([
1201
1097
  }
1202
1098
  };
1203
1099
 
1100
+ /**
1101
+ * @param {*} sStorageAppId
1102
+ * @param {*} oApplicationContainer
1103
+ * @param {*} oResolvedHashFragment
1104
+ * @param {*} oParsedShellHash
1105
+ * @param {*} bWasKeptAlive
1106
+ * @returns
1107
+ */
1108
+ this._openApp = async function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, bWasKeptAlive) {
1109
+ const bWasFetchedFromCache = oApplicationContainer.getIsFetchedFromCache();
1110
+ if (bWasKeptAlive && bWasFetchedFromCache && StatefulContainerV2Handler.isStatefulContainerSupportingKeepAlive(oApplicationContainer)) {
1111
+ return StatefulContainerV2Handler.restoreAppWithinSameFrame(
1112
+ oApplicationContainer,
1113
+ oResolvedHashFragment.url,
1114
+ sStorageAppId,
1115
+ oResolvedHashFragment
1116
+ );
1117
+ }
1118
+
1119
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
1120
+ if (bWasFetchedFromCache && oApplicationContainer.getCurrentAppId() === sStorageAppId) {
1121
+ // application is already running within container
1122
+ return;
1123
+ }
1124
+ const oResult = await StatefulContainerV2Handler.createApp(
1125
+ oApplicationContainer,
1126
+ oResolvedHashFragment.url,
1127
+ sStorageAppId,
1128
+ oResolvedHashFragment
1129
+ );
1130
+ if (oResult?.deletedKeepAliveId) {
1131
+ await this._destroyApplication(oResult.deletedKeepAliveId, oApplicationContainer);
1132
+ }
1133
+ return;
1134
+ }
1135
+
1136
+ if (oApplicationContainer.getStatefulType() === StatefulType.ContractV1) {
1137
+ if (bWasFetchedFromCache && oApplicationContainer.getCurrentAppId() === sStorageAppId) {
1138
+ // application is already running within container
1139
+ return;
1140
+ }
1141
+ await StatefulContainerV1Handler.createApp(
1142
+ oApplicationContainer,
1143
+ sStorageAppId,
1144
+ oResolvedHashFragment
1145
+ );
1146
+ return;
1147
+ }
1148
+
1149
+ // for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1150
+ // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1151
+ const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
1152
+ const bIsUI5App = !!sTargetUi5ComponentName;
1153
+
1154
+ if (bIsUI5App && !bWasKeptAlive) { // UI5 Application
1155
+ // happens for direct app start scenario on the abap platform (sap/ushell_abap/bootstrap/evo/boottask)
1156
+ const bComponentLoadedInDirectAppStart = !!oResolvedHashFragment?.componentHandle;
1157
+ if (!bComponentLoadedInDirectAppStart) {
1158
+ AppConfiguration.setApplicationInInitMode();
1159
+
1160
+ await EmbeddedUI5Handler.createApp(oApplicationContainer, oResolvedHashFragment, oParsedShellHash);
1161
+
1162
+ // todo: [FLPCOREANDUX-10024] check whether the issue still persists
1163
+ // the activation of user activity logging must be done after the app component is fully loaded
1164
+ // otherwise the module loading sequence causes race conditions on firefox
1165
+ const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
1166
+ if (bContactSupportEnabled) {
1167
+ ushellUtils.awaitTimeout(0)
1168
+ .then(() => {
1169
+ return ushellUtils.requireAsync(["sap/ushell/UserActivityLog"]);
1170
+ })
1171
+ .then(([UserActivityLog]) => {
1172
+ UserActivityLog.activate();
1173
+ });
1174
+ }
1175
+ } else {
1176
+ oApplicationContainer.setProperty("componentHandle", oResolvedHashFragment.componentHandle, true);
1177
+ }
1178
+
1179
+ // The trampoline application subsequently gets destroyed after it's used to enable the redirection.
1180
+ const sNavigationRedirectHash = await EmbeddedUI5Handler.getNavigationRedirectHash(oApplicationContainer);
1181
+ if (typeof sNavigationRedirectHash === "string") {
1182
+ await this._destroyApplication(sStorageAppId, oApplicationContainer);
1183
+ return sNavigationRedirectHash;
1184
+ }
1185
+ }
1186
+ };
1187
+
1204
1188
  /**
1205
1189
  * @param {object} oApplicationContainer
1206
- * @param {object} oApplication
1190
+ * @param {object} oResolvedHashFragment
1207
1191
  * @param {function} fnOnAfterRendering
1208
1192
  */
1209
- this._publishNavigationStateEvents = function (oApplicationContainer, oApplication, fnOnAfterRendering) {
1193
+ this._publishNavigationStateEvents = function (oApplicationContainer, oResolvedHashFragment, oMetadata) {
1210
1194
  //after the app container is rendered, publish an event to notify
1211
1195
  //that an app was opened
1212
1196
  const sId = oApplicationContainer.getId ? oApplicationContainer.getId() : "";
1213
- const appMetaData = AppConfiguration.getMetadata();
1214
- const sIcon = appMetaData.icon;
1215
- const sTitle = appMetaData.title;
1197
+ const sIcon = oMetadata.icon;
1198
+ const sTitle = oMetadata.title;
1216
1199
 
1200
+ const fnOnAfterRendering = this._onAppAfterRendering.bind(this, oResolvedHashFragment);
1217
1201
  //Attach an event handler which will be called onAfterRendering
1218
1202
  oApplicationContainer.addEventDelegate({ onAfterRendering: fnOnAfterRendering });
1219
1203
 
@@ -1232,7 +1216,7 @@ sap.ui.define([
1232
1216
  setTimeout(() => {
1233
1217
  // TODO: do not mutate an internal structure (in a Timeout!),
1234
1218
  // create a new object
1235
- const oEventData = deepExtend({}, oApplication);
1219
+ const oEventData = deepExtend({}, oResolvedHashFragment);
1236
1220
  delete oEventData.componentHandle;
1237
1221
  oEventData.appId = sId;
1238
1222
  oEventData.usageIcon = sIcon;
@@ -1244,7 +1228,7 @@ sap.ui.define([
1244
1228
  // the former code leaked an *internal* data structure, making it part of a public API
1245
1229
  // restrict hte public api to the minimal set of precise documented properties which can be retained under
1246
1230
  // under future evolutions
1247
- const oPublicEventData = that._publicEventDataFromResolutionResult(oApplication);
1231
+ const oPublicEventData = that._publicEventDataFromResolutionResult(oResolvedHashFragment);
1248
1232
  //publish the event externally
1249
1233
  RendererUtils.publishExternalEvent("appClosed", oPublicEventData);
1250
1234
  };
@@ -1269,91 +1253,15 @@ sap.ui.define([
1269
1253
  };
1270
1254
 
1271
1255
  /**
1272
- * @param {string} sAppId
1273
- * @param {string} sShellHash
1274
- * @param {boolean} bNavigationFromHome
1275
- * @param {boolean} bNavigationWithInnerAppRoute
1276
- * @returns {object}
1256
+ * @param {*} oResolvedHashFragment
1257
+ * @returns
1277
1258
  */
1278
- this._getInMemoryInstance = function (sAppId, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1279
- const sStorageAppId = `application-${sAppId}`;
1280
- const oAppEntry = Storage.get(sStorageAppId);
1281
-
1282
- //remove application from cache if has different parameters
1283
- if (oAppEntry) {
1284
- //Special case - when we're navigating from homepage to an application with state, when keep-alive
1285
- //is active. In this case, although keep alive is active we need to destroy the application
1286
- //ans re-open it.
1287
- const bNavigatingFromHomeWithInnerAppRoute = bNavigationFromHome && bNavigationWithInnerAppRoute;
1288
- // todo: [FLPCOREANDUX-10024] Add logging
1289
-
1290
- const bSameParameters = oAppEntry.shellHash === sShellHash;
1291
- if (bSameParameters && !bNavigatingFromHomeWithInnerAppRoute) {
1292
- return {
1293
- destroyApplication: false,
1294
- appId: oAppEntry.appId,
1295
- container: oAppEntry.container
1296
- };
1297
- }
1298
- return {
1299
- destroyApplication: true,
1300
- appId: oAppEntry.appId,
1301
- container: oAppEntry.container
1302
- };
1303
- }
1304
-
1305
- return {
1306
- destroyApplication: true,
1307
- appId: undefined,
1308
- container: undefined
1309
- };
1310
- };
1311
-
1312
- /**
1313
- * @param {boolean} bNewlyCreatedApplicationContainer
1314
- * @param {boolean} bShouldBeCached
1315
- * @param {string} sStorageAppId
1316
- * @param {object} oApplicationContainer
1317
- * @param {object} oResolvedHashFragment
1318
- * @param {string} oParsedShellHash
1319
- * @param {string} sKeepAliveMode
1320
- * @param {boolean} bNavigationInSameStatefulContainer
1321
- * @param {boolean} bReturnedFromKeepAlivePoolFLPV2
1322
- * @returns {Promise} Resolves when the stateful app was opened.
1323
- */ // eslint-disable-next-line max-len
1324
- this._handleOpenStateful = async function (bNewlyCreatedApplicationContainer, bShouldBeCached, sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bNavigationInSameStatefulContainer, bReturnedFromKeepAlivePoolFLPV2) {
1325
- oApplicationContainer.setProperty("iframeReusedForApp", true, true);
1326
- try {
1327
- if (Storage.get(sStorageAppId) && !bNewlyCreatedApplicationContainer && !bReturnedFromKeepAlivePoolFLPV2) {
1328
- await BlueBoxHandler.statefulRestoreKeepAliveApp(oApplicationContainer, oResolvedHashFragment.url, sStorageAppId, oResolvedHashFragment, bNavigationInSameStatefulContainer);
1329
- } else {
1330
- const oResult = await BlueBoxHandler.statefulCreateApp(oApplicationContainer, oResolvedHashFragment.url, sStorageAppId, oResolvedHashFragment, bNavigationInSameStatefulContainer);
1331
- if (oResult?.deletedKeepAliveId) {
1332
- Storage.removeById(oResult.deletedKeepAliveId);
1333
- }
1334
-
1335
- //creating a new application check if needs to be keep (for the keep alive), and if so store the application
1336
- if (bShouldBeCached && !Storage.get(sStorageAppId)) {
1337
- this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
1338
- }
1339
- }
1340
-
1341
- Application.setActiveAppContainer(oApplicationContainer);
1342
-
1343
- Log.info("New application context opened successfully in an existing transaction UI session.");
1344
- } catch (vError) {
1345
- Log.error(vError?.message || vError);
1346
- // do not bubble up the error
1347
- }
1348
- };
1349
-
1350
- this._isFullWidth = function (oResolvedHashFragment) {
1259
+ this._isFullWidth = function (oResolvedHashFragment, oMetadata) {
1351
1260
  let bFullWidth;
1352
1261
  const sAppType = this._calculateAppType(oResolvedHashFragment);
1353
1262
  const bDefaultFullWidth = ApplicationType.getDefaultFullWidthSetting(sAppType);
1354
1263
 
1355
1264
  const bFullWidthCapability = oResolvedHashFragment.appCapabilities?.fullWidth;
1356
- const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
1357
1265
  //Here there's a double check for the fullwidth - once as a type of boolean and one as a string.
1358
1266
  //This is because we found that developers configured this variable in the manifest also as a string,
1359
1267
  //so the checks of the oMetadata and the oResolvedHashFragment are to avoid regression with the use of this field.
@@ -1374,213 +1282,94 @@ sap.ui.define([
1374
1282
  };
1375
1283
 
1376
1284
  /**
1377
- * formerly known as "handleControl"
1378
- * @param {string} sAppId
1379
- * @param {object} oParsedShellHash
1380
- * @param {object} oResolvedHashFragment
1381
- * @param {string} sOldShellHash
1382
- * @param {boolean} bNavigationFromHome
1383
- * @returns {Promise} Resolves when the control is handled
1285
+ * @param {*} sAppId
1286
+ * @param {*} oParsedShellHash
1287
+ * @param {*} oResolvedHashFragment
1288
+ * @param {*} bNavigationFromHome
1289
+ * @param {*} bNavigationWithInnerAppRoute
1290
+ * @returns
1384
1291
  */
1385
- this.handleCreateApplicationContainer = async function (sAppId, oParsedShellHash, oResolvedHashFragment, sOldShellHash, bNavigationFromHome) {
1386
- let bReturnedFromKeepAlivePoolFLPV2 = false;
1387
- let bReturnedFromKeepAlivePoolGuiV1 = false;
1292
+ this.createApplication = async function (sAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1388
1293
  const sStorageAppId = `application-${sAppId}`;
1389
- let bNewlyCreatedApplicationContainer = false;
1390
- let bNavigationInSameStatefulContainer = false;
1391
- let oApplicationContainer,
1392
- bReuseStatefulContainer,
1393
- oTargetAppContainer,
1394
- iLastValidTimeDelta,
1395
- bKeptAliveApp,
1396
- oCachedEntry;
1397
-
1398
- //get the potential target stateful container and check if it's valid. if not, destroy it
1399
- //before we try to create the new application
1400
- oTargetAppContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
1401
- // todo: [FLPCOREANDUX-10024] DELETES iframe
1402
- if (BlueBoxHandler.isStatefulContainer(oTargetAppContainer)) {
1403
- iLastValidTimeDelta = new Date().getTime() - oTargetAppContainer.getIsIframeValidTime().time;
1404
- if ((BlueBoxHandler.isIframeIsValidSupported(oTargetAppContainer) && iLastValidTimeDelta >= 3500) ||
1405
- oTargetAppContainer.getIsInvalidIframe()) {
1406
- const sReason = oTargetAppContainer.getIsInvalidIframe() ? `iframe did not ping in the last '${iLastValidTimeDelta}' ms` : "iframe is in invalid state";
1407
- Log.warning(
1408
- `Destroying stateful container iframe due to unresponsiveness (${oTargetAppContainer.getId()})`,
1409
- `reason: ${sReason}`,
1410
- "sap.ushell.components.applicationIntegration.AppLifeCycle"
1411
- );
1412
1294
 
1413
- // todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
1414
- BlueBoxHandler.removeCapabilities(oTargetAppContainer);
1415
- await this._destroyApplication(sStorageAppId, oTargetAppContainer);
1416
- BlueBoxHandler.deleteBlueBoxByUrl(oResolvedHashFragment.url);
1417
- oTargetAppContainer = undefined;
1418
- //in this case we do not care about the old application intent as it is currently relevant only when
1419
- //trying to open app in the same current stateful container
1420
- sOldShellHash = undefined;
1421
- }
1422
- }
1295
+ await this._cleanupBeforeNewApp(
1296
+ sAppId,
1297
+ oParsedShellHash,
1298
+ oResolvedHashFragment,
1299
+ bNavigationFromHome,
1300
+ bNavigationWithInnerAppRoute
1301
+ );
1423
1302
 
1424
- //we will close the application we are leaving when:
1425
- // 1. the application is running in a stateful container
1426
- // 2. this is a legacy keep alive app, and we navigate back (this in order to return the container to the pool
1427
- // of containers to it can be used again for the upcoming opened app)
1428
- // todo: [FLPCOREANDUX-10024] DELETES more iframe
1429
- if (!bNavigationFromHome) {
1430
- const oCurrentAppContainer = this.getCurrentApplication()?.container;
1431
- bReuseStatefulContainer = BlueBoxHandler.isStatefulContainer(oCurrentAppContainer);
1432
- // todo [FLPCOREANDUX-10024] why is id required here?
1433
- const bSourceIsKeepAliveFromPool = oCurrentAppContainer && !!oCurrentAppContainer.getCurrentAppId() && BlueBoxHandler.isStatefulContainerInKeepAlivePool(oCurrentAppContainer);
1434
- if (bReuseStatefulContainer || bSourceIsKeepAliveFromPool) {
1435
- await this._handleExitApplication(oCurrentAppContainer, false, false);
1436
- if (oCurrentAppContainer === oTargetAppContainer) {
1437
- bNavigationInSameStatefulContainer = true;
1438
- }
1439
- }
1440
- }
1303
+ this._sendFocusBackToShell();
1304
+ this._announceAppOpening(oResolvedHashFragment);
1441
1305
 
1442
- //now, we can open the new application
1443
1306
  const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
1444
- const bShouldBeCached = !!sKeepAliveMode;
1445
-
1446
- oApplicationContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
1447
- bReuseStatefulContainer = BlueBoxHandler.isStatefulContainer(oApplicationContainer);
1448
- // todo: [FLPCOREANDUX-10024] GETTER of innerControl for keep alive / stateful
1449
- if (!bReuseStatefulContainer) {
1450
- // only clear oApplicationContainer in case it is not a navigation from an application to the same application
1451
- if (oCurrentApplication && sStorageAppId !== oCurrentApplication.appId) {
1452
- oApplicationContainer = undefined;
1453
- }
1307
+ const bShouldBeCached = sKeepAliveMode !== KEEP_ALIVE_MODES.False;
1454
1308
 
1455
- oCachedEntry = Storage.get(sStorageAppId);
1456
- oApplicationContainer = oCachedEntry?.container;
1309
+ const oApplicationContainer = this._createOrReuseApplicationContainer(sStorageAppId, oResolvedHashFragment, bShouldBeCached);
1457
1310
 
1458
- if (oApplicationContainer && bShouldBeCached) {
1459
- bKeptAliveApp = true;
1460
- }
1461
- }
1462
-
1463
- // todo: [FLPCOREANDUX-10024] CREATE / SETTER of currentApplication
1464
- if (bReuseStatefulContainer) {
1465
- if (!oApplicationContainer) {
1466
- oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
1311
+ // check after cleanup, but before creating the storage entry
1312
+ const bWasKeptAlive = !!KeepAliveApps.get(sStorageAppId);
1467
1313
 
1468
- // todo: [FLPCOREANDUX-10024] the following should be obsolete
1469
- const oStorageEntry = Storage.get(oApplicationContainer.getId());
1470
- if (oStorageEntry) {
1471
- oCurrentApplication = oStorageEntry;
1472
- }
1473
-
1474
- bNewlyCreatedApplicationContainer = true;
1475
- }
1476
- } else if (oApplicationContainer && !bShouldBeCached && BlueBoxHandler.getStatefulContainerType(oResolvedHashFragment.url, true) !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
1477
- //this case this controller can't be reused and we need it to be embed, so delete it.
1478
- await this._destroyApplication(oApplicationContainer.getId(), oApplicationContainer);
1479
-
1480
- // The immediately following method call internally calls
1481
- // `this.oViewPortContainer.addCenterViewPort(oApplicationContainer)`
1482
- // when Gui V1 Stateful Container is true, and in that case
1483
- // `oApplicationContainer` will be the component control of an existing session.
1484
- oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
1485
- } else if (!oApplicationContainer) {
1486
- // The immediately following method call internally calls
1487
- // `this.oViewPortContainer.addCenterViewPort(oApplicationContainer)`
1488
- // when Gui V1 Stateful Container is true, and in that case
1489
- // `oApplicationContainer` will be the component control of an existing session.
1490
- oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
1491
-
1492
- //if we got an iframe from cache, simulate stateful container
1493
- //open that should happen later here
1494
- if (oApplicationContainer.getIsFetchedFromCache()) {
1495
- if (oApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1_KEEP_ALIVE) {
1496
- bReturnedFromKeepAlivePoolGuiV1 = true;
1497
- } else {
1498
- bReuseStatefulContainer = true;
1499
- bReturnedFromKeepAlivePoolFLPV2 = true;
1500
- }
1501
- }
1502
- }
1503
-
1504
- // todo: [FLPCOREANDUX-10024] rework empty applicationContainer case
1505
- // fallback?
1506
-
1507
- await ushellUtils.promisify(oApplicationContainer.getDeffedControlCreation());
1508
-
1509
- //here, we simply show (turning to visible) the container of the new opened application in case it is not stateful container
1510
- //and not old gui v1 stateful
1511
- if (oApplicationContainer.getStatefulType() !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1 && !bReuseStatefulContainer) {
1512
- if (bKeptAliveApp) {
1513
- EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
1514
- }
1515
- const oStorageEntry = Storage.get(oApplicationContainer.getId());
1516
- if (oStorageEntry) {
1517
- oCurrentApplication = oStorageEntry;
1518
- }
1519
-
1520
- if (bKeptAliveApp) {
1521
- EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1522
- }
1314
+ // Set current application
1315
+ if (bShouldBeCached) {
1316
+ oCurrentApplication = this._addStorageEntry(
1317
+ sStorageAppId,
1318
+ oApplicationContainer,
1319
+ oResolvedHashFragment,
1320
+ oParsedShellHash,
1321
+ sKeepAliveMode
1322
+ );
1323
+ } else {
1324
+ // create application that is not persisted and not cached
1325
+ oCurrentApplication = {
1326
+ appId: sStorageAppId,
1327
+ stt: "loading",
1328
+ container: oApplicationContainer,
1329
+ meta: undefined, // is set after application start
1330
+ app: undefined
1331
+ };
1523
1332
  }
1524
1333
 
1525
- // Assuming a previously existing TR container existed and is now
1526
- // going to be reused, we prompt the container to load the new application context.
1527
-
1528
- // SAP GUI is sending post messages for back navigation as soon the create application event is sent to the iframe,
1529
- // so this makes sure the container is active before sending the event.
1530
- // For WD applications, the application is active only after the application is created.
1531
- // So it is not navigated twice.
1532
- if (oApplicationContainer.getApplicationType() === ApplicationType.TR.type) {
1533
- this._activeContainer(oApplicationContainer);
1534
- }
1334
+ ushellUtils.setPerformanceMark("FLP - addAppContainer");
1535
1335
 
1536
- const oStorageEntry = Storage.get(sStorageAppId);
1336
+ // restore the app info parameters before activating the application container
1337
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
1537
1338
  if (oStorageEntry) {
1538
1339
  AppInfoParameters.restore(oStorageEntry);
1539
1340
  } else {
1540
1341
  AppInfoParameters.flush();
1541
1342
  }
1542
1343
 
1344
+ // enable the PostMessageAPI for the application
1345
+ this._setApplicationContainerActive(oApplicationContainer);
1543
1346
 
1544
- //here, we create the application in case this is a stateful container (meaning, using the existing iframe)
1545
- if (bReuseStatefulContainer) {
1546
- //for scube - make sure the container is active before we open the app
1547
- //to allow post messages form the iframe to flp that are sent
1548
- //as part of the target resolution process
1549
- if (oResolvedHashFragment.appCapabilities?.appFrameworkId === "UI5") {
1550
- oApplicationContainer.setProperty("active", true, true);
1551
- }
1552
- // eslint-disable-next-line max-len
1553
- await this._handleOpenStateful(bNewlyCreatedApplicationContainer, bShouldBeCached, sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bNavigationInSameStatefulContainer, bReturnedFromKeepAlivePoolFLPV2);
1347
+ const sNavigationRedirectHash = await this._openApp(
1348
+ sStorageAppId,
1349
+ oApplicationContainer,
1350
+ oResolvedHashFragment,
1351
+ oParsedShellHash,
1352
+ bWasKeptAlive
1353
+ );
1554
1354
 
1555
- } else if (oApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1 || bReturnedFromKeepAlivePoolGuiV1) {
1556
- //here, we create the application in case this is old gui v1 stateful
1557
- await WebGUIStatefulHandler.guiStatefulCreateApp(this, oApplicationContainer, oResolvedHashFragment);
1355
+ if (typeof sNavigationRedirectHash === "string") {
1356
+ // do not add the deleted application to the view port
1357
+ return sNavigationRedirectHash;
1558
1358
  }
1559
1359
 
1560
- //for case of stateful container or gui v1 stateful, show the application view (make it visible)
1360
+ // todo: [FLPCOREANDUX-10024] fix this
1361
+ // initialize now because the app is required for additional information
1362
+ this._initializeAppWithMetadata(oApplicationContainer, oResolvedHashFragment);
1363
+
1364
+ // todo: [FLPCOREANDUX-10024] fix this
1365
+ // finally add the application container to the view port (triggers render call)
1366
+ // do not add it earlier to prevent the application container
1367
+ // from creating the component before this process is done
1368
+ this._addApplicationContainerToViewPort(oApplicationContainer);
1561
1369
  ushellUtils.setPerformanceMark("FLP -- centerViewPort");
1562
- if (oApplicationContainer.getApplicationType() !== ApplicationType.TR.type) {
1563
- // Activate container before showing it (start reacting to postMessage calls)
1564
- this._activeContainer(oApplicationContainer);
1565
- }
1566
1370
 
1567
- /*
1568
- * Workaround:
1569
- * The oCurrentApplication object does not reflect the currently opened application.
1570
- * This leads to store/restore calls on the wrong application.
1571
- * Create application that is not persisted and not cashed as a fallback.
1572
- *
1573
- * This issue occurs for iframe applications reusing the iframe.
1574
- */
1575
- if (oCurrentApplication.appId !== sStorageAppId) {
1576
- oCurrentApplication = {
1577
- appId: sStorageAppId,
1578
- stt: "loading",
1579
- container: oApplicationContainer,
1580
- meta: AppConfiguration.getMetadata(oResolvedHashFragment),
1581
- app: undefined
1582
- };
1583
- }
1371
+ EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1372
+ Log.info("app was opened");
1584
1373
  };
1585
1374
 
1586
1375
  /**
@@ -1611,7 +1400,7 @@ sap.ui.define([
1611
1400
  */
1612
1401
  this.switchViewState = function (sLaunchpadState, sAppId, sAppType, bIsExplaceNavigation) {
1613
1402
  // Store state before creating a new one
1614
- const oFromStorageEntry = Storage.get(oCurrentApplication.appId);
1403
+ const oFromStorageEntry = KeepAliveApps.get(oCurrentApplication.appId);
1615
1404
  if (!oFromStorageEntry) {
1616
1405
  // We have to destroy managed queue BEFORE we're applying the pending changes
1617
1406
  StateManager.destroyManagedControls();
@@ -1633,7 +1422,7 @@ sap.ui.define([
1633
1422
 
1634
1423
  // Restore state if it already exists
1635
1424
  const sToStorageAppId = `application-${sAppId}`;
1636
- const oToStorageEntry = Storage.get(sToStorageAppId);
1425
+ const oToStorageEntry = KeepAliveApps.get(sToStorageAppId);
1637
1426
  if (oToStorageEntry) {
1638
1427
  KeepAlive.restore(oToStorageEntry);
1639
1428
  } else {
@@ -1644,13 +1433,6 @@ sap.ui.define([
1644
1433
  StateManager.applyStalledChanges();
1645
1434
  };
1646
1435
 
1647
- /**
1648
- * @param {object} oCommunicationHandler
1649
- */
1650
- this.registerShellCommunicationHandler = function (oCommunicationHandler) {
1651
- Application.registerShellCommunicationHandler(oCommunicationHandler);
1652
- };
1653
-
1654
1436
  /**
1655
1437
  * @returns {boolean} Whether the floating container is docked.
1656
1438
  */
@@ -1705,48 +1487,24 @@ sap.ui.define([
1705
1487
  }, 0);
1706
1488
  };
1707
1489
 
1708
- /**
1709
- * @param {string} sAppId
1710
- * @param {object} oParsedShellHash
1711
- * @param {object} oResolvedHashFragment
1712
- * @param {string} sShellHash
1713
- * @returns {object} The app container.
1714
- */
1715
- this._createApplicationContainer = async function (sAppId, oParsedShellHash, oResolvedHashFragment) {
1716
- const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment, oResolvedHashFragment?.sFixedShellHash);
1717
- const bFullWidth = this._isFullWidth(oResolvedHashFragment);
1718
-
1719
- /*
1720
- * The external navigation mode in the resolution result is calculated
1721
- * statically, and indicates a future state. It currently answers the
1722
- * question: "is the application going to be opened explace?".
1723
- *
1724
- * The target navigation mode, instead, answers the question: "was
1725
- * the application opened explace?".
1726
- *
1727
- * We need to have this logic, because embedded applications do not
1728
- * check the coldstart condition.
1729
- */
1730
- oResolvedHashFragment.targetNavigationMode = ushellUtils.isColdStart() ? "explace" : "inplace";
1731
- oResolvedHashFragment.shellUIService = oGlobalShellUIService.getInterface();
1732
-
1733
- // send focus back to shell for new ApplicationContainers
1734
- this._sendFocusBackToShell();
1735
-
1736
- this._announceAppOpening(oResolvedHashFragment);
1490
+ this._initializeApplicationContainer = function (oApplicationContainer, oResolvedHashFragment) {
1491
+ if (ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId())) {
1492
+ oApplicationContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
1493
+ }
1494
+ };
1737
1495
 
1738
- await this._openApp(sAppId, oResolvedHashFragment, oParsedShellHash);
1739
- const oApplicationContainer = oCurrentApplication.container;
1496
+ this._initializeAppWithMetadata = function (oApplicationContainer, oResolvedHashFragment) {
1497
+ const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment, oResolvedHashFragment?.sFixedShellHash);
1740
1498
 
1741
- const bContainerFromCachePool = oApplicationContainer.getIsFetchedFromCache();
1499
+ oCurrentApplication.meta = oMetadata;
1742
1500
 
1743
- if (!bContainerFromCachePool) {
1744
- this._publishNavigationStateEvents(oApplicationContainer, oResolvedHashFragment, this.onAppAfterRendering.bind(this, oResolvedHashFragment));
1501
+ // ApplicationContainer is newly created
1502
+ if (!oApplicationContainer.getIsFetchedFromCache()) {
1503
+ this._publishNavigationStateEvents(oApplicationContainer, oResolvedHashFragment, oMetadata);
1745
1504
 
1746
- if (ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId())) {
1747
- oApplicationContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
1748
- }
1505
+ oApplicationContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
1749
1506
 
1507
+ const bFullWidth = this._isFullWidth(oResolvedHashFragment, oMetadata);
1750
1508
  if (!bFullWidth) {
1751
1509
  oApplicationContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
1752
1510
  }
@@ -1760,115 +1518,124 @@ sap.ui.define([
1760
1518
  oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1761
1519
  }
1762
1520
 
1763
- oApplicationContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
1764
-
1765
1521
  AppMeta._applyContentDensityByPriority();
1766
-
1767
- // Add inner control for next request
1768
- this._addApplicationContainerToViewPort(oApplicationContainer);
1769
1522
  }
1770
-
1771
- ushellUtils.setPerformanceMark("FLP - addAppContainer");
1772
-
1773
- return oApplicationContainer;
1774
1523
  };
1775
1524
 
1776
1525
  /**
1777
- * @param {string} sShellHash
1526
+ * - prevent duplicated ids in the viewport container.
1527
+ * - prevent reuse of stateful containers for different servers.
1528
+ * - destroy the keep alive app for certain navigation cases.
1529
+ * - destroy the app if the iframe is invalid/unresponsive.
1530
+ * - exit the current application if it is a stateful container.
1531
+ *
1532
+ * @param {string} sAppId
1533
+ * @param {string} oParsedShellHash
1778
1534
  * @param {object} oResolvedHashFragment
1779
1535
  * @param {boolean} bNavigationFromHome
1780
1536
  * @param {boolean} bNavigationWithInnerAppRoute
1781
1537
  */
1782
- this.handleBeforeCreateApp = async function (sShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1783
- const sIntent = UrlParsing.getBasicHash(sShellHash);
1784
- const bComponentLoaded = !!oResolvedHashFragment?.componentHandle;
1785
- // for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1786
- // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1787
- const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
1788
-
1789
- // handle special case when navigating from home to an application with state, when keep-alive is active
1790
- const oInMemoryApplicationInstance = this._getInMemoryInstance(sIntent, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute);
1791
-
1792
- if (!oInMemoryApplicationInstance.destroyApplication) {
1793
- // no destroy required
1794
-
1795
- } else if (bComponentLoaded || !sTargetUi5ComponentName) { // non UI5 Application
1796
- if ((
1797
- oResolvedHashFragment.applicationType === "URL"
1798
- || ushellUtils.isSAPLegacyApplicationType(oResolvedHashFragment.applicationType)
1799
- )
1800
- && oInMemoryApplicationInstance.destroyApplication
1801
- && oInMemoryApplicationInstance.appId
1802
- ) {
1803
- await this._destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
1804
- }
1538
+ this._cleanupBeforeNewApp = async function (sAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1539
+ // todo: [FLPCOREANDUX-10024] add staged logging for createApplication including the cleanup similar to CSTR
1540
+ // ====== Exit current iframe app ======
1541
+ /*
1542
+ * for stateful containers, we need to exit/close the current application BEFORE any
1543
+ * navigation in the viewportContainer
1544
+ */
1545
+ const oCurrentApplicationContainer = this.getCurrentApplication()?.container;
1546
+ const bIsReusableContainer = oCurrentApplicationContainer && oCurrentApplicationContainer.getStatefulType() !== StatefulType.NotSupported;
1547
+ if (bIsReusableContainer) {
1548
+ await this._handleExitApplication(oCurrentApplicationContainer, false);
1549
+ }
1805
1550
 
1806
- } else { // UI5 Application
1807
- await this._destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
1808
- const oApplicationContainer = this._getApplicationContainerFromViewPort(sIntent);
1551
+ const sStorageAppId = `application-${sAppId}`;
1552
+ const oStorageEntry = KeepAliveApps.get(sStorageAppId);
1553
+ const bTargetAppWasKeptAlive = !!oStorageEntry;
1554
+ // the appId on the storage entry and the appId on the application container might be different.
1555
+ const oStoredApplicationContainer = oStorageEntry?.container;
1809
1556
 
1810
- if (oApplicationContainer) {
1811
- this._removeApplicationContainerFromViewPort(oApplicationContainer.getId());
1812
- oApplicationContainer.destroy();
1557
+ // For SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1558
+ // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1559
+ const bIsUI5AppWithoutIframe = !!oResolvedHashFragment?.ui5ComponentName;
1560
+
1561
+ // ====== Handle special navigation scenarios for keep alive apps ======
1562
+ if (bTargetAppWasKeptAlive) {
1563
+ const sNewShellHash = `#${UrlParsing.constructShellHash(oParsedShellHash)}`;
1564
+ const oComparison = UrlParsing.compareHashes(sNewShellHash, oStorageEntry.shellHash);
1565
+ const bSameTarget = oComparison.sameIntent && oComparison.sameParameters;
1566
+
1567
+ // Case: different app
1568
+ if (!bSameTarget) {
1569
+ Log.warning(`The keepAlive app '${sStorageAppId}' has to be destroyed because of id clashes.`);
1570
+ await this._destroyApplication(sStorageAppId, oStoredApplicationContainer);
1571
+
1572
+ // Case: Navigating from homepage to a keepAlive application via deep link (bookmark).
1573
+ // In this case, although keepAlive is active we need to destroy the application and re-open it.
1574
+ } else if (bNavigationFromHome && bNavigationWithInnerAppRoute) {
1575
+ Log.warning(`The keepAlive app '${sStorageAppId}' has to be destroyed because of a bookmark start.`);
1576
+ await this._destroyApplication(sStorageAppId, oStoredApplicationContainer);
1813
1577
  }
1814
1578
 
1815
- // close all keep alive apps with the same component name
1816
- await this._closeKeepAliveApps((oStorageEntry) => oStorageEntry.ui5ComponentName === oResolvedHashFragment.ui5ComponentName);
1579
+ // => we are navigating to the right keep alive app, so we keep it alive
1817
1580
  }
1818
- };
1819
1581
 
1820
- /**
1821
- * @param {string} sShellHash
1822
- * @param {object} oParsedShellHash
1823
- * @param {object} oResolvedHashFragment
1824
- * @param {boolean} bNavigationFromHome
1825
- * @param {boolean} bNavigationWithInnerAppRoute
1826
- */
1827
- this.handleCreateApp = async function (sShellHash, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1828
- const sIntent = UrlParsing.getBasicHash(sShellHash);
1829
- const bComponentLoaded = !!oResolvedHashFragment?.componentHandle;
1830
- // for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
1831
- // NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
1832
- const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
1833
- const bIsUI5App = !!sTargetUi5ComponentName;
1834
- const oInMemoryApplicationInstance = this._getInMemoryInstance(sIntent, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute);
1835
-
1836
- // todo: [FLPCOREANDUX-10024] checking on the destroyApplication flag is odd at this point
1837
- if (bIsUI5App && !bComponentLoaded && oInMemoryApplicationInstance.destroyApplication) { // UI5 Application
1838
- AppConfiguration.setApplicationInInitMode();
1839
-
1840
- /*
1841
- * normal application:
1842
- * fire the _prior.newUI5ComponentInstantion event before creating the new component instance, so that
1843
- * the ApplicationContainer can stop the router of the current app (avoid inner-app hash change notifications)
1844
- * NOTE: this dependency to the ApplicationContainer is not nice, but we need a fast fix now; we should refactor
1845
- * the ApplicationContainer code, because most of the logic has to be done by the shell controller;
1846
- * maybe rather introduce a utility module
1847
- */
1848
- EventBus.getInstance().publish("ApplicationContainer", "_prior.newUI5ComponentInstantion",
1849
- { name: sTargetUi5ComponentName }
1850
- );
1582
+ // ====== Ensure that no id clashes occur ======
1583
+ // Get the application container by its control id
1584
+ // This might be different from the appId
1585
+ const oApplicationContainer = this._getApplicationContainerFromViewPort(sAppId);
1586
+ const bMatchesTheKeepAliveApp = oApplicationContainer === oStoredApplicationContainer;
1587
+
1588
+ if (oApplicationContainer && !bMatchesTheKeepAliveApp) { // non kept alive app
1589
+ // Collision with a stateful container
1590
+ if (bIsUI5AppWithoutIframe) {
1591
+ Log.warning(`The app '${oApplicationContainer.getCurrentAppId()}' has to be destroyed because of id clashes.`);
1592
+ await this._destroyApplication(oApplicationContainer.getCurrentAppId(), oApplicationContainer, true); // force destroy
1851
1593
 
1852
- // load ui5 component via shell service; core-ext-light will be loaded as part of the asyncHints
1853
- await Container.getServiceAsync("Ui5ComponentLoader");
1854
-
1855
- /*
1856
- * FIXME: It would be better to call a function that simply
1857
- * and intentionally loads the dependencies of the UI5
1858
- * application, rather than creating a component and expecting
1859
- * the dependencies to be loaded as a side effect.
1860
- * Moreover, the comment reads "load ui5 component via shell service"
1861
- * however that is 'not needed' since the loaded component
1862
- * is not used. We should evaluate the possible performance
1863
- * hit taken due to this implicit means to an end.
1864
- */
1865
-
1866
- /*
1867
- * return value is unused.
1868
- * This is because oResolvedHashFragment contains the component handle already.
1869
- * See the preceding note in AppLifeCycle.createComponent.
1870
- */
1871
- await Application.createComponent(oResolvedHashFragment, oParsedShellHash);
1594
+ } else if (!ApplicationContainerCache.canBeReused(oApplicationContainer, oResolvedHashFragment.url)) {
1595
+
1596
+ // the application container found via id is from a different server
1597
+ Log.warning(`The app '${oApplicationContainer.getCurrentAppId()}' has to be destroyed because of id clashes.`);
1598
+ await this._destroyApplication(oApplicationContainer.getCurrentAppId(), oApplicationContainer, true); // force destroy
1599
+ }
1600
+ } // else means either no app container found or there is a stateful container with a matching url
1601
+
1602
+ // ====== Ensure that component name clashes are prevented ======
1603
+ if (bIsUI5AppWithoutIframe) {
1604
+ // close all keep alive apps with the same component name (except the current one)
1605
+ // otherwise we have clashes on the component name
1606
+ await this._destroyKeepAliveApps((oStorageEntry) => {
1607
+ return oStorageEntry.appId !== sStorageAppId
1608
+ && oStorageEntry.ui5ComponentName === oResolvedHashFragment.ui5ComponentName;
1609
+ }, true); // force destroy
1610
+ }
1611
+
1612
+ // ====== Handle invalid iframes ======
1613
+ // get the potential target stateful container and check if it's valid. if not, destroy it
1614
+ // before we try to create the new application within the same stateful container
1615
+ const oPotentialApplicationContainer = ApplicationContainerCache.findFreeContainerByUrl(oResolvedHashFragment.url);
1616
+ if (oPotentialApplicationContainer && oPotentialApplicationContainer.getStatefulType() === StatefulType.ContractV2) {
1617
+ let bIframeInvalid = false;
1618
+ let sReason;
1619
+ if (oPotentialApplicationContainer.getIsInvalidIframe()) {
1620
+ bIframeInvalid = true;
1621
+ sReason = "iframe is in invalid state";
1622
+
1623
+ } else if (StatefulContainerV2Handler.isIframeIsValidSupported(oPotentialApplicationContainer)) {
1624
+ const iLastValidTimeDelta = new Date().getTime() - oPotentialApplicationContainer.getIsIframeValidTime().time;
1625
+ bIframeInvalid = iLastValidTimeDelta >= iValidIframeTimeout;
1626
+ sReason = `iframe did not ping in the last '${iLastValidTimeDelta}' ms`;
1627
+ }
1628
+
1629
+ if (bIframeInvalid) {
1630
+ Log.warning(
1631
+ `Destroying stateful container iframe due to unresponsiveness (${oPotentialApplicationContainer.getId()})`,
1632
+ `reason: ${sReason}`,
1633
+ "sap.ushell.components.applicationIntegration.AppLifeCycle"
1634
+ );
1635
+
1636
+ // not able to exit gracefully, destroy the container directly forcefully
1637
+ return this._destroyApplication(sStorageAppId, oPotentialApplicationContainer, true); // force destroy
1638
+ }
1872
1639
  }
1873
1640
  };
1874
1641
 
@@ -1876,7 +1643,7 @@ sap.ui.define([
1876
1643
  *
1877
1644
  * @param {sap.ui.core.Component} oApplication
1878
1645
  */
1879
- this.onAppAfterRendering = function (oApplication) {
1646
+ this._onAppAfterRendering = function (oApplication) {
1880
1647
  // wrapped in setTimeout since "publish" is not async
1881
1648
  window.setTimeout(() => {
1882
1649
  EventBus.getInstance().publish("sap.ushell", "appOpened", oApplication);
@@ -1905,7 +1672,31 @@ sap.ui.define([
1905
1672
  this.setViewPortContainer = function (oNewViewPortContainer) {
1906
1673
  oViewPortContainer = oNewViewPortContainer;
1907
1674
  };
1675
+
1676
+ /**
1677
+ * Only for testing
1678
+ */
1679
+ this.reset = function () {
1680
+ oCurrentApplication = {};
1681
+ KeepAliveApps._clean();
1682
+ ApplicationContainerCache.destroyAllContainers();
1683
+ PostMessageManager.reset();
1684
+ };
1685
+
1686
+ this._setContainerReadyForReuse = function (oApplicationContainer) {
1687
+ if (!oApplicationContainer) {
1688
+ return;
1689
+ }
1690
+
1691
+ ApplicationContainerCache.setContainerReadyForReuse(oApplicationContainer, oApplicationContainer.getCurrentAppUrl());
1692
+
1693
+ oApplicationContainer.setProperty("isKeepAlive", false, true);
1694
+ oApplicationContainer.setProperty("currentAppUrl", "", true);
1695
+ oApplicationContainer.setProperty("isFetchedFromCache", false, true);
1696
+ };
1908
1697
  }
1909
1698
 
1699
+ AppLifeCycle.prototype.KeepAliveMode = KEEP_ALIVE_MODES;
1700
+
1910
1701
  return new AppLifeCycle();
1911
- }, /* bExport= */ true);
1702
+ });