@sapui5/sap.ushell 1.134.1 → 1.135.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (723) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +2 -1
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +29 -6
  4. package/src/main/js/sap/ushell/ApplicationType/UrlPostProcessing.js +3 -3
  5. package/src/main/js/sap/ushell/ApplicationType/guiResolution.js +185 -174
  6. package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +1 -1
  7. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +69 -61
  8. package/src/main/js/sap/ushell/EventHub.js +1 -3
  9. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  10. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
  11. package/src/main/js/sap/ushell/NWBCInterface.js +2 -2
  12. package/src/main/js/sap/ushell/SessionHandler.js +3 -3
  13. package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
  14. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  15. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
  16. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
  17. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
  18. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
  19. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
  20. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  21. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  22. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  23. package/src/main/js/sap/ushell/User.js +1 -1
  24. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  25. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  26. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +3 -11
  28. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +13 -4
  29. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  30. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  31. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.view.xml +4 -2
  33. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  34. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  35. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  36. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +12 -3
  41. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  44. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +11 -5
  51. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  61. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  62. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
  63. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
  67. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  68. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  69. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  70. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  71. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  72. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  73. package/src/main/js/sap/ushell/api/DWS.js +87 -0
  74. package/src/main/js/sap/ushell/api/Inbox.js +20 -4
  75. package/src/main/js/sap/ushell/api/common/ComponentInstantiation.js +36 -36
  76. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle/KeepAliveMode.js +43 -0
  77. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle.js +1667 -0
  78. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainer.js +136 -11
  79. package/src/main/js/sap/ushell/appIntegration/ApplicationContainerRenderer.js +54 -0
  80. package/src/main/js/sap/ushell/appIntegration/ApplicationHandle.js +57 -0
  81. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainer.js +102 -15
  82. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainerRenderer.js +26 -20
  83. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/KeepAliveApps.js +1 -1
  84. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/AppruntimeHandler.js +7 -5
  85. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/LifecycleHandler.js +17 -17
  86. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/MessageBrokerHandler.js +1 -1
  87. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/NWBCHandler.js +4 -4
  88. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ServiceHandler.js +4 -3
  89. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager.js +37 -20
  90. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessagePluginInterface.js +1 -1
  91. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainer.js +31 -8
  92. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainerRenderer.js +14 -1
  93. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/EmbeddedUI5Handler.js +10 -9
  94. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/StatefulContainerV1Handler.js +6 -19
  95. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/StatefulContainerV2Handler.js +20 -55
  96. package/src/main/js/sap/ushell/appRuntime/ui5/AppCommunicationMgr.js +1 -1
  97. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +15 -0
  98. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +1 -1
  99. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +1 -1
  100. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
  101. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +1 -1
  102. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +1 -1
  103. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +1 -1
  104. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
  105. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +1 -1
  106. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +1 -1
  107. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
  108. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
  109. package/src/main/js/sap/ushell/appRuntime/ui5/services/FlpLaunchPage.js +30 -0
  110. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
  111. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
  112. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
  113. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +1 -1
  114. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +1 -1
  115. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +1 -1
  116. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
  117. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +1 -1
  118. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +1 -1
  119. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +1 -1
  120. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
  121. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  122. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
  123. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +1 -1
  124. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  125. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +62 -35
  126. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
  127. package/src/main/js/sap/ushell/components/HomepageManager.js +1 -0
  128. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  129. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +6 -1684
  130. package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +1 -7
  131. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +2 -35
  132. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +1 -1
  133. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +1 -1
  134. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +2 -176
  135. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +1 -1
  136. package/src/main/js/sap/ushell/components/applicationIntegrationOld/AppLifeCycle.js +1 -1
  137. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/Application.js +3 -3
  138. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler.js +1 -1
  139. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPI.js +1 -1
  140. package/src/main/js/sap/ushell/components/applicationIntegrationOld/configuration/AppMeta.js +1 -1
  141. package/src/main/js/sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices.js +1 -1
  142. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +1 -1
  143. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +12 -6
  144. package/src/main/js/sap/ushell/components/contentFinder/Component.js +41 -3
  145. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +103 -38
  146. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
  147. package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +1 -1
  148. package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +1 -1
  149. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  150. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +1 -1
  151. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +3 -1
  152. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +3 -1
  153. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +3 -1
  154. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +3 -1
  155. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +3 -1
  156. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +3 -1
  157. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +3 -1
  158. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +3 -1
  159. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +3 -1
  160. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +3 -1
  161. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +3 -1
  162. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +4 -2
  163. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +3 -1
  164. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +3 -1
  165. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +3 -1
  166. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +4 -2
  167. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +4 -2
  168. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +3 -1
  169. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +3 -1
  170. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +3 -1
  171. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +3 -1
  172. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +4 -2
  173. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +3 -1
  174. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +3 -1
  175. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +3 -1
  176. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +3 -1
  177. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +3 -1
  178. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +3 -1
  179. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +3 -1
  180. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +3 -1
  181. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +3 -1
  182. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +3 -1
  183. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +3 -1
  184. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +3 -1
  185. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +3 -1
  186. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +3 -1
  187. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +3 -1
  188. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +3 -1
  189. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +3 -1
  190. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +3 -1
  191. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +3 -1
  192. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +3 -1
  193. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +3 -1
  194. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +3 -1
  195. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +3 -1
  196. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +3 -1
  197. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +3 -1
  198. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +3 -1
  199. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +3 -1
  200. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +6 -0
  201. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +2 -2
  202. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTreeTable.fragment.xml +70 -0
  203. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +1 -1
  204. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +8 -3
  205. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
  206. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ar.properties +3 -0
  207. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_bg.properties +3 -0
  208. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ca.properties +3 -0
  209. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cnr.properties +3 -0
  210. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cs.properties +3 -0
  211. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cy.properties +3 -0
  212. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_da.properties +3 -0
  213. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_de.properties +3 -0
  214. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_el.properties +3 -0
  215. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en.properties +3 -0
  216. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_GB.properties +3 -0
  217. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_US_saprigi.properties +3 -0
  218. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es.properties +3 -0
  219. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es_MX.properties +3 -0
  220. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_et.properties +3 -0
  221. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fi.properties +3 -0
  222. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr.properties +3 -0
  223. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr_CA.properties +3 -0
  224. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hi.properties +3 -0
  225. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hr.properties +3 -0
  226. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hu.properties +3 -0
  227. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_id.properties +3 -0
  228. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_it.properties +3 -0
  229. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_iw.properties +3 -0
  230. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ja.properties +3 -0
  231. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_kk.properties +3 -0
  232. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ko.properties +3 -0
  233. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lt.properties +3 -0
  234. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lv.properties +3 -0
  235. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_mk.properties +3 -0
  236. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ms.properties +3 -0
  237. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_nl.properties +3 -0
  238. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_no.properties +3 -0
  239. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pl.properties +3 -0
  240. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt.properties +3 -0
  241. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt_PT.properties +3 -0
  242. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ro.properties +3 -0
  243. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ru.properties +3 -0
  244. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sh.properties +3 -0
  245. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sk.properties +3 -0
  246. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sl.properties +3 -0
  247. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sr.properties +3 -0
  248. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sv.properties +3 -0
  249. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_th.properties +3 -0
  250. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_tr.properties +3 -0
  251. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_uk.properties +3 -0
  252. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_vi.properties +3 -0
  253. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_CN.properties +3 -0
  254. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_TW.properties +3 -0
  255. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  256. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  257. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +1 -1
  258. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +4 -4
  259. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  260. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  261. package/src/main/js/sap/ushell/components/pages/ActionMode.js +1 -1
  262. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  263. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  264. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +3 -3
  265. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  266. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  267. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  268. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  269. package/src/main/js/sap/ushell/components/shell/MenuBar/Component.js +9 -8
  270. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +0 -1
  271. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  272. package/src/main/js/sap/ushell/components/shell/MenuBar/view/MenuBarPersonalized.view.xml +25 -0
  273. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/Component.js +10 -21
  274. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +12 -5
  275. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenuButton.controller.js +1 -1
  276. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -7
  277. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/ContextMenu.fragment.xml +6 -4
  278. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.fragment.xml +76 -0
  279. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.view.xml +6 -65
  280. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuButton.view.xml +2 -2
  281. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuPopover.fragment.xml +6 -65
  282. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  283. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  284. package/src/main/js/sap/ushell/components/shell/Search/ESearch.js +15 -2
  285. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  286. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  287. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  288. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  289. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  290. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
  291. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +23 -11
  292. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +1 -1
  293. package/src/main/js/sap/ushell/components/shell/ShellBar/Component.js +114 -0
  294. package/src/main/js/sap/ushell/components/shell/ShellBar/controller/ShellBar.controller.js +248 -0
  295. package/src/main/js/sap/ushell/components/shell/ShellBar/manifest.json +48 -0
  296. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources.properties +11 -0
  297. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_en_US_saprigi.properties +5 -0
  298. package/src/main/js/sap/ushell/components/shell/ShellBar/view/ShellBar.view.xml +48 -0
  299. package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +74 -51
  300. package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +27 -30
  301. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/AllSpaces.fragment.xml +21 -0
  302. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/Popover.fragment.xml +6 -1
  303. package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +5 -1
  304. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AllSpaces.js +56 -5
  305. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Favorites.js +24 -9
  306. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericNavigationListProvider.js +46 -67
  307. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/MyHome.js +22 -4
  308. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/NavigationHelper.js +3 -2
  309. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Spaces.js +187 -160
  310. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/SpacesNavigationListProvider.js +27 -11
  311. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +3 -1
  312. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ar.properties +3 -1
  313. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_bg.properties +3 -1
  314. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ca.properties +3 -1
  315. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cnr.properties +3 -1
  316. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cs.properties +3 -1
  317. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cy.properties +3 -1
  318. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_da.properties +3 -1
  319. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_de.properties +3 -1
  320. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_el.properties +3 -1
  321. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en.properties +3 -1
  322. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_GB.properties +3 -1
  323. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_US_saprigi.properties +3 -1
  324. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es.properties +3 -1
  325. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es_MX.properties +3 -1
  326. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_et.properties +3 -1
  327. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fi.properties +4 -2
  328. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr.properties +3 -1
  329. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr_CA.properties +3 -1
  330. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hi.properties +3 -1
  331. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hr.properties +3 -1
  332. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hu.properties +3 -1
  333. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_id.properties +3 -1
  334. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_it.properties +3 -1
  335. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_iw.properties +3 -1
  336. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ja.properties +3 -1
  337. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_kk.properties +3 -1
  338. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ko.properties +3 -1
  339. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lt.properties +3 -1
  340. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lv.properties +3 -1
  341. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_mk.properties +3 -1
  342. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ms.properties +3 -1
  343. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_nl.properties +3 -1
  344. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_no.properties +3 -1
  345. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pl.properties +3 -1
  346. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt.properties +3 -1
  347. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt_PT.properties +3 -1
  348. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ro.properties +3 -1
  349. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ru.properties +3 -1
  350. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sh.properties +3 -1
  351. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sk.properties +3 -1
  352. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sl.properties +3 -1
  353. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sr.properties +3 -1
  354. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sv.properties +3 -1
  355. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_th.properties +3 -1
  356. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_tr.properties +3 -1
  357. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_uk.properties +3 -1
  358. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_vi.properties +3 -1
  359. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_CN.properties +3 -1
  360. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_TW.properties +3 -1
  361. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/Main.view.xml +21 -6
  362. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  363. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  364. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
  365. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +1 -1
  366. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
  367. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +1 -1
  368. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  369. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  370. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  371. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  372. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  373. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  374. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  375. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr.properties +1 -1
  376. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  377. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +1 -1
  378. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  379. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  380. package/src/main/js/sap/ushell/library.js +30 -10
  381. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  382. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +1 -1
  383. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  384. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  385. package/src/main/js/sap/ushell/renderer/NavContainer.js +266 -0
  386. package/src/main/js/sap/ushell/renderer/NavContainerRenderer.js +42 -0
  387. package/src/main/js/sap/ushell/renderer/Renderer.js +129 -112
  388. package/src/main/js/sap/ushell/renderer/RendererRootView.fragment.xml +2 -2
  389. package/src/main/js/sap/ushell/renderer/RendererRootViewFallback.fragment.xml +8 -0
  390. package/src/main/js/sap/ushell/renderer/Shell.controller.js +119 -60
  391. package/src/main/js/sap/ushell/renderer/Shell.view.js +78 -26
  392. package/src/main/js/sap/ushell/renderer/resources/resources.properties +3 -1
  393. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +9 -0
  394. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +9 -0
  395. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +9 -0
  396. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +9 -0
  397. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +10 -1
  398. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +9 -0
  399. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +9 -0
  400. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +9 -0
  401. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +9 -0
  402. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +9 -0
  403. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +9 -0
  404. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +9 -0
  405. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +9 -0
  406. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +10 -1
  407. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +9 -0
  408. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +9 -0
  409. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +11 -2
  410. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +14 -5
  411. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +9 -0
  412. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +42 -33
  413. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +9 -0
  414. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -0
  415. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +12 -3
  416. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +9 -0
  417. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +9 -0
  418. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +11 -2
  419. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +9 -0
  420. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +9 -0
  421. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +9 -0
  422. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +9 -0
  423. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +11 -2
  424. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +9 -0
  425. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +9 -0
  426. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +9 -0
  427. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +9 -0
  428. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +9 -0
  429. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +9 -0
  430. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +11 -2
  431. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +9 -0
  432. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +9 -0
  433. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +9 -0
  434. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +9 -0
  435. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +9 -0
  436. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +11 -2
  437. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +11 -2
  438. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +11 -2
  439. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +9 -0
  440. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +9 -0
  441. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +9 -0
  442. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  443. package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +18 -2
  444. package/src/main/js/sap/ushell/services/AppConfiguration.js +4 -4
  445. package/src/main/js/sap/ushell/services/AppLifeCycle.js +374 -377
  446. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  447. package/src/main/js/sap/ushell/services/Bookmark.js +2 -2
  448. package/src/main/js/sap/ushell/services/BookmarkV2.js +2 -2
  449. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
  450. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
  451. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
  452. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
  453. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
  454. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
  455. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
  456. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
  457. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
  458. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  459. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +298 -198
  460. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
  461. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
  462. package/src/main/js/sap/ushell/services/CommonDataModel.js +1 -1
  463. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  464. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  465. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  466. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +2 -2
  467. package/src/main/js/sap/ushell/services/DarkModeSupport.js +1 -1
  468. package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
  469. package/src/main/js/sap/ushell/services/Extension.js +1 -1
  470. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +2 -1
  471. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
  472. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
  473. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
  474. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
  475. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
  476. package/src/main/js/sap/ushell/services/FrameBoundExtension/UserSettingsEntry.js +1 -1
  477. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
  478. package/src/main/js/sap/ushell/services/LaunchPage.js +98 -7
  479. package/src/main/js/sap/ushell/services/Menu.js +1 -1
  480. package/src/main/js/sap/ushell/services/Message.js +1 -1
  481. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +5 -5
  482. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
  483. package/src/main/js/sap/ushell/services/MessageInternal.js +1 -1
  484. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +2 -2
  485. package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
  486. package/src/main/js/sap/ushell/services/Navigation.js +3 -3
  487. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +12 -11
  488. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  489. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  490. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  491. package/src/main/js/sap/ushell/services/Pages.js +1 -1
  492. package/src/main/js/sap/ushell/services/Personalization.js +1 -1
  493. package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
  494. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
  495. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
  496. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
  497. package/src/main/js/sap/ushell/services/PluginManager/SimpleExpression.js +1 -1
  498. package/src/main/js/sap/ushell/services/PluginManager.js +81 -63
  499. package/src/main/js/sap/ushell/services/ReferenceResolver.js +1 -1
  500. package/src/main/js/sap/ushell/services/Search.js +1 -1
  501. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  502. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  503. package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
  504. package/src/main/js/sap/ushell/services/SmartNavigation.js +1 -1
  505. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  506. package/src/main/js/sap/ushell/services/UITracer.js +1 -1
  507. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  508. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  509. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +687 -272
  510. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  511. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  512. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  513. package/src/main/js/sap/ushell/services/UserRecents.js +1 -1
  514. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  515. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
  516. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  517. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  518. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
  519. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  520. package/src/main/js/sap/ushell/state/BackNavigation.js +1 -1
  521. package/src/main/js/sap/ushell/state/ContentDensity.js +213 -0
  522. package/src/main/js/sap/ushell/state/Favicon.js +119 -0
  523. package/src/main/js/sap/ushell/state/StateManager.js +1 -0
  524. package/src/main/js/sap/ushell/state/StrategyFactory/UserActionsStrategy.js +3 -2
  525. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  526. package/src/main/js/sap/ushell/themes/base/ApplicationContainer.less +3 -2
  527. package/src/main/js/sap/ushell/themes/base/FlexibleColumnLayout.less +10 -0
  528. package/src/main/js/sap/ushell/themes/base/NavContainer.less +6 -0
  529. package/src/main/js/sap/ushell/themes/base/ShellHeader.less +8 -8
  530. package/src/main/js/sap/ushell/themes/base/library.source.less +2 -0
  531. package/src/main/js/sap/ushell/themes/sap_belize_base/ApplicationContainer.less +9 -1
  532. package/src/main/js/sap/ushell/themes/sap_belize_base/NavContainer.less +6 -0
  533. package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +1 -0
  534. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/ApplicationContainer.less +9 -1
  535. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/NavContainer.less +6 -0
  536. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +1 -0
  537. package/src/main/js/sap/ushell/themes/sap_hcb/base_ApplicationContainer.less +9 -1
  538. package/src/main/js/sap/ushell/themes/sap_hcb/base_NavContainer.less +6 -0
  539. package/src/main/js/sap/ushell/themes/sap_hcb/base_ShellHeader.less +1 -1
  540. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +1 -0
  541. package/src/main/js/sap/ushell/thirdparty/Icons.js +49 -49
  542. package/src/main/js/sap/ushell/thirdparty/MenuItem.js +355 -0
  543. package/src/main/js/sap/ushell/thirdparty/ShellBar.js +1892 -0
  544. package/src/main/js/sap/ushell/thirdparty/ShellBarItem.js +89 -0
  545. package/src/main/js/sap/ushell/thirdparty/ShellBarSpacer.js +40 -0
  546. package/src/main/js/sap/ushell/thirdparty/UserMenu.js +120 -204
  547. package/src/main/js/sap/ushell/thirdparty/UserMenuAccount.js +10 -0
  548. package/src/main/js/sap/ushell/thirdparty/UserMenuItem.js +55 -414
  549. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar2.js +15 -0
  550. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar3.js +41 -5
  551. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg2.js +16 -1
  552. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg3.js +41 -5
  553. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca2.js +15 -0
  554. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca3.js +41 -5
  555. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr2.js +15 -0
  556. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr3.js +41 -5
  557. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs2.js +15 -0
  558. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs3.js +44 -8
  559. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy2.js +15 -0
  560. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy3.js +41 -5
  561. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da2.js +15 -0
  562. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da3.js +43 -7
  563. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de2.js +16 -1
  564. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de3.js +41 -5
  565. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el2.js +15 -0
  566. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el3.js +41 -5
  567. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en2.js +15 -0
  568. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en3.js +41 -5
  569. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB2.js +15 -0
  570. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB3.js +41 -5
  571. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd2.js +15 -0
  572. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd3.js +41 -5
  573. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi2.js +9 -0
  574. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi3.js +16 -4
  575. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc2.js +15 -0
  576. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc3.js +41 -5
  577. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es2.js +16 -1
  578. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es3.js +41 -5
  579. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX2.js +15 -0
  580. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX3.js +41 -5
  581. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et2.js +15 -0
  582. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et3.js +41 -5
  583. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi2.js +15 -0
  584. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi3.js +41 -5
  585. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr2.js +20 -5
  586. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr3.js +43 -7
  587. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA2.js +15 -0
  588. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA3.js +41 -5
  589. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi2.js +15 -0
  590. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi3.js +41 -5
  591. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr2.js +21 -6
  592. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr3.js +42 -6
  593. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu2.js +15 -0
  594. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu3.js +41 -5
  595. package/src/main/js/sap/ushell/thirdparty/_dynamics/{messagebundle_in.js → messagebundle_id.js} +2 -2
  596. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id2.js +665 -0
  597. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id3.js +551 -0
  598. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it2.js +33 -18
  599. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it3.js +76 -40
  600. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw2.js +15 -0
  601. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw3.js +41 -5
  602. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja2.js +15 -0
  603. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja3.js +41 -5
  604. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk2.js +15 -0
  605. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk3.js +41 -5
  606. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko2.js +15 -0
  607. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko3.js +43 -7
  608. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt2.js +15 -0
  609. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt3.js +41 -5
  610. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv2.js +26 -11
  611. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv3.js +41 -5
  612. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk2.js +15 -0
  613. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk3.js +43 -7
  614. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms2.js +17 -2
  615. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms3.js +42 -6
  616. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl2.js +15 -0
  617. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl3.js +41 -5
  618. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no2.js +15 -0
  619. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no3.js +41 -5
  620. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl2.js +20 -5
  621. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl3.js +41 -5
  622. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt2.js +16 -1
  623. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt3.js +41 -5
  624. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT2.js +15 -0
  625. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT3.js +41 -5
  626. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro2.js +16 -1
  627. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro3.js +41 -5
  628. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru2.js +18 -3
  629. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru3.js +41 -5
  630. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh2.js +15 -0
  631. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh3.js +41 -5
  632. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk2.js +16 -1
  633. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk3.js +41 -5
  634. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl2.js +16 -1
  635. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl3.js +42 -6
  636. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr2.js +15 -0
  637. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr3.js +41 -5
  638. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv2.js +16 -1
  639. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv3.js +43 -7
  640. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th2.js +15 -0
  641. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th3.js +41 -5
  642. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr2.js +15 -0
  643. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr3.js +41 -5
  644. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk2.js +15 -0
  645. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk3.js +42 -6
  646. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi2.js +15 -0
  647. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi3.js +41 -5
  648. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN2.js +15 -0
  649. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN3.js +41 -5
  650. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW2.js +15 -0
  651. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW3.js +41 -5
  652. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css.js +1 -1
  653. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css10.js +1 -1
  654. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css11.js +1 -1
  655. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css12.js +1 -1
  656. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css13.js +1 -1
  657. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css14.js +1 -1
  658. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css15.js +1 -1
  659. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css16.js +1 -1
  660. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css17.js +1 -1
  661. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css18.js +1 -1
  662. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css19.js +1 -1
  663. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css2.js +1 -1
  664. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css20.js +1 -1
  665. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css21.js +1 -1
  666. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css22.js +1 -1
  667. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css23.js +1 -1
  668. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css24.js +1 -1
  669. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css3.js +1 -1
  670. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css4.js +1 -1
  671. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css5.js +1 -1
  672. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css6.js +1 -1
  673. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css7.js +1 -1
  674. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css8.js +1 -1
  675. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css9.js +1 -1
  676. package/src/main/js/sap/ushell/thirdparty/event-strict.js +7 -0
  677. package/src/main/js/sap/ushell/thirdparty/i18n-defaults.js +146 -0
  678. package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css25.js +99 -82
  679. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/MenuItem.js +5 -0
  680. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-base.js +1 -1
  681. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBar.js +4 -0
  682. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarItem.js +4 -0
  683. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarSpacer.js +4 -0
  684. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBar.js +138 -0
  685. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarItem.js +61 -0
  686. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarSpacer.js +46 -0
  687. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuAccount.js +5 -0
  688. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori.js +6 -2
  689. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents.js +2 -1
  690. package/src/main/js/sap/ushell/thirdparty/webcomponents-base.js +8 -8
  691. package/src/main/js/sap/ushell/thirdparty/webcomponents-fiori.js +2 -2
  692. package/src/main/js/sap/ushell/thirdparty/webcomponents.js +4 -4
  693. package/src/main/js/sap/ushell/ui/AppContainer.js +6 -0
  694. package/src/main/js/sap/ushell/ui/ShellHeader.js +4 -40
  695. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  696. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +28 -27
  697. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.controller.js +1 -1
  698. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  699. package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
  700. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceCdm.js +1 -7
  701. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  702. package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +249 -249
  703. package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +35 -3
  704. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  705. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  706. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
  707. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  708. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +16 -0
  709. package/src/main/js/sap/ushell/utils/UrlParsing.js +96 -94
  710. package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
  711. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +2 -2
  712. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +12 -6
  713. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +1 -1
  714. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  715. package/ui5.yaml +1 -1
  716. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerRenderer.js +0 -35
  717. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +0 -52
  718. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +0 -375
  719. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in2.js +0 -266
  720. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in3.js +0 -143
  721. /package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainerCache.js +0 -0
  722. /package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ExtensionItems.js +0 -0
  723. /package/src/main/js/sap/ushell/components/shell/MenuBar/view/{MenuBarPersonalization.view.xml → MenuBarWithPersonalizationButton.view.xml} +0 -0
@@ -2,98 +2,16 @@
2
2
 
3
3
  /**
4
4
  * @fileOverview handle all the resources for the different applications.
5
- * @version 1.134.1
5
+ * @version 1.135.0
6
6
  */
7
7
  sap.ui.define([
8
- "sap/base/util/deepEqual",
9
8
  "sap/base/util/ObjectPath",
10
- "sap/ui/Device",
11
- "sap/ui/core/Element",
12
- "sap/ui/core/EventBus",
13
- "sap/ushell/components/applicationIntegration/KeepAliveApps",
14
- "sap/ushell/state/BackNavigation",
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",
29
- "sap/ushell/services/AppConfiguration",
30
- "sap/ushell/utils",
31
- "sap/ushell/Config",
32
- "sap/ushell/ApplicationType",
33
- "sap/base/util/deepExtend",
34
- "sap/ushell/utils/UriParameters",
35
- "sap/base/Log",
36
- "sap/ushell/EventHub",
37
- "sap/ushell/utils/UrlParsing",
38
- "sap/ui/thirdparty/hasher",
39
- "sap/ushell/services/MessageBroker/MessageBrokerEngine",
40
- "sap/ushell/renderer/utils",
41
- "sap/m/library",
42
- "sap/ushell/AppInfoParameters",
43
- "sap/ushell/Container",
44
- "sap/ushell/resources",
45
- "sap/ushell/state/ShellModel",
46
- "sap/ushell/state/StateManager",
47
- "sap/ushell/state/KeepAlive",
48
- "sap/ushell/ui5service/ShellUIServiceFactory",
49
- "sap/ui/core/service/ServiceFactoryRegistry",
50
- "sap/ushell/library",
51
- "sap/ushell/components/applicationIntegrationOld/AppLifeCycle"
9
+ "sap/ushell/components/applicationIntegrationOld/AppLifeCycle",
10
+ "sap/ushell/Config"
52
11
  ], (
53
- deepEqual,
54
12
  ObjectPath,
55
- Device,
56
- Element,
57
- EventBus,
58
- KeepAliveApps,
59
- BackNavigation,
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,
74
- AppConfiguration,
75
- ushellUtils,
76
- Config,
77
- ApplicationType,
78
- deepExtend,
79
- UriParameters,
80
- Log,
81
- EventHub,
82
- UrlParsing,
83
- hasher,
84
- MessageBrokerEngine,
85
- RendererUtils,
86
- mobileLibrary,
87
- AppInfoParameters,
88
- Container,
89
- ushellResources,
90
- ShellModel,
91
- StateManager,
92
- KeepAlive,
93
- ShellUIServiceFactory,
94
- ServiceFactoryRegistry,
95
- ushellLibrary,
96
- AppLifeCycleFallback
13
+ AppLifeCycleFallback,
14
+ Config
97
15
  ) => {
98
16
  "use strict";
99
17
 
@@ -102,1601 +20,5 @@ sap.ui.define([
102
20
  return AppLifeCycleFallback;
103
21
  }
104
22
 
105
- // shortcut for sap.ushell.components.applicationIntegration.contracts.StatefulType
106
- const StatefulType = ushellLibrary.components.applicationIntegration.contracts.StatefulType;
107
-
108
- // shortcut for sap.ushell.state.StateManager.ShellMode
109
- const ShellMode = StateManager.ShellMode;
110
-
111
- // shortcut for sap.ushell.state.StateManager.LaunchpadState
112
- const LaunchpadState = StateManager.LaunchpadState;
113
-
114
- // shortcut for sap.ushell.state.StateManager.Operation
115
- const Operation = StateManager.Operation;
116
-
117
- // shortcut for sap.m.URLHelper
118
- const URLHelper = mobileLibrary.URLHelper;
119
-
120
- // todo: [FLPCOREANDUX-10024] cleanup
121
- // const CACHED_APP_TYPES = ["URL"];
122
-
123
- const KEEP_ALIVE_MODES = {
124
- True: "true",
125
- Restricted: "restricted",
126
- False: ""
127
- };
128
-
129
- const iValidIframeTimeout = 3500;
130
-
131
- function AppLifeCycle () {
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.
133
- let bDisableHomeAppCache = false;
134
- let bEnableRouterRetrigger = true;
135
- let oCurrentApplication = {};
136
- const oComponentCreatedPromises = {};
137
- let oGlobalShellUIService,
138
- fnOldTriggerEmail,
139
- oViewPortContainer;
140
-
141
- //connect FLP to the message broker
142
- if (window.QUnit === undefined) {
143
- MessageBrokerEngine.connect("FLP");
144
- }
145
-
146
- /**
147
- * Sets the componentCreated promise for a given appId if it does not exist yet.
148
- * Returns the promise along with the resolve and reject functions.
149
- * @private
150
- * @since 1.125.0
151
- * @param {string} sStorageAppId The id of the created application.
152
- * @returns {{
153
- * promise: Promise,
154
- * resolve: function,
155
- * reject: function
156
- * }} An object containing the promise and the resolve and reject functions.
157
- */
158
- this._setComponentCreatedPromise = function (sStorageAppId) {
159
- if (!oComponentCreatedPromises[sStorageAppId]) {
160
- oComponentCreatedPromises[sStorageAppId] = {};
161
- oComponentCreatedPromises[sStorageAppId].promise = new Promise((resolve, reject) => {
162
- oComponentCreatedPromises[sStorageAppId].resolve = resolve;
163
- oComponentCreatedPromises[sStorageAppId].reject = reject;
164
- });
165
- }
166
-
167
- return oComponentCreatedPromises[sStorageAppId];
168
- };
169
-
170
- /**
171
- * Resolves the componentCreated promise for the given appId. If the promise does not yet exist, it is created.
172
- * @param {string} sStorageAppId The id of the created application.
173
- * @private
174
- * @since 1.125.0
175
- */
176
- this._resolveComponentCreatedPromise = function (sStorageAppId) {
177
- if (!sStorageAppId) {
178
- return;
179
- }
180
- this._setComponentCreatedPromise(sStorageAppId).resolve();
181
- };
182
-
183
- /**
184
- * Returns the componentCreated promise for the given appId. If the promise does not yet exist, it is created.
185
- * @param {string} sStorageAppId The id of the created application.
186
- * @returns {Promise} The componentCreated promise for the given appId.
187
- * @private
188
- * @since 1.125.0
189
- */
190
- this._getComponentCreatedPromise = async function (sStorageAppId) {
191
- if (!sStorageAppId) {
192
- return;
193
- }
194
- return this._setComponentCreatedPromise(sStorageAppId).promise;
195
- };
196
-
197
- /**
198
- * @param {string} sId Id of the control might end with "-component"
199
- * @returns {string} Returns the normalized appId
200
- */
201
- this._normalizeAppId = function (sId) {
202
- const sCmp = "-component";
203
- const isCmp = sId.endsWith(sCmp);
204
-
205
- if (isCmp) {
206
- return sId.substring(0, sId.length - sCmp.length);
207
- }
208
- return sId;
209
- };
210
-
211
- /**
212
- * @param {object} oEvent
213
- * @param {string} sChannel
214
- * @param {object} oData
215
- */
216
- this._onComponentCreated = function (oEvent, sChannel, oData) {
217
- const oAppComponent = oData.component;
218
- const sStorageAppId = this._normalizeAppId(oAppComponent.getId());
219
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
220
-
221
- if (oStorageEntry) {
222
- oStorageEntry.app = oAppComponent;
223
- } else {
224
- oCurrentApplication.app = oAppComponent;
225
- }
226
-
227
- if (oAppComponent.active) {
228
- oAppComponent.active();
229
- }
230
-
231
- this._resolveComponentCreatedPromise(sStorageAppId);
232
- };
233
-
234
- /**
235
- * @param {object} oEvent
236
- * @param {string} sChannel
237
- * @param {object} oData
238
- */
239
- this._onGetMe = function (oEvent, sChannel, oData) {
240
- oData.AppLifeCycle = this;
241
- };
242
-
243
- /**
244
- * @param {string} sStorageAppId
245
- */
246
- this._storeApplication = async function (sStorageAppId) {
247
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
248
-
249
- if (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
281
- oStorageEntry.stateStored = true;
282
-
283
- // todo: [FLPCOREANDUX-10024] clarify how to handle appClosed events
284
- EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
285
- }
286
- };
287
-
288
- /**
289
- * Should remove their foot print and prepare for possible reuse.
290
- * @param {string} sStorageAppId
291
- * @param {object} oApplicationContainer
292
- * @param {boolean} [bIgnoreReuse=false]
293
- * @returns {Promise} Resolves when the app is destroyed.
294
- */
295
- this._destroyApplication = async function (sStorageAppId, oApplicationContainer, bIgnoreReuse) {
296
- if (typeof sStorageAppId !== "string" || !oApplicationContainer) {
297
- return;
298
- }
299
-
300
- if (!oApplicationContainer.getCurrentAppId() && !bIgnoreReuse) {
301
- // no active app in the container, only destroy this app if it shall not be reused.
302
- return;
303
- }
304
-
305
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
306
-
307
- KeepAliveApps.removeById(sStorageAppId);
308
- KeepAlive.destroy(oStorageEntry);
309
-
310
- // ===============================================================================
311
- // try to reuse the iframe
312
-
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);
325
- }
326
-
327
- // todo: [FLPCOREANDUX-10024] clarify how to handle appClosed events
328
- EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
329
- return;
330
- }
331
-
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);
341
- }
342
-
343
- // remove all other related apps from the storage
344
- KeepAliveApps.removeByContainer(oApplicationContainer, (oStorageEntry) => {
345
- KeepAlive.destroy(oStorageEntry);
346
- });
347
-
348
- /**
349
- * If the application running in an iframe registered for "before close" event,
350
- * we first post it a message to prepare for closing (usually, the app will close
351
- * its session or release locks held on the server), and only when the iframe send a response
352
- * back that it finished processing the event, we will continue to destroy the app (iframe).
353
- * If the app in the iframe did not register to the event, we destroy the app immediately exactly
354
- * as it was done before.
355
- * Note that even if the response from the iframe is not successful, we still destroy the app
356
- * because the second app that we navigated to was already created so we can not stop
357
- * the actual navigation (this is the same behaviour that we had before).
358
- * This mechanism was added to solve the change made in Chrome to disallow Sync XHR on
359
- * browser close.
360
- */
361
- try {
362
- const oThenable = oApplicationContainer.sendBeforeAppCloseEvent();
363
- await ushellUtils.promisify(oThenable);
364
- } catch (sError) {
365
- Log.error(
366
- "FLP got a failed response from the iframe for the 'sap.ushell.services.CrossApplicationNavigation.beforeAppCloseEvent' message sent",
367
- sError,
368
- "sap.ushell.components.applicationIntegration.AppLifeCycle.js"
369
- );
370
- }
371
-
372
- ApplicationContainerCache.removeByContainer(oApplicationContainer);
373
- this._removeApplicationContainerFromViewPort(oApplicationContainer);
374
-
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
- }
384
- };
385
-
386
- /**
387
- * @param {string} sStorageAppId
388
- */
389
- this._restoreApplication = async function (sStorageAppId) {
390
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
391
-
392
- if (oStorageEntry?.stateStored) {
393
- // 1) Extensions
394
- BackNavigation.restore(oStorageEntry.service);
395
- AppMeta.restore(oStorageEntry.meta);
396
-
397
- // 2) Extension API
398
- ShellUIServiceFactory.restore(oStorageEntry);
399
-
400
- // 3) Application
401
- const oApplicationContainer = oStorageEntry.container;
402
- if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer")) {
403
- await oApplicationContainer.sendRequest("sap.ushell.appRuntime.keepAliveAppShow", {}, false);
404
-
405
- } else if (oApplicationContainer.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
406
- await EmbeddedUI5Handler.restoreAppAfterNavigate(oApplicationContainer, oStorageEntry);
407
- }
408
- }
409
- };
410
-
411
- /**
412
- * @param {object} oOldApplicationContainer
413
- * @param {boolean} bNavigationToFlpComponent
414
- * @returns {Promise} Resolves when the app is closed.
415
- */
416
- this._handleExitApplication = async function (oOldApplicationContainer, bNavigationToFlpComponent) {
417
- if (!oOldApplicationContainer) {
418
- return;
419
- }
420
-
421
- const sOldStorageAppId = oOldApplicationContainer.getCurrentAppId();
422
- if (!sOldStorageAppId) {
423
- // no active app in the container
424
- return;
425
- }
426
-
427
- const bNavigationBackToApp = BackNavigation.isBackNavigation() && !bNavigationToFlpComponent;
428
-
429
- // Back Navigation Case
430
- if (bNavigationBackToApp) {
431
- await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer); // todo: [FLPCOREANDUX-10024] new marker
432
-
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")) {
438
- // Wait until navigation's source app has been started completely, so that a later back navigation finds a proper app that
439
- // can be re-enabled (keep-alive scenario)
440
- await this._getComponentCreatedPromise(sOldStorageAppId);
441
- }
442
-
443
- if (oOldApplicationContainer.getIsKeepAlive()) {
444
- return this._storeApplication(sOldStorageAppId);
445
- }
446
- return this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
447
- }
448
- };
449
-
450
- /**
451
- * @param {function(): boolean} fnFilterApps The filter function
452
- * @param {boolean} [bIgnoreReuse=false]
453
- * @returns {Promise} Resolves when all keep alive apps are closed.
454
- */
455
- this._destroyKeepAliveApps = async function (fnFilterApps, bIgnoreReuse) {
456
- try {
457
- const aFilteredApps = [];
458
-
459
- KeepAliveApps.forEach((oStorageEntry) => {
460
- if (fnFilterApps(oStorageEntry)) {
461
- aFilteredApps.push(oStorageEntry);
462
- }
463
- });
464
- const aClosePromises = aFilteredApps.map((oFilteredApp) => {
465
- return this._destroyApplication(oFilteredApp.appId, oFilteredApp.container, bIgnoreReuse);
466
- });
467
-
468
- await Promise.allSettled(aClosePromises);
469
- } catch (e) {
470
- Log.error("_destroyKeepAliveApps call failed", e);
471
- }
472
- };
473
-
474
- /**
475
- * @param {string} sFromId
476
- * @param {object} oFrom
477
- */
478
- this.onBeforeNavigate = function (sFromId, oFrom) {
479
- if (sFromId && oFrom && oFrom.isA("sap.ushell.components.applicationIntegration.ApplicationContainer")) {
480
- const sStorageAppId = sFromId;
481
- const oApplicationContainer = oFrom;
482
-
483
- const bHasIframe = !!oApplicationContainer.isA("sap.ushell.components.applicationIntegration.IframeApplicationContainer"); // todo: [FLPCOREANDUX-10024] is this really required?
484
- const bIsSupportedType = oApplicationContainer.getStatefulType() > StatefulType.NotSupported;
485
-
486
- const bCached = !!KeepAliveApps.get(sStorageAppId);
487
- const bSessionHandlingSupported = bHasIframe && bIsSupportedType;
488
-
489
- if (bHasIframe && (bCached || bSessionHandlingSupported)) {
490
- oApplicationContainer.sendRequest("sap.ushell.sessionHandler.beforeApplicationHide", {}, false);
491
- }
492
- }
493
-
494
- };
495
-
496
- /**
497
- * @param {string} sFromId
498
- * @param {object} oFrom
499
- * @param {string} sToId
500
- * @param {object} oTo
501
- */
502
- this.onAfterNavigate = async function (sFromId, oFrom, sToId, oTo) { //call lifecycle interface "setInitialConfiguration"
503
- if (!sToId) {
504
- sToId = "";
505
- }
506
- if (!sFromId) {
507
- sFromId = "";
508
- }
509
-
510
- const aFlpComponentIds = [
511
- "Shell-appfinder-component",
512
- "Shell-home-component",
513
- "pages-component-container",
514
- "homeApp-component-container",
515
- "workPageRuntime-component-container",
516
- "runtimeSwitcher-component-container"
517
- ];
518
-
519
- const bNavigationToFlpComponent = aFlpComponentIds.some((sFlpComponentId) => sToId.includes(sFlpComponentId));
520
-
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
- }
535
-
536
- if (KeepAliveApps.get(sStorageAppId)) {
537
- await this._restoreApplication(sStorageAppId);
538
- }
539
-
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
- }
546
-
547
- // Clear custom About Dialog parameters
548
- AppInfoParameters.flush();
549
- }
550
- }
551
-
552
- if (sFromId && oFrom) {
553
- // ==== Navigation from app to [any] ====
554
- if (oFrom.isA("sap.ushell.components.applicationIntegration.ApplicationContainer")) {
555
- const oApplicationContainer = oFrom;
556
-
557
- await this._handleExitApplication(oApplicationContainer, bNavigationToFlpComponent);
558
-
559
- // ==== Navigation from renderer managed component to [any] ====
560
- } else {
561
- const sFromControlId = sFromId;
562
- const oFromControl = oFrom;
563
-
564
- // handle the case of appFinder
565
- if (sToId.indexOf("Shell-appfinder-component") > 0) {
566
- EventBus.getInstance().publish("sap.ushell", "appFinderAfterNavigate");
567
- }
568
-
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
- }
577
- }
578
- }
579
- };
580
-
581
- /**
582
- * @param {string} sStorageAppId
583
- * @param {object} oApplicationContainer
584
- * @param {object} oResolvedHashFragment
585
- * @param {string} oParsedShellHash
586
- * @param {string} sKeepAliveMode
587
- * @returns {object} Returns the storage entry.
588
- */
589
- this._addStorageEntry = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
590
- const oOldStorageEntry = KeepAliveApps.get(sStorageAppId);
591
- if (oOldStorageEntry) {
592
- return oOldStorageEntry;
593
- }
594
-
595
- const oNewStorageEntry = {
596
- service: {},
597
- shellHash: `#${UrlParsing.constructShellHash(oParsedShellHash)}`,
598
- appId: sStorageAppId,
599
- stt: "loading",
600
- currentState: null, // current state is stored before close see: sap/ushell/state/CurrentState
601
- controlManager: null, // control manager state is stored before close see: sap/ushell/state/ControlManager
602
- container: oApplicationContainer,
603
- meta: undefined, // is set after application start
604
- app: undefined,
605
- keepAliveMode: sKeepAliveMode,
606
- appTarget: oResolvedHashFragment,
607
- ui5ComponentName: oResolvedHashFragment.ui5ComponentName,
608
- enableRouterRetrigger: bEnableRouterRetrigger,
609
- stateStored: false
610
- };
611
-
612
- KeepAliveApps.set(sStorageAppId, oNewStorageEntry);
613
-
614
- return oNewStorageEntry;
615
- };
616
-
617
- /**
618
- * Stores the state of the current application
619
- * - back navigation
620
- * - title, hierarchy, relatedApps
621
- * - currentState, controlManager
622
- * @returns {Promise} Resolves when the store is done.
623
- *
624
- * @since 1.128.0
625
- * @private
626
- */
627
- this.storeAppExtensions = async function () {
628
- const oCurrentApp = this.getCurrentApplication();
629
- if (!oCurrentApp) {
630
- return;
631
- }
632
- const sStorageAppId = oCurrentApp.appId;
633
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
634
-
635
- if (!oStorageEntry) {
636
- // do not store for non-keep-alive apps
637
- return;
638
- }
639
-
640
- if (oStorageEntry.container.isA("sap.ushell.components.applicationIntegration.UI5ApplicationContainer")) {
641
- await this._getComponentCreatedPromise(sStorageAppId);
642
- }
643
-
644
- // back navigation
645
- BackNavigation.store(oStorageEntry.service);
646
- // currentState, controlManager
647
- KeepAlive.store(oStorageEntry);
648
- // About Dialog
649
- AppInfoParameters.store(oStorageEntry);
650
- };
651
-
652
- /**
653
- * @param {string} sStorageAppId
654
- * @param {object} oResolvedHashFragment
655
- * @param {object} oParsedShellHash
656
- * @returns {string} Returns the keep alive mode.
657
- */
658
- this._calculateKeepAliveMode = function (sStorageAppId, oResolvedHashFragment, oParsedShellHash) {
659
- const aKeepAliveModes = Object.values(KEEP_ALIVE_MODES);
660
-
661
- //generic intent currently can never be keep alive
662
- if (sStorageAppId === "application-Shell-startIntent") {
663
- return KEEP_ALIVE_MODES.False;
664
- }
665
-
666
- // Global override in query parameters
667
- let sKeepAlive = new URLSearchParams(window.location.search).get("sap-keep-alive");
668
- if (aKeepAliveModes.includes(sKeepAlive)) {
669
- return sKeepAlive;
670
- }
671
-
672
- // App override in intent parameters
673
- sKeepAlive = oParsedShellHash.params?.["sap-keep-alive"];
674
- if (aKeepAliveModes.includes(sKeepAlive)) {
675
- return sKeepAlive;
676
- }
677
-
678
- // Magic override in resolved hash fragment
679
- if (oResolvedHashFragment.url) {
680
- sKeepAlive = UriParameters.fromURL(oResolvedHashFragment.url).get("sap-keep-alive");
681
- if (aKeepAliveModes.includes(sKeepAlive)) {
682
- return sKeepAlive;
683
- }
684
- }
685
-
686
- // if the app is a root intent, it should be kept alive (e.g. workzone advanced)
687
- // can be overridden by the above checks
688
- const sShellHash = UrlParsing.constructShellHash(oParsedShellHash);
689
- if (sShellHash && ushellUtils.isRootIntent(sShellHash)) {
690
- return KEEP_ALIVE_MODES.True;
691
- }
692
-
693
- return KEEP_ALIVE_MODES.False;
694
- };
695
-
696
- /**
697
- * @param {object} oResolvedHashFragment
698
- * @returns {string} Returns the application type.
699
- */
700
- this._calculateAppType = function (oResolvedHashFragment) {
701
- if (oResolvedHashFragment.applicationType === "URL" && oResolvedHashFragment.additionalInformation?.startsWith?.("SAPUI5.Component=")) {
702
- return "SAPUI5";
703
- }
704
- return oResolvedHashFragment.applicationType;
705
- };
706
-
707
- /**
708
- * @param {object} oData
709
- * @returns {Promise} Resolves when the app is reloaded.
710
- */
711
- this._reloadCurrentApp = async function (oData) {
712
- const oTargetApplicationContainer = ApplicationContainerCache.getById(oData.sAppContainerId);
713
- if (oTargetApplicationContainer) {
714
- await this._destroyApplication(oTargetApplicationContainer.getCurrentAppId(), oTargetApplicationContainer);
715
- }
716
-
717
- const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
718
- try {
719
- ShellNavigationInternal.hashChanger.treatHashChanged(oData.sCurrentHash);
720
- } catch (error) {
721
- Log.error("Error when trying to re-load the current displayed application", error, "sap.ushell.services.AppLifeCycle");
722
- }
723
- };
724
-
725
- /**
726
- * Opens an application in an application container and sets it as the current application.
727
- *
728
- * @param {string} sStorageAppId the id of the application.
729
- * @param {object} oResolvedHashFragment the resolved hash fragment.
730
- * @param {object} bShouldBeCached Wether it should be cached.
731
- */
732
- this._createOrReuseApplicationContainer = function (sStorageAppId, oResolvedHashFragment, bShouldBeCached) {
733
- let oApplicationContainer;
734
-
735
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
736
- // app was kept alive
737
- if (oStorageEntry && oStorageEntry.container) {
738
- oApplicationContainer = oStorageEntry.container;
739
- }
740
-
741
- // try to find a reusable container
742
- if (!oApplicationContainer) {
743
- const oStatefulApplicationContainer = ApplicationContainerCache.findFreeContainerByUrl(oResolvedHashFragment.url);
744
-
745
- const bIsReusableContainer = oStatefulApplicationContainer?.getStatefulType() !== StatefulType.NotSupported;
746
- if (bIsReusableContainer) {
747
- oApplicationContainer = oStatefulApplicationContainer;
748
- }
749
- }
750
-
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
772
- };
773
-
774
- if (bIsUI5App) {
775
- oApplicationContainer = new UI5ApplicationContainer({
776
- ...oCommonProperties,
777
- ui5ComponentName: oResolvedHashFragment.ui5ComponentName
778
- });
779
- } else {
780
- oApplicationContainer = new IframeApplicationContainer({
781
- ...oCommonProperties
782
- });
783
- }
784
-
785
- this._initializeApplicationContainer(oApplicationContainer, oResolvedHashFragment);
786
- } else {
787
- oApplicationContainer.setProperty("isFetchedFromCache", true, true);
788
- }
789
-
790
- ApplicationContainerCache.setContainerActive(oApplicationContainer);
791
- oApplicationContainer.setProperty("isKeepAlive", bShouldBeCached, true);
792
-
793
- return oApplicationContainer;
794
- };
795
-
796
- /**
797
- * Any event one wishes to subscribe to during the AppLifeCycle.init() call should be added here.
798
- * Events will only be added the first time AppLifeCycle.init() is called.
799
- */
800
- this._addEvents = (function () {
801
- let hasBeenCalled = false;
802
- return function () {
803
- if (!hasBeenCalled) {
804
- hasBeenCalled = true;
805
-
806
- // Subscribe to events.
807
- EventHub.on("disableKeepAliveRestoreRouterRetrigger").do((oData) => {
808
- const sAppId = `${oData.intent.semanticObject}-${oData.intent.action}`;
809
- const sStorageAppId = `application-${sAppId}`;
810
-
811
- bEnableRouterRetrigger = oData.disable;
812
-
813
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
814
- if (oStorageEntry) {
815
- oStorageEntry.enableRouterRetrigger = oData.disable;
816
- }
817
- });
818
- EventHub.on("setApplicationFullWidth").do((oData) => {
819
- this._setApplicationFullWidth(oData.bValue);
820
- });
821
-
822
- EventHub.on("reloadCurrentApp").do((oData) => {
823
- this._reloadCurrentApp(oData);
824
- });
825
- }
826
- };
827
- }());
828
-
829
- /**
830
- * @param {object} oInViewPortContainer
831
- * @param {boolean} bInDisableHomeAppCache
832
- */
833
- this.init = function (oInViewPortContainer, bInDisableHomeAppCache) {
834
- if (Container && Config.last("/core/shell/enablePersistantAppstateWhenSharing")) {
835
- Container.getServiceAsync("AppState").then((oAppStateService) => {
836
- fnOldTriggerEmail = URLHelper.triggerEmail.bind(URLHelper);
837
- URLHelper.triggerEmail = function (sTo, sSubject, sBody, sCc, sBcc) {
838
- const sFLPUrl = document.URL;
839
- oAppStateService.setAppStateToPublic(sFLPUrl)
840
- .done((sNewURL, sXStateKey, sIStateKey, sXStateKeyNew, sIStateKeyNew) => {
841
- sSubject = sSubject && sXStateKey && sXStateKeyNew && sSubject.includes(sXStateKey) ? sSubject.replace(sXStateKey, sXStateKeyNew) : sSubject;
842
- sSubject = sSubject && sIStateKey && sIStateKeyNew && sSubject.includes(sIStateKey) ? sSubject.replace(sIStateKey, sIStateKeyNew) : sSubject;
843
- sBody = sBody && sXStateKey && sXStateKeyNew && sBody.includes(sXStateKey) ? sBody.replace(sXStateKey, sXStateKeyNew) : sBody;
844
- sBody = sBody && sIStateKey && sIStateKeyNew && sBody.includes(sIStateKey) ? sBody.replace(sIStateKey, sIStateKeyNew) : sBody;
845
- fnOldTriggerEmail(sTo, sSubject, sBody, sCc, sBcc);
846
- })
847
- .fail((sTo, sSubject, sBody, sCc, sBcc) => {
848
- fnOldTriggerEmail(sTo, sSubject, sBody, sCc, sBcc);
849
- });
850
- };
851
- });
852
- }
853
-
854
- this._startPostMessageHandling();
855
-
856
- ShellUIServiceFactory.init().then(() => {
857
- ServiceFactoryRegistry.register(
858
- "sap.ushell.ui5service.ShellUIService",
859
- ShellUIServiceFactory
860
- );
861
- });
862
- this._createGlobalShellUIService();
863
-
864
- oViewPortContainer = oInViewPortContainer;
865
- bDisableHomeAppCache = bInDisableHomeAppCache;
866
-
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));
911
- }
912
- );
913
- }
914
- });
915
- }
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");
927
- }
928
-
929
- if (oInterface.isActiveOnly) {
930
- oTarget.activeOnly = true;
931
- }
932
-
933
- PostMessageManager.setDistributionPolicy(sServiceRequest, oTarget);
934
- });
935
- }
936
- });
937
- }
938
- );
939
- };
940
-
941
- this._waitForPluginsAndReplayPostMessages = async function () {
942
- const PluginManager = await Container.getServiceAsync("PluginManager");
943
- const oPluginDeferred = PluginManager.getPluginLoadingPromise("RendererExtensions");
944
-
945
- await ushellUtils.promisify(oPluginDeferred);
946
-
947
- PostMessageManager.replayStoredMessages();
948
- };
949
-
950
- /**
951
- * @param {object} oShellNavigationInternal
952
- */
953
- this.registerHandleHashChange = function (oShellNavigationInternal) {
954
- oShellNavigationInternal.hashChanger.attachEvent("hashChanged", (oHashChange) => {
955
- //FIX for internal incident #1980317281 - In general, hash structure in FLP is splitted into 3 parts:
956
- //A - application identification & B - Application parameters & C - Internal application area
957
- // Now, when an IFrame changes its hash, it sends PostMessage up to the FLP. The FLP does 2 things: Change its URL
958
- // and send a PostMessage back to the IFrame. This fix, initiated in the PostMessageAPI.js, blocks only
959
- // the message back to the IFrame.
960
- if (hasher.disableBlueBoxHashChangeTrigger) {
961
- return;
962
- }
963
- if (oHashChange.mParameters && oShellNavigationInternal.hashChanger.isInnerAppNavigation(oHashChange.mParameters.newHash, oHashChange.mParameters.oldHash)) {
964
- PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.innerAppRouteChange", {
965
- oHash: oHashChange.mParameters
966
- }, false);
967
- }
968
-
969
- PostMessageManager.sendRequestToAllApplications("sap.ushell.appRuntime.hashChange", {
970
- sHash: oHashChange.mParameters.fullHash
971
- }, false);
972
- });
973
- };
974
-
975
- /**
976
- * @param {object} oApplicationContainer
977
- */
978
- this._addApplicationContainerToViewPort = function (oApplicationContainer) {
979
- oViewPortContainer.addCenterViewPort(oApplicationContainer);
980
- };
981
-
982
- /**
983
- * @param {string} sId
984
- */
985
- this._removeApplicationContainerFromViewPort = function (oApplicationContainer) {
986
- oViewPortContainer.removeCenterViewPort(oApplicationContainer.getId(), true);
987
- };
988
-
989
- /**
990
- * @param {string} sAppId
991
- * @returns {object} Returns the control.
992
- */
993
- this._getApplicationContainerFromViewPort = function (sAppId) {
994
- if (!oViewPortContainer) {
995
- return;
996
- }
997
- return oViewPortContainer.getViewPortControl("centerViewPort", `application-${sAppId}`)
998
- || oViewPortContainer.getViewPortControl("centerViewPort", `applicationShellPage-${sAppId}`);
999
- };
1000
-
1001
- /**
1002
- * @returns {object} Returns the view port container.
1003
- */
1004
- this._getViewPortContainer = function () {
1005
- return oViewPortContainer;
1006
- };
1007
-
1008
- /**
1009
- * @param {string} sId
1010
- */
1011
- this._navTo = function (sId) {
1012
- oViewPortContainer.navTo("centerViewPort", sId, "show");
1013
- };
1014
-
1015
- /**
1016
- * @returns {object} Returns the current application.
1017
- */
1018
- this.getCurrentApplication = function () {
1019
- return oCurrentApplication;
1020
- };
1021
-
1022
- /**
1023
- * @param {boolean} bIsFull
1024
- */
1025
- this._setApplicationFullWidth = function (bIsFull) {
1026
- const oCurrent = this.getCurrentApplication();
1027
-
1028
- //validate that we have a valid applicationContainer
1029
- if (oCurrent.container) {
1030
- oCurrent.container.toggleStyleClass("sapUShellApplicationContainerLimitedWidth", !bIsFull);
1031
- }
1032
- };
1033
-
1034
- /**
1035
- * Returns the global ShellUIService instance.
1036
- * @returns {object} The global ShellUIService instance
1037
- */
1038
- this.getShellUIService = function () {
1039
- return oGlobalShellUIService;
1040
- };
1041
-
1042
- /**
1043
- */
1044
- this.resetGlobalShellUIService = function () {
1045
- if (oGlobalShellUIService) {
1046
- oGlobalShellUIService.resetService();
1047
- }
1048
- };
1049
-
1050
- /**
1051
- * Creates the ShellUIService instance of the AppLifeCycle in application integration if not already created.
1052
- *
1053
- * @returns {Promise} A promise that resolves when the ShellUIService instance is created
1054
- *
1055
- * @since 1.127.0
1056
- * @private
1057
- */
1058
- this._createGlobalShellUIService = async function () {
1059
- oGlobalShellUIService = await ShellUIServiceFactory.createInstanceInternal();
1060
- };
1061
-
1062
- /**
1063
- * In the FLP, only one container at a time can be active. If we have
1064
- * multiple ApplicationContainers, they may still be active in the
1065
- * background, and still be able to send/receive postMessages (e.g.,
1066
- * change the title while the user is on the FLP home).
1067
- *
1068
- * Also, we distinguish between visible containers and active
1069
- * containers. As it is desirable that when a container is being opened
1070
- * it starts setting the FLP title for example. It results in better
1071
- * perceived performance.
1072
- *
1073
- * This method sets only one container as active and de-activates all
1074
- * other application containers around.
1075
- *
1076
- * @param {object} oTargetApplicationContainer
1077
- * The application container to activate. Pass <code>null</code> in
1078
- * case no application container must be activated.
1079
- *
1080
- * @private
1081
- */
1082
- this._setApplicationContainerActive = function (oTargetApplicationContainer) {
1083
- ApplicationContainerCache.forEach((oApplicationContainer) => {
1084
- if (oApplicationContainer && oApplicationContainer !== oTargetApplicationContainer) {
1085
- try {
1086
- Log.info(`Deactivating container ${oApplicationContainer.getId()}`);
1087
- oApplicationContainer.setActive(false);
1088
- } catch (e) {
1089
- /* empty */
1090
- }
1091
- }
1092
- });
1093
-
1094
- if (oTargetApplicationContainer) {
1095
- Log.info(`Activating container "${oTargetApplicationContainer.getId()}"`);
1096
- oTargetApplicationContainer.setActive(true);
1097
- }
1098
- };
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
-
1188
- /**
1189
- * @param {object} oApplicationContainer
1190
- * @param {object} oResolvedHashFragment
1191
- * @param {function} fnOnAfterRendering
1192
- */
1193
- this._publishNavigationStateEvents = function (oApplicationContainer, oResolvedHashFragment, oMetadata) {
1194
- //after the app container is rendered, publish an event to notify
1195
- //that an app was opened
1196
- const sId = oApplicationContainer.getId ? oApplicationContainer.getId() : "";
1197
- const sIcon = oMetadata.icon;
1198
- const sTitle = oMetadata.title;
1199
-
1200
- const fnOnAfterRendering = this._onAppAfterRendering.bind(this, oResolvedHashFragment);
1201
- //Attach an event handler which will be called onAfterRendering
1202
- oApplicationContainer.addEventDelegate({ onAfterRendering: fnOnAfterRendering });
1203
-
1204
- //after the app container exit, publish an event to notify
1205
- //that an app was closed
1206
- const that = this;
1207
- const origExit = oApplicationContainer.exit;
1208
- oApplicationContainer.exit = function () {
1209
- if (origExit) {
1210
- origExit.apply(this, arguments);
1211
- }
1212
- //apply the original density settings
1213
- AppMeta._applyContentDensityByPriority();
1214
-
1215
- //wrapped in setTimeout since "publish" is not async
1216
- setTimeout(() => {
1217
- // TODO: do not mutate an internal structure (in a Timeout!),
1218
- // create a new object
1219
- const oEventData = deepExtend({}, oResolvedHashFragment);
1220
- delete oEventData.componentHandle;
1221
- oEventData.appId = sId;
1222
- oEventData.usageIcon = sIcon;
1223
- oEventData.usageTitle = sTitle;
1224
- EventBus.getInstance().publish("sap.ushell", "appClosed", oEventData);
1225
- Log.info("app was closed");
1226
- }, 0);
1227
-
1228
- // the former code leaked an *internal* data structure, making it part of a public API
1229
- // restrict hte public api to the minimal set of precise documented properties which can be retained under
1230
- // under future evolutions
1231
- const oPublicEventData = that._publicEventDataFromResolutionResult(oResolvedHashFragment);
1232
- //publish the event externally
1233
- RendererUtils.publishExternalEvent("appClosed", oPublicEventData);
1234
- };
1235
- };
1236
-
1237
- /**
1238
- * Creates a new object Expose a minimal set of values to public external stakeholders
1239
- * only expose what you can guarantee under any evolution of the unified shell on all platforms
1240
- * @param {object} oApplication an internal result of NavTargetResolutionInternal
1241
- * @returns {object} an object exposing certain information to external stakeholders
1242
- */
1243
- this._publicEventDataFromResolutionResult = function (oApplication) {
1244
- const oPublicEventData = {};
1245
- if (!oApplication) {
1246
- return oApplication;
1247
- }
1248
- ["applicationType", "ui5ComponentName", "url", "additionalInformation", "text"].forEach((sProp) => {
1249
- oPublicEventData[sProp] = oApplication[sProp];
1250
- });
1251
- Object.freeze(oPublicEventData);
1252
- return oPublicEventData;
1253
- };
1254
-
1255
- /**
1256
- * @param {*} oResolvedHashFragment
1257
- * @returns
1258
- */
1259
- this._isFullWidth = function (oResolvedHashFragment, oMetadata) {
1260
- let bFullWidth;
1261
- const sAppType = this._calculateAppType(oResolvedHashFragment);
1262
- const bDefaultFullWidth = ApplicationType.getDefaultFullWidthSetting(sAppType);
1263
-
1264
- const bFullWidthCapability = oResolvedHashFragment.appCapabilities?.fullWidth;
1265
- //Here there's a double check for the fullwidth - once as a type of boolean and one as a string.
1266
- //This is because we found that developers configured this variable in the manifest also as a string,
1267
- //so the checks of the oMetadata and the oResolvedHashFragment are to avoid regression with the use of this field.
1268
- if (bDefaultFullWidth) {
1269
- if (oResolvedHashFragment.fullWidth === false || oResolvedHashFragment.fullWidth === "false" ||
1270
- oMetadata.fullWidth === false || oMetadata.fullWidth === "false" || bFullWidthCapability === false) {
1271
- bFullWidth = false;
1272
- }
1273
- } else if (oResolvedHashFragment.fullWidth || oResolvedHashFragment.fullWidth === "true" ||
1274
- oMetadata.fullWidth || oMetadata.fullWidth === "true") {
1275
- bFullWidth = true;
1276
- }
1277
-
1278
- if (bFullWidth === undefined) {
1279
- bFullWidth = bDefaultFullWidth;
1280
- }
1281
- return bFullWidth;
1282
- };
1283
-
1284
- /**
1285
- * @param {*} sAppId
1286
- * @param {*} oParsedShellHash
1287
- * @param {*} oResolvedHashFragment
1288
- * @param {*} bNavigationFromHome
1289
- * @param {*} bNavigationWithInnerAppRoute
1290
- * @returns
1291
- */
1292
- this.createApplication = async function (sAppId, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
1293
- const sStorageAppId = `application-${sAppId}`;
1294
-
1295
- await this._cleanupBeforeNewApp(
1296
- sAppId,
1297
- oParsedShellHash,
1298
- oResolvedHashFragment,
1299
- bNavigationFromHome,
1300
- bNavigationWithInnerAppRoute
1301
- );
1302
-
1303
- this._sendFocusBackToShell();
1304
- this._announceAppOpening(oResolvedHashFragment);
1305
-
1306
- const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
1307
- const bShouldBeCached = sKeepAliveMode !== KEEP_ALIVE_MODES.False;
1308
-
1309
- const oApplicationContainer = this._createOrReuseApplicationContainer(sStorageAppId, oResolvedHashFragment, bShouldBeCached);
1310
-
1311
- // check after cleanup, but before creating the storage entry
1312
- const bWasKeptAlive = !!KeepAliveApps.get(sStorageAppId);
1313
-
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
- };
1332
- }
1333
-
1334
- ushellUtils.setPerformanceMark("FLP - addAppContainer");
1335
-
1336
- // restore the app info parameters before activating the application container
1337
- const oStorageEntry = KeepAliveApps.get(sStorageAppId);
1338
- if (oStorageEntry) {
1339
- AppInfoParameters.restore(oStorageEntry);
1340
- } else {
1341
- AppInfoParameters.flush();
1342
- }
1343
-
1344
- // enable the PostMessageAPI for the application
1345
- this._setApplicationContainerActive(oApplicationContainer);
1346
-
1347
- const sNavigationRedirectHash = await this._openApp(
1348
- sStorageAppId,
1349
- oApplicationContainer,
1350
- oResolvedHashFragment,
1351
- oParsedShellHash,
1352
- bWasKeptAlive
1353
- );
1354
-
1355
- if (typeof sNavigationRedirectHash === "string") {
1356
- // do not add the deleted application to the view port
1357
- return sNavigationRedirectHash;
1358
- }
1359
-
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);
1369
- ushellUtils.setPerformanceMark("FLP -- centerViewPort");
1370
-
1371
- EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
1372
- Log.info("app was opened");
1373
- };
1374
-
1375
- /**
1376
- */
1377
- this.navToCurrentApp = function () {
1378
- const oApplicationContainer = this.getCurrentApplication().container;
1379
- // todo: [FLPCOREANDUX-10024] maybe switch to 'this.getCurrentApplication().appId' instead
1380
- this._navTo(oApplicationContainer.getId());
1381
-
1382
- // todo: [FLPCOREANDUX-10024]
1383
- // - Move styles into control? or at least out of here
1384
- // - Is this even needed? This doesn't seem to trigger the onAfterNavigate as indicated by the following comment.
1385
- //Added this because in cases when navigating to the same id (can happen when stateful container, I need the on onAfterNavigate)
1386
- //This must only be done after the _navTo as the ViewPortContainer's navTo function relies on the state of those classes.
1387
- if (oApplicationContainer.hasStyleClass("sapUShellApplicationContainerShiftedIframe")) {
1388
- oApplicationContainer.toggleStyleClass("sapUShellApplicationContainerIframeHidden", false);
1389
- } else {
1390
- oApplicationContainer.toggleStyleClass("hidden", false);
1391
- }
1392
- };
1393
-
1394
- /**
1395
- * New app was created and we now have to switch the state
1396
- * @param {string} sLaunchpadState
1397
- * @param {string} sAppId
1398
- * @param {string} sAppType
1399
- * @param {boolean} bIsExplaceNavigation
1400
- */
1401
- this.switchViewState = function (sLaunchpadState, sAppId, sAppType, bIsExplaceNavigation) {
1402
- // Store state before creating a new one
1403
- const oFromStorageEntry = KeepAliveApps.get(oCurrentApplication.appId);
1404
- if (!oFromStorageEntry) {
1405
- // We have to destroy managed queue BEFORE we're applying the pending changes
1406
- StateManager.destroyManagedControls();
1407
- }
1408
-
1409
- const sShellMode = StateManager.getShellMode();
1410
- // GUI Applications need a back button to work properly
1411
- const oShellModeOverrides = {
1412
- TR: {
1413
- headerless: ShellMode.Minimal
1414
- }
1415
- };
1416
-
1417
- let sShellModeOverride;
1418
- if (!bIsExplaceNavigation) {
1419
- sShellModeOverride = oShellModeOverrides[sAppType]?.[sShellMode];
1420
- }
1421
- StateManager.switchState(sLaunchpadState, sShellModeOverride);
1422
-
1423
- // Restore state if it already exists
1424
- const sToStorageAppId = `application-${sAppId}`;
1425
- const oToStorageEntry = KeepAliveApps.get(sToStorageAppId);
1426
- if (oToStorageEntry) {
1427
- KeepAlive.restore(oToStorageEntry);
1428
- } else {
1429
- KeepAlive.flush();
1430
- }
1431
-
1432
- //Process Dangling UI elements and continue.
1433
- StateManager.applyStalledChanges();
1434
- };
1435
-
1436
- /**
1437
- * @returns {boolean} Whether the floating container is docked.
1438
- */
1439
- this._isFloatingContainerDocked = function () {
1440
- const bDocked = ShellModel.getModel().getProperty("/floatingContainer/state").includes("docked");
1441
- const bVisible = ShellModel.getModel().getProperty("/floatingContainer/visible");
1442
- return bDocked && bVisible;
1443
- };
1444
-
1445
- /**
1446
- */
1447
- this._sendFocusBackToShell = function () {
1448
- if (!Device.system.desktop) {
1449
- return;
1450
- }
1451
-
1452
- sap.ui.require(["sap/ushell/renderer/AccessKeysHandler"], (AccessKeysHandler) => {
1453
- const sCurrentLaunchpadState = StateManager.getLaunchpadState();
1454
- const bDefaultShellMode = StateManager.getShellMode() === ShellMode.Default;
1455
- const oShellAppTitle = Element.getElementById("shellAppTitle");
1456
-
1457
- if (oShellAppTitle && sCurrentLaunchpadState === LaunchpadState.App && bDefaultShellMode) {
1458
- const oShellAppTitleDomRef = oShellAppTitle.getFocusDomRef();
1459
- if (oShellAppTitleDomRef) {
1460
- AccessKeysHandler.sendFocusBackToShell(oShellAppTitleDomRef.getAttribute("id"));
1461
- }
1462
- }
1463
- });
1464
- };
1465
-
1466
- /**
1467
- * @param {object} oResolvedHashFragment
1468
- */
1469
- this._announceAppOpening = function (oResolvedHashFragment) {
1470
- //Screen reader: "Loading Complete"
1471
- window.setTimeout(() => {
1472
- window.setTimeout(() => {
1473
- const oAccessibilityHelperLoadingComplete = document.getElementById("sapUshellLoadingAccessibilityHelper-loadingComplete");
1474
-
1475
- if (oAccessibilityHelperLoadingComplete) {
1476
- oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "polite");
1477
- oAccessibilityHelperLoadingComplete.innerHTML = ushellResources.i18n.getText("loadingComplete");
1478
- window.setTimeout(() => {
1479
- oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "off");
1480
- oAccessibilityHelperLoadingComplete.innerHTML = "";
1481
- }, 0);
1482
- }
1483
- }, 600);
1484
-
1485
- EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
1486
- Log.info("app is being opened");
1487
- }, 0);
1488
- };
1489
-
1490
- this._initializeApplicationContainer = function (oApplicationContainer, oResolvedHashFragment) {
1491
- if (ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId())) {
1492
- oApplicationContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
1493
- }
1494
- };
1495
-
1496
- this._initializeAppWithMetadata = function (oApplicationContainer, oResolvedHashFragment) {
1497
- const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment, oResolvedHashFragment?.sFixedShellHash);
1498
-
1499
- oCurrentApplication.meta = oMetadata;
1500
-
1501
- // ApplicationContainer is newly created
1502
- if (!oApplicationContainer.getIsFetchedFromCache()) {
1503
- this._publishNavigationStateEvents(oApplicationContainer, oResolvedHashFragment, oMetadata);
1504
-
1505
- oApplicationContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
1506
-
1507
- const bFullWidth = this._isFullWidth(oResolvedHashFragment, oMetadata);
1508
- if (!bFullWidth) {
1509
- oApplicationContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
1510
- }
1511
-
1512
- // todo: [FLPCOREANDUX-10024] clarify whether this should be reactive instead of one time only
1513
- // todo: [FLPCOREANDUX-10024] move this block to ShellController
1514
- if (this._isFloatingContainerDocked() && window.matchMedia("(min-width: 106.4rem)").matches) {
1515
- oApplicationContainer.addStyleClass("sapUShellDockingContainer");
1516
- oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1517
- } else if (this._isFloatingContainerDocked()) {
1518
- oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
1519
- }
1520
-
1521
- AppMeta._applyContentDensityByPriority();
1522
- }
1523
- };
1524
-
1525
- /**
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
1534
- * @param {object} oResolvedHashFragment
1535
- * @param {boolean} bNavigationFromHome
1536
- * @param {boolean} bNavigationWithInnerAppRoute
1537
- */
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
- }
1550
-
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;
1556
-
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);
1577
- }
1578
-
1579
- // => we are navigating to the right keep alive app, so we keep it alive
1580
- }
1581
-
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
1593
-
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
- }
1639
- }
1640
- };
1641
-
1642
- /**
1643
- *
1644
- * @param {sap.ui.core.Component} oApplication
1645
- */
1646
- this._onAppAfterRendering = function (oApplication) {
1647
- // wrapped in setTimeout since "publish" is not async
1648
- window.setTimeout(() => {
1649
- EventBus.getInstance().publish("sap.ushell", "appOpened", oApplication);
1650
- Log.info("app was opened");
1651
- }, 0);
1652
-
1653
- // publish the event externally
1654
- // TODO: cloned, frozen object!
1655
- const oAppOpenedEventData = this._publicEventDataFromResolutionResult(oApplication);
1656
-
1657
- // Event is emitted internally (EventHub) _and_ externally (for compatibility reasons)
1658
- EventHub.emit("AppRendered", oAppOpenedEventData, true);
1659
- RendererUtils.publishExternalEvent("appOpened", oAppOpenedEventData);
1660
- ushellUtils.setPerformanceMark("FLP.appOpened");
1661
-
1662
- const sIcon = AppMeta.getAppIcon();
1663
- StateManager.updateCurrentState("application.icon", Operation.Set, sIcon);
1664
- };
1665
-
1666
- /**
1667
- * Only for testing
1668
- * @param {sap.ui.core.Control} oNewViewPortContainer
1669
- *
1670
- * @private
1671
- */
1672
- this.setViewPortContainer = function (oNewViewPortContainer) {
1673
- oViewPortContainer = oNewViewPortContainer;
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
- };
1697
- }
1698
-
1699
- AppLifeCycle.prototype.KeepAliveMode = KEEP_ALIVE_MODES;
1700
-
1701
- return new AppLifeCycle();
23
+ throw new Error("This module 'sap/ushell/components/applicationIntegration/AppLifeCycle' should not be used when the fallback is disabled");
1702
24
  });