@sapui5/sap.ushell 1.118.0 → 1.119.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/package.json +6 -5
  2. package/src/main/js/sap/ushell/.library +1 -1
  3. package/src/main/js/sap/ushell/ApplicationType.js +1 -1
  4. package/src/main/js/sap/ushell/CanvasShapesManager.js +13 -7
  5. package/src/main/js/sap/ushell/Config.js +1 -1
  6. package/src/main/js/sap/ushell/Container.js +255 -185
  7. package/src/main/js/sap/ushell/EventHub.js +1 -1
  8. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  9. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +2 -2
  10. package/src/main/js/sap/ushell/Layout.js +3 -3
  11. package/src/main/js/sap/ushell/NWBCInterface.js +3 -3
  12. package/src/main/js/sap/ushell/TechnicalParameters.js +3 -3
  13. package/src/main/js/sap/ushell/UIActions.js +44 -44
  14. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  15. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  16. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +4 -4
  17. package/src/main/js/sap/ushell/User.js +1 -1
  18. package/src/main/js/sap/ushell/UserActivityLog.js +8 -8
  19. package/src/main/js/sap/ushell/_ApplicationType/guiResolution.js +5 -5
  20. package/src/main/js/sap/ushell/_ApplicationType/systemAlias.js +1 -1
  21. package/src/main/js/sap/ushell/_ApplicationType/urlTemplateResolution.js +16 -11
  22. package/src/main/js/sap/ushell/_Config/utils.js +5 -5
  23. package/src/main/js/sap/ushell/_URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  24. package/src/main/js/sap/ushell/_URLTemplateProcessor/DependencyGraph.js +1 -1
  25. package/src/main/js/sap/ushell/_URLTemplateProcessor/Functions.js +1 -1
  26. package/src/main/js/sap/ushell/_URLTemplateProcessor/Resolvers.js +1 -1
  27. package/src/main/js/sap/ushell/_URLTemplateProcessor/TemplateParameterParser.js +1 -1
  28. package/src/main/js/sap/ushell/_URLTemplateProcessor/utils.js +1 -1
  29. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +14 -8
  30. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +4 -5
  31. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +1 -2
  33. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +12 -13
  34. package/src/main/js/sap/ushell/adapters/cdm/MenuAdapter.js +1 -1
  35. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +4 -3
  36. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +2 -2
  39. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  41. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/_Personalization/internals.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +5 -2
  44. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +4 -1
  45. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +3 -4
  46. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +10 -11
  47. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  51. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/cdm/v3/utilsCdm.js +2 -2
  55. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +0 -1
  56. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +3 -4
  57. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +3 -2
  58. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +3 -3
  59. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +2 -3
  61. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +3 -3
  62. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -3
  63. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +2 -3
  64. package/src/main/js/sap/ushell/adapters/local/MenuAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  67. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +2 -2
  68. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -2
  69. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  70. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  71. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  72. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  73. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -2
  74. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  75. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +5 -9
  76. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/Renderer.js +5 -3
  77. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +31 -3
  78. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycleAgent.js +2 -0
  79. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +7 -3
  80. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  81. package/src/main/js/sap/ushell/bootstrap/_SchedulingAgent/FLPLoader.js +1 -1
  82. package/src/main/js/sap/ushell/bootstrap/_SchedulingAgent/logger.js +1 -1
  83. package/src/main/js/sap/ushell/bootstrap/_SchedulingAgent/state.js +3 -3
  84. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5.js +2 -2
  85. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  86. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +1 -0
  87. package/src/main/js/sap/ushell/bootstrap/common/common.load.core-min.js +2 -2
  88. package/src/main/js/sap/ushell/bootstrap/common/common.load.launchpad.js +7 -3
  89. package/src/main/js/sap/ushell/bootstrap/common/common.load.script.js +4 -4
  90. package/src/main/js/sap/ushell/bootstrap/common/common.util.js +7 -7
  91. package/src/main/js/sap/ushell/bootstrap/sandbox2/sandboxConfig.json +214 -0
  92. package/src/main/js/sap/ushell/bootstrap/sandbox2/sandboxSite.json +511 -0
  93. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +398 -0
  94. package/src/main/js/sap/ushell/components/CatalogsManager.js +26 -25
  95. package/src/main/js/sap/ushell/components/ComponentKeysHandler.js +20 -15
  96. package/src/main/js/sap/ushell/components/DestroyHelper.js +2 -2
  97. package/src/main/js/sap/ushell/components/HomepageManager.js +6 -6
  98. package/src/main/js/sap/ushell/components/_HeaderManager/ControlManager.js +1 -1
  99. package/src/main/js/sap/ushell/components/_HomepageManager/PagingManager.js +5 -5
  100. package/src/main/js/sap/ushell/components/appfinder/AppFinder.controller.js +19 -15
  101. package/src/main/js/sap/ushell/components/appfinder/AppFinderView.js +12 -12
  102. package/src/main/js/sap/ushell/components/appfinder/Catalog.controller.js +18 -18
  103. package/src/main/js/sap/ushell/components/appfinder/CatalogView.js +1 -1
  104. package/src/main/js/sap/ushell/components/appfinder/EasyAccess.controller.js +2 -2
  105. package/src/main/js/sap/ushell/components/appfinder/HierarchyApps.controller.js +6 -6
  106. package/src/main/js/sap/ushell/components/appfinder/VisualizationOrganizerHelper.js +4 -4
  107. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  108. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +8 -6
  109. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +2 -2
  110. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +1 -1
  111. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +1 -1
  112. package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +5 -5
  113. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +21 -26
  114. package/src/main/js/sap/ushell/components/applicationIntegration/elements/model.js +1 -1
  115. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +1 -1
  116. package/src/main/js/sap/ushell/components/applicationIntegration/relatedShellElements/RelatedShellElements.js +1 -1
  117. package/src/main/js/sap/ushell/components/cards/Configuration.controller.js +2 -2
  118. package/src/main/js/sap/ushell/components/cepsearchresult/app/Main.controller.js +6 -2
  119. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Category.js +44 -6
  120. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Application.js +22 -9
  121. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +23 -16
  122. package/src/main/js/sap/ushell/components/contentFinder/Component.js +1 -1
  123. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +1 -1
  124. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
  125. package/src/main/js/sap/ushell/components/contentFinder/controller/WidgetGallery.controller.js +1 -1
  126. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  127. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  128. package/src/main/js/sap/ushell/components/factsheet/controls/PictureTile.js +1 -2
  129. package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewer.js +5 -6
  130. package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewerItem.js +1 -2
  131. package/src/main/js/sap/ushell/components/factsheet/factory/ThingInspector.js +3 -3
  132. package/src/main/js/sap/ushell/components/homeApp/error/HomeAppError.controller.js +0 -1
  133. package/src/main/js/sap/ushell/components/homeApp/error/HomeAppError.view.xml +7 -6
  134. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  135. package/src/main/js/sap/ushell/components/homepage/DashboardContent.controller.js +2 -7
  136. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +13 -13
  137. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +1 -1
  138. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  139. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  140. package/src/main/js/sap/ushell/components/pages/ActionMode.js +10 -10
  141. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  142. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  143. package/src/main/js/sap/ushell/components/pages/StateManager.js +2 -2
  144. package/src/main/js/sap/ushell/components/pages/controller/ImportDialog.controller.js +12 -12
  145. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +93 -95
  146. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  147. package/src/main/js/sap/ushell/components/pages/view/PageRuntime.view.xml +31 -23
  148. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  149. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  150. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +7 -6
  151. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  152. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +1 -3
  153. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +2 -2
  154. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  155. package/src/main/js/sap/ushell/components/shell/Notifications/Notifications.controller.js +2 -2
  156. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  157. package/src/main/js/sap/ushell/components/shell/Search/ESearch.js +1 -1
  158. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  159. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +2 -2
  160. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +74 -16
  161. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchFieldFragment.fragment.xml +2 -1
  162. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -2
  163. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -2
  164. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  165. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -2
  166. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +1 -1
  167. package/src/main/js/sap/ushell/components/shell/Settings/ErrorMessageHelper.js +8 -9
  168. package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.controller.js +53 -13
  169. package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.view.xml +5 -0
  170. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +41 -38
  171. package/src/main/js/sap/ushell/components/shell/Settings/notifications/NotificationsSetting.controller.js +1 -1
  172. package/src/main/js/sap/ushell/components/shell/Settings/userActivities/UserActivitiesSetting.controller.js +2 -2
  173. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsForm.js +1 -1
  174. package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/UserDefaultsSetting.controller.js +7 -3
  175. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  176. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  177. package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTile.view.js +0 -2
  178. package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTileTmp.view.js +0 -2
  179. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/DynamicTileTmp.view.js +0 -2
  180. package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/StaticTile.view.js +0 -2
  181. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.controller.js +1 -1
  182. package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.view.js +0 -2
  183. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/oData4Analytics.js +41 -48
  184. package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/smartBusinessUtil.js +3 -3
  185. package/src/main/js/sap/ushell/components/tiles/utils.js +1 -1
  186. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +5 -18
  187. package/src/main/js/sap/ushell/components/visualizationOrganizer/VisualizationOrganizerPopover.fragment.xml +3 -3
  188. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +1 -1
  189. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
  190. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +65 -95
  191. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.layout.js +182 -90
  192. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageHost.js +1 -1
  193. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  194. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  195. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  196. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  197. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnRenderer.js +0 -2
  198. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  199. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +53 -3
  200. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRowRenderer.js +3 -0
  201. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  202. package/src/main/js/sap/ushell/components/workPageBuilder/view/WorkPageBuilder.view.xml +1 -0
  203. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  204. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +6 -2
  205. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  206. package/src/main/js/sap/ushell/components/workPageRuntime/services/NavigationResolver.js +1 -2
  207. package/src/main/js/sap/ushell/components/workPageRuntime/services/WorkPage.js +1 -2
  208. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  209. package/src/main/js/sap/ushell/library.js +4 -2
  210. package/src/main/js/sap/ushell/navigationMode.js +10 -5
  211. package/src/main/js/sap/ushell/override.js +1 -1
  212. package/src/main/js/sap/ushell/performance/FesrEnhancer.js +248 -187
  213. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +206 -207
  214. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +366 -230
  215. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  216. package/src/main/js/sap/ushell/renderers/fiori2/Renderer.js +39 -23
  217. package/src/main/js/sap/ushell/renderers/fiori2/RendererExtensions.js +105 -25
  218. package/src/main/js/sap/ushell/renderers/fiori2/Shell.controller.js +63 -52
  219. package/src/main/js/sap/ushell/renderers/fiori2/ShellLayout.js +1 -1
  220. package/src/main/js/sap/ushell/renderers/fiori2/resources/resources.properties +1 -1
  221. package/src/main/js/sap/ushell/renderers/fiori2/resources/resources_ko.properties +1 -1
  222. package/src/main/js/sap/ushell/renderers/fiori2/search/searchComponent/manifest.json +1 -1
  223. package/src/main/js/sap/ushell/services/AppConfiguration.js +3 -3
  224. package/src/main/js/sap/ushell/services/AppLifeCycle.js +1 -1
  225. package/src/main/js/sap/ushell/services/AppState.js +2 -3
  226. package/src/main/js/sap/ushell/services/Bookmark.js +1 -1
  227. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +1 -1
  228. package/src/main/js/sap/ushell/services/CommonDataModel.js +4 -5
  229. package/src/main/js/sap/ushell/services/Configuration.js +1 -2
  230. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +2 -2
  231. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  232. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +36 -33
  233. package/src/main/js/sap/ushell/services/DarkModeSupport.js +2 -2
  234. package/src/main/js/sap/ushell/services/EndUserFeedback.js +2 -2
  235. package/src/main/js/sap/ushell/services/LaunchPage.js +11 -8
  236. package/src/main/js/sap/ushell/services/Menu.js +31 -37
  237. package/src/main/js/sap/ushell/services/Message.js +1 -2
  238. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -2
  239. package/src/main/js/sap/ushell/services/NavTargetResolution.js +58 -9
  240. package/src/main/js/sap/ushell/services/Navigation.js +1356 -0
  241. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +7 -5
  242. package/src/main/js/sap/ushell/services/Notifications.js +16 -16
  243. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -2
  244. package/src/main/js/sap/ushell/services/PagePersistence.js +6 -6
  245. package/src/main/js/sap/ushell/services/PageReferencing.js +2 -2
  246. package/src/main/js/sap/ushell/services/Pages.js +24 -25
  247. package/src/main/js/sap/ushell/services/Personalization.js +5 -5
  248. package/src/main/js/sap/ushell/services/PluginManager.js +1 -2
  249. package/src/main/js/sap/ushell/services/ReferenceResolver.js +2 -2
  250. package/src/main/js/sap/ushell/services/Search.js +1 -1
  251. package/src/main/js/sap/ushell/services/SearchCEP.js +2 -1
  252. package/src/main/js/sap/ushell/services/SearchableContent.js +85 -59
  253. package/src/main/js/sap/ushell/services/ShellNavigation.js +59 -17
  254. package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +115 -39
  255. package/src/main/js/sap/ushell/services/SmartNavigation.js +4 -4
  256. package/src/main/js/sap/ushell/services/SpaceContent.js +5 -6
  257. package/src/main/js/sap/ushell/services/SupportTicket.js +1 -1
  258. package/src/main/js/sap/ushell/services/UITracer.js +5 -3
  259. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  260. package/src/main/js/sap/ushell/services/URLTemplate.js +2 -2
  261. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +7 -7
  262. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -2
  263. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  264. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  265. package/src/main/js/sap/ushell/services/UserRecents.js +91 -69
  266. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +10 -6
  267. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -3
  268. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Formatter.js +1 -1
  269. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/InboundIndex.js +1 -1
  270. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/InboundProvider.js +2 -5
  271. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/PrelaunchOperations.js +2 -2
  272. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Search.js +11 -11
  273. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/StagedLogger.js +1 -1
  274. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/SystemContext.js +1 -1
  275. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/Utils.js +6 -6
  276. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/VirtualInbounds.js +1 -1
  277. package/src/main/js/sap/ushell/services/_ClientSideTargetResolution/XAppStateProcessing.js +2 -2
  278. package/src/main/js/sap/ushell/services/_CommonDataModel/PersonalizationProcessor.js +1 -2
  279. package/src/main/js/sap/ushell/services/_CommonDataModel/SiteConverter.js +1 -1
  280. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  281. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  282. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +9 -14
  283. package/src/main/js/sap/ushell/services/_MessageBroker/MessageBrokerEngine.js +1 -1
  284. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  285. package/src/main/js/sap/ushell/services/_Personalization/ContextContainer.js +34 -21
  286. package/src/main/js/sap/ushell/services/_Personalization/Variant.js +5 -2
  287. package/src/main/js/sap/ushell/services/_Personalization/VariantSet.js +18 -12
  288. package/src/main/js/sap/ushell/services/_Personalization/utils.js +2 -2
  289. package/src/main/js/sap/ushell/services/_PluginManager/Extensions.js +1 -1
  290. package/src/main/js/sap/ushell/services/_PluginManager/HeaderExtensions.js +3 -3
  291. package/src/main/js/sap/ushell/services/_PluginManager/MenuExtensions.js +1 -1
  292. package/src/main/js/sap/ushell/services/_Ui5ComponentLoader/utils.js +1 -1
  293. package/src/main/js/sap/ushell/services/_UserRecents/RecentActivity.js +206 -214
  294. package/src/main/js/sap/ushell/services/_UserRecents/RecentAppsUsage.js +46 -54
  295. package/src/main/js/sap/ushell/services/_UserRecents/RecentsList.js +39 -40
  296. package/src/main/js/sap/ushell/services/_UserRecents/UserRecentsBase.js +29 -36
  297. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstance.js +1 -1
  298. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstanceAbap.js +1 -1
  299. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstanceCdm.js +1 -1
  300. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstanceLaunchPage.js +10 -8
  301. package/src/main/js/sap/ushell/services/_VisualizationInstantiation/VizInstanceLink.js +2 -2
  302. package/src/main/js/sap/ushell/services/appstate/LimitedBuffer.js +1 -2
  303. package/src/main/js/sap/ushell/services/appstate/Sequentializer.js +1 -1
  304. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  305. package/src/main/js/sap/ushell/themes/base/SearchCEP.less +8 -0
  306. package/src/main/js/sap/ushell/themes/base/ShellHeader.less +12 -6
  307. package/src/main/js/sap/ushell/themes/base/WorkPage.less +34 -4
  308. package/src/main/js/sap/ushell/themes/base/WorkPageCell.less +3 -1
  309. package/src/main/js/sap/ushell/themes/base/WorkPageColumn.less +3 -76
  310. package/src/main/js/sap/ushell/themes/base/WorkPageColumnResizer.less +2 -1
  311. package/src/main/js/sap/ushell/themes/base/WorkPageRow.less +822 -6
  312. package/src/main/js/sap/ushell/themes/sap_horizon/SearchCEP.less +4 -0
  313. package/src/main/js/sap/ushell/themes/sap_horizon/ToolAreaItem.less +1 -1
  314. package/src/main/js/sap/ushell/themes/sap_horizon_dark/SearchCEP.less +4 -0
  315. package/src/main/js/sap/ushell/themes/sap_horizon_dark/ToolAreaItem.less +1 -1
  316. package/src/main/js/sap/ushell/themes/sap_horizon_hcb/SearchCEP.less +5 -0
  317. package/src/main/js/sap/ushell/themes/sap_horizon_hcw/SearchCEP.less +5 -0
  318. package/src/main/js/sap/ushell/ui/AppContainer.js +0 -1
  319. package/src/main/js/sap/ushell/ui/ContentNodeSelector.js +1 -1
  320. package/src/main/js/sap/ushell/ui/QuickAccess.js +2 -2
  321. package/src/main/js/sap/ushell/ui/ShellHeader.js +21 -5
  322. package/src/main/js/sap/ushell/ui/ShellHeaderRenderer.js +1 -0
  323. package/src/main/js/sap/ushell/ui/appfinder/AppBox.js +0 -1
  324. package/src/main/js/sap/ushell/ui/bookmark/SaveOnPage.view.xml +6 -6
  325. package/src/main/js/sap/ushell/ui/cards/FrequentActivitiesExtension.js +1 -1
  326. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  327. package/src/main/js/sap/ushell/ui/footerbar/AboutButton.js +0 -1
  328. package/src/main/js/sap/ushell/ui/footerbar/AddBookmarkButton.js +32 -17
  329. package/src/main/js/sap/ushell/ui/footerbar/ContactSupportButton.js +0 -1
  330. package/src/main/js/sap/ushell/ui/footerbar/JamDiscussButton.js +0 -1
  331. package/src/main/js/sap/ushell/ui/footerbar/JamShareButton.js +0 -1
  332. package/src/main/js/sap/ushell/ui/footerbar/LogoutButton.js +0 -1
  333. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.view.js +1 -12
  334. package/src/main/js/sap/ushell/ui/footerbar/SendAsEmailButton.js +0 -1
  335. package/src/main/js/sap/ushell/ui/launchpad/ActionItem.js +0 -1
  336. package/src/main/js/sap/ushell/ui/launchpad/AnchorItem.js +0 -1
  337. package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBar.js +0 -1
  338. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  339. package/src/main/js/sap/ushell/ui/launchpad/FailedTileDialog.js +4 -4
  340. package/src/main/js/sap/ushell/ui/launchpad/GroupHeaderActions.js +0 -1
  341. package/src/main/js/sap/ushell/ui/launchpad/GroupListItem.js +0 -1
  342. package/src/main/js/sap/ushell/ui/launchpad/LinkTileWrapper.js +1 -1
  343. package/src/main/js/sap/ushell/ui/launchpad/LoadingDialog.js +0 -1
  344. package/src/main/js/sap/ushell/ui/launchpad/Page.js +1 -1
  345. package/src/main/js/sap/ushell/ui/launchpad/PlusTile.js +0 -1
  346. package/src/main/js/sap/ushell/ui/launchpad/Section.js +3 -3
  347. package/src/main/js/sap/ushell/ui/launchpad/Tile.js +0 -1
  348. package/src/main/js/sap/ushell/ui/launchpad/TileContainer.js +0 -1
  349. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +4 -5
  350. package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +1 -1
  351. package/src/main/js/sap/ushell/ui/shell/ShellHeadItem.js +7 -8
  352. package/src/main/js/sap/ushell/ui/shell/SysInfoBar.js +1 -1
  353. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -2
  354. package/src/main/js/sap/ushell/ui/tile/DynamicTile.js +0 -1
  355. package/src/main/js/sap/ushell/ui/tile/ImageTile.js +0 -1
  356. package/src/main/js/sap/ushell/ui/tile/StaticTile.js +0 -1
  357. package/src/main/js/sap/ushell/ui/tile/TileBase.js +0 -1
  358. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  359. package/src/main/js/sap/ushell/ui5service/ShellUIService.js +1 -1
  360. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  361. package/src/main/js/sap/ushell/ui5service/_ShellUIService/shelluiservice.class.factory.js +1 -1
  362. package/src/main/js/sap/ushell/utils/HttpClient.js +0 -1
  363. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +1 -1
  364. package/src/main/js/sap/ushell/utils/UrlParsing.js +18 -14
  365. package/src/main/js/sap/ushell/utils/UrlShortening.js +2 -2
  366. package/src/main/js/sap/ushell/utils/objectOperations.js +1 -1
  367. package/src/main/js/sap/ushell/utils/type.js +1 -1
  368. package/src/main/js/sap/ushell/utils/utilsCdm.js +3 -3
  369. package/src/main/js/sap/ushell/utils.js +128 -21
  370. package/src/test/js/sap/ushell/bootstrap/sandbox.js +2 -2
  371. package/ui5.yaml +1 -0
  372. package/src/main/js/sap/ushell/appRuntime/ui5/services/Menu.js +0 -22
@@ -4,11 +4,6 @@
4
4
  * @file The FESR Enhancer attaches to the Front End Sub-Records tracker by UI5.
5
5
  * UI5 tracks rendering and request activities and tries to detect what happens.
6
6
  * The ushell FESR Enhancer has then the possibility to overwrite and enhance the result with FLP specific information.
7
- * the following messages to debug log with
8
- * prefix [fesrEnhFlp] are added
9
- * - flp has passed on a record to fesr
10
- * - flp has not overwritten steps of pattern /press/
11
- * - flp has not overwritten steps of pattern /__cdm/
12
7
  * @private
13
8
  */
14
9
  sap.ui.define([
@@ -26,7 +21,10 @@ sap.ui.define([
26
21
  ) {
27
22
  "use strict";
28
23
 
29
- var SCENARIOS = {
24
+ const sModuleName = "FesrEnhancer";
25
+ const sLogPrefix = "[FesrFlp]";
26
+
27
+ const SCENARIOS = {
30
28
  HOME_INITIAL: "FLP@LOAD",
31
29
  HOME_LOADING: "FLP@DURING_LOAD",
32
30
  FINDER_INITIAL: "FLP@LOAD_FINDER",
@@ -43,13 +41,27 @@ sap.ui.define([
43
41
  ];
44
42
 
45
43
  // type of interaction, more details in "sap/ui/performance/trace/FESR.js"
46
- var INTERACTION_TYPE = {
44
+ const INTERACTION_TYPE = {
47
45
  APP_START: 1,
48
46
  STEP_IN_APP: 2,
49
47
  UNKNOWN: 3
50
48
  };
51
49
 
52
- var oFesrEnhancer = {
50
+ // only those fields are allowed to change on the fesr record
51
+ const aSupportedFields = [
52
+ "stepName",
53
+ "appNameLong",
54
+ "appNameShort",
55
+ "interactionType",
56
+ "timeToInteractive"
57
+ ];
58
+ const oFieldFormatting = {
59
+ stepName: { maxLength: 20 },
60
+ // appNameLong does not use any prefixes yet
61
+ appNameShort: { maxLength: 20 }
62
+ };
63
+
64
+ const oFesrEnhancer = {
53
65
  _fnOriginalOnBeforeCreated: null,
54
66
  _lastTrackedRecord: null,
55
67
 
@@ -89,7 +101,7 @@ sap.ui.define([
89
101
  if (bExactName) {
90
102
  return performance.getEntriesByName(sEventName);
91
103
  }
92
- return performance.getEntriesByType("mark").filter(function (oMark) {
104
+ return performance.getEntriesByType("mark").filter((oMark) => {
93
105
  return oMark.name.includes(sEventName);
94
106
  });
95
107
  },
@@ -100,7 +112,7 @@ sap.ui.define([
100
112
  * @returns {string} ID of the application.
101
113
  */
102
114
  _getLastTrackedApplicationId: function () {
103
- var oCurrentApplication = ShellAnalytics.getCurrentApplication();
115
+ const oCurrentApplication = ShellAnalytics.getCurrentApplication();
104
116
  if (oCurrentApplication) {
105
117
  return oCurrentApplication.id;
106
118
  }
@@ -134,254 +146,303 @@ sap.ui.define([
134
146
  * @param {string} oUi5FesrHandle.stepName The step name with <Trigger>_<Event>.
135
147
  * @param {string} oUi5FesrHandle.appNameLong The application name with max 70 chars.
136
148
  * @param {string} oUi5FesrHandle.appNameShort The application name with max 20 chars.
149
+ * @param {int} oUi5FesrHandle.interactionType type of interaction
137
150
  * @param {int} oUi5FesrHandle.timeToInteractive The detected end-to-end time of the step.
138
151
  * @param {object} oUi5Interaction The corresponding interaction object, read-only.
139
152
  * @returns {object} Modified header information.
140
153
  * @private
141
154
  */
142
155
  _onBeforeCreatedHandler: function (oUi5FesrHandle, oUi5Interaction) {
143
- var oDetectedScenario = this._detectScenario(oUi5FesrHandle, oUi5Interaction);
144
- var sApplicationId = this._getLastTrackedApplicationId();
145
-
146
- if (sApplicationId) {
147
- // Add the latest remembered Fiori ID to every record until a different Fiori ID is set.
148
- // This is needed to relate interactions tracked afterward to the started app.
149
- // Restriction: Fiori IDs are also added to not related interactions like FLP button clicks or shell plugin interactions.
150
- // Still, this is considered by S/4 and UI5 to be more helpful than not adding it anywhere.
151
- oUi5FesrHandle.appNameShort = sApplicationId;
152
- }
156
+ let oFesrHandle = deepExtend({}, oUi5FesrHandle); // copy first to prevent side effects
157
+
158
+ try {
159
+ const { scenario, relatedRecord } = this._detectScenario(oFesrHandle);
160
+ Log.debug(`${sLogPrefix} identified scenario: ${scenario}`, null, sModuleName);
161
+
162
+ const sApplicationId = this._getLastTrackedApplicationId();
163
+ if (sApplicationId) {
164
+ // Add the latest remembered Fiori ID to every record until a different Fiori ID is set.
165
+ // This is needed to relate interactions tracked afterward to the started app.
166
+ // Restriction: Fiori IDs are also added to not related interactions like FLP button clicks or shell plugin interactions.
167
+ // Still, this is considered by S/4 and UI5 to be more helpful than not adding it anywhere.
168
+ oFesrHandle.appNameShort = sApplicationId;
169
+ }
153
170
 
154
- if (!oDetectedScenario.scenario) {
155
- // unknown scenarios cannot be enhanced
156
- Log.debug("[fesrEnhFlp] unknown scenario, step name: " + oUi5FesrHandle.stepName);
157
- return oUi5FesrHandle;
158
- }
159
- var oAdjustedFesrRecord = this._enhanceRecord(oDetectedScenario.scenario, oUi5FesrHandle, oDetectedScenario.relatedEvent);
160
- Log.debug("[fesrEnhFlp] pass step name: " + oAdjustedFesrRecord.stepName);
161
- Log.debug("[fesrEnhFlp] pass short application name: " + oAdjustedFesrRecord.appNameShort);
162
- Log.debug("[fesrEnhFlp] pass long application name: " + oAdjustedFesrRecord.appNameLong);
163
- if (/tile.*press/.test(oAdjustedFesrRecord.stepName)) {
164
- Log.debug("[fesrEnhFlp] did not overwrite press step name");
165
- }
166
- if (/__cdm/.test(oAdjustedFesrRecord.stepName)) {
167
- Log.debug("[fesrEnhFlp] did not overwrite press step name(cdm)");
168
- }
171
+ let oEnhancement;
172
+ switch (scenario) {
173
+ case SCENARIOS.HOME_INITIAL:
174
+ case SCENARIOS.CUSTOM_HOME_INITIAL:
175
+ case SCENARIOS.FINDER_INITIAL:
176
+ oEnhancement = this._enhanceInitialStart(oFesrHandle, scenario, relatedRecord);
177
+ break;
178
+ case SCENARIOS.APP_INITIAL:
179
+ oEnhancement = this._enhanceInitialAppStart(scenario, relatedRecord);
180
+ break;
181
+ case SCENARIOS.NAVIGATION:
182
+ case SCENARIOS.HOME_LOADING:
183
+ oEnhancement = this._enhanceNavigationRecord(scenario, relatedRecord);
184
+ break;
185
+ default:
186
+ // unknown scenarios cannot be enhanced
187
+ Log.debug(`${sLogPrefix} unknown scenario, step name: ${oFesrHandle.stepName}`, null, sModuleName);
188
+ return oFesrHandle;
189
+ }
190
+
191
+ // Consumed in SchedulingAgent
192
+ if (START_UP_SCENARIOS.includes(scenario)) {
193
+ EventHub.emit("startUpFesrEnhanced", Date.now());
194
+ }
195
+
196
+ // Sanitize Enhancements
197
+ oEnhancement = Object.keys(oEnhancement).reduce((oResult, sKey) => {
198
+ const vValue = oEnhancement[sKey];
199
+ // only keep supported fields and actual values
200
+ if (aSupportedFields.includes(sKey) && !!vValue) {
201
+ const oFormat = oFieldFormatting[sKey];
202
+ if (oFormat && oFormat.maxLength) {
203
+ // FLP uses prefixes we want them to be always visible
204
+ oResult[sKey] = vValue.substring(0, oFormat.maxLength);
205
+ } else {
206
+ oResult[sKey] = vValue;
207
+ }
208
+ }
209
+ return oResult;
210
+ }, {});
169
211
 
170
- // Consumed in SchedulingAgent
171
- if (START_UP_SCENARIOS.includes(oDetectedScenario.scenario)) {
172
- EventHub.emit("startUpFesrEnhanced", Date.now());
212
+ oFesrHandle = {...oFesrHandle, ...oEnhancement};
213
+ Log.debug(`${sLogPrefix} passing enhancements:`, JSON.stringify(oEnhancement, null, 2), sModuleName);
214
+ } catch (oError) {
215
+ Log.error(`${sLogPrefix} Could not enhance the FESR:`, oError, sModuleName);
173
216
  }
174
217
 
175
- return oAdjustedFesrRecord;
218
+ Log.debug(`${sLogPrefix} => UI5: ${oFesrHandle.stepName} - ${oFesrHandle.appNameShort}`, null, sModuleName);
219
+
220
+ return oFesrHandle;
176
221
  },
177
222
 
178
223
  /**
179
- * Tries to detect the current scenario based on the given information.
224
+ * Determines the relevant PerformanceMark based on the related record
225
+ * @param {sap.ushell.performance.StatisticalRecord} oRelatedRecord The related Record
180
226
  *
181
- * @param {object} oUi5FesrHandle The FESR header information.
182
- * @param {object} oUi5Interaction The corresponding interaction object.
183
- * @returns {object} Returns an object which has at least a scenario property. This property may be null if the scenario is unknown.
184
- * There may also be a relatedEvent property if an event was used in order to detect the scenario.
227
+ * @returns {PerformanceMark|undefined} The relevant performance mark
185
228
  * @private
229
+ * @since 1.118
186
230
  */
187
- _detectScenario: function (oUi5FesrHandle, oUi5Interaction) {
188
- function createResultObject (sScenario, oEvent) {
189
- var oResult = {
190
- scenario: sScenario
191
- };
192
- if (oEvent) {
193
- oResult.relatedEvent = oEvent;
194
- }
195
- return oResult;
231
+ _getRelevantPerformanceMark: function (oRelatedRecord) {
232
+ if (!oRelatedRecord) {
233
+ Log.warning(`${sLogPrefix} Could not determine performance mark`, "No Statistical Record found", sModuleName);
234
+ return;
196
235
  }
197
236
 
198
- if (oUi5FesrHandle.stepName === "undetermined_startup") {
199
- var oLastRecord = ShellAnalytics.getLastClosedRecord();
200
- this._setLastTrackedRecord(oLastRecord);
201
- // case home app: Home app is detected in a special way.
202
- if (!!oLastRecord && oLastRecord.isTargetHomeApp) {
203
- return createResultObject(SCENARIOS.CUSTOM_HOME_INITIAL);
204
- }
205
- // case app finder, pages, and homepage
206
- switch (oUi5FesrHandle.appNameLong) {
207
- case "sap.ushell.components.homepage":
208
- case "sap.ushell.components.pages":
209
- return createResultObject(SCENARIOS.HOME_INITIAL);
210
- case "sap.ushell.components.appfinder":
211
- return createResultObject(SCENARIOS.FINDER_INITIAL);
237
+ const aMarks = [];
238
+ if (oRelatedRecord.getTargetIsHomeApp()) {
239
+ aMarks.push(this._getPerformanceEntries("FLP-TTI-Homepage-Custom", true)[0]);
240
+ } else {
241
+ switch (oRelatedRecord.getTargetApplication()) {
242
+ case "FLP_HOME":
243
+ aMarks.push(this._getPerformanceEntries("FLP-TTI-Homepage", true)[0]);
244
+ break;
245
+ case "FLP_PAGE":
246
+ aMarks.push(this._getPerformanceEntries("FLP-TTI-Homepage", true)[0]);
247
+ aMarks.push(this._getPerformanceEntries("FLP-Pages-Service-loadPage-end", false)[0]);
248
+ break;
249
+ case "FLP_FINDER":
250
+ aMarks.push(this._getPerformanceEntries("FLP-TTI-AppFinder", true)[0]);
251
+ break;
212
252
  default:
213
- // application direct start
214
- return createResultObject(SCENARIOS.APP_INITIAL, oLastRecord);
215
253
  }
216
254
  }
217
255
 
218
- var oLastTrackedRecord = this._getLastTrackedRecord();
219
- var aNavigationRecords = ShellAnalytics.getNextNavigationRecords(oLastTrackedRecord);
220
- var sScenario,
221
- oNavigationRecord;
222
-
223
- if (aNavigationRecords.length === 1) {
224
- oNavigationRecord = aNavigationRecords[0];
225
- // consider that if there was navigation the saved navigation and new navigation has different time
226
- if ((oNavigationRecord && oLastTrackedRecord && !oNavigationRecord.isEqual(oLastTrackedRecord)) || (!oLastTrackedRecord && oNavigationRecord)) {
227
- this._setLastTrackedRecord(oNavigationRecord);
228
- // specify navigation scenario further when during loading
229
- sScenario = oNavigationRecord.step === SCENARIOS.HOME_LOADING ? SCENARIOS.HOME_LOADING : SCENARIOS.NAVIGATION;
230
- return createResultObject(sScenario, oNavigationRecord);
256
+ return aMarks.filter((oMark) => {
257
+ // no mark found
258
+ if (!oMark) {
259
+ return false;
231
260
  }
232
- } else if (aNavigationRecords.length > 1) {
233
- aNavigationRecords.pop();
234
- oNavigationRecord = aNavigationRecords[0];
235
- this._setLastTrackedRecord(oNavigationRecord);
236
- sScenario = oNavigationRecord.step === SCENARIOS.HOME_LOADING ? SCENARIOS.HOME_LOADING : SCENARIOS.NAVIGATION;
237
- return createResultObject(sScenario, oNavigationRecord);
238
- }
239
- // no scenario detected
240
- return createResultObject(null);
261
+ if (typeof oMark.startTime !== "number") {
262
+ return false;
263
+ }
264
+ // mark was set after Statistical Record was opened
265
+ if (oMark.startTime > oRelatedRecord.getTimeStart()) {
266
+ return true;
267
+ }
268
+ return false;
269
+ })[0];
241
270
  },
242
271
 
243
272
  /**
244
- * Takes the given FESR information oIntermediateResult and returns an enhanced version using the given information.
245
- * replaces the time to interactive by
246
- * - performance mark FLP-TTI-Homepage in case of spaces & pages or home page
247
- * - performance mark FLP-TTI-Homepage-Custom in case of home app
248
- * - performance mark FLP-TTI-AppFinder in case of app finder
273
+ * Tries to detect the current scenario based on the given information.
249
274
  *
250
- * @param {string} sDetectedScenario The detected scenario which is the basis for the enhancement. See SCENARIOS.
251
- * @param {object} oIntermediateResult The header information that can be modified.
252
- * @param {string} oIntermediateResult.stepName The step name with <Trigger>_<Event>.
253
- * @param {string} oIntermediateResult.appNameLong The application name with max 70 chars.
254
- * @param {string} oIntermediateResult.appNameShort The application name with max 20 chars.
255
- * @param {int} oIntermediateResult.timeToInteractive The detected end-to-end time of the step.
256
- * @param {object} oRelatedEvent Event from _trackedEvents array which was used to detect the scenario.
257
- * @returns {object} enhanced oIntermediateResult
275
+ * @param {object} oFesrHandle The FESR header information.
276
+ * @returns {object} Returns an object which has at least a scenario property. This property may be null if the scenario is unknown.
258
277
  * @private
259
278
  */
260
- _enhanceRecord: function (sDetectedScenario, oIntermediateResult, oRelatedEvent) {
261
- switch (sDetectedScenario) {
262
- case SCENARIOS.HOME_INITIAL:
263
- return this._enhanceInitialStart(oIntermediateResult, sDetectedScenario, "FLP-TTI-Homepage");
264
- case SCENARIOS.CUSTOM_HOME_INITIAL:
265
- return this._enhanceInitialStart(oIntermediateResult, sDetectedScenario, "FLP-TTI-Homepage-Custom");
266
- case SCENARIOS.FINDER_INITIAL:
267
- return this._enhanceInitialStart(oIntermediateResult, sDetectedScenario, "FLP-TTI-AppFinder");
268
- case SCENARIOS.APP_INITIAL:
269
- return this._enhanceInitialAppStart(oIntermediateResult, sDetectedScenario, oRelatedEvent || {});
270
- case SCENARIOS.NAVIGATION:
271
- case SCENARIOS.HOME_LOADING:
272
- return this._enhanceNavigationRecord(oIntermediateResult, sDetectedScenario, oRelatedEvent || {});
273
- default:
274
- break;
279
+ _detectScenario: function (oFesrHandle) {
280
+ if (oFesrHandle.stepName === "undetermined_startup") {
281
+ let sDeterminedScenario;
282
+
283
+ const oLastClosedRecord = ShellAnalytics.getLastClosedRecord();
284
+
285
+ if (oLastClosedRecord) {
286
+ this._setLastTrackedRecord(oLastClosedRecord);
287
+ } else {
288
+ Log.warning(`${sLogPrefix} Identified undetermined_startup but could not find a closed StatisticalRecord`, null, sModuleName);
289
+ return {
290
+ scenario: null,
291
+ relatedRecord: null
292
+ };
293
+ }
294
+
295
+ // case home app: Home app is detected in a special way.
296
+ if (oLastClosedRecord.getTargetIsHomeApp()) {
297
+ sDeterminedScenario = SCENARIOS.CUSTOM_HOME_INITIAL;
298
+ } else {
299
+ // case app finder, pages, and homepage
300
+ switch (oFesrHandle.appNameLong) {
301
+ case "sap.ushell.components.homepage":
302
+ case "sap.ushell.components.pages":
303
+ sDeterminedScenario = SCENARIOS.HOME_INITIAL;
304
+ break;
305
+ case "sap.ushell.components.appfinder":
306
+ sDeterminedScenario = SCENARIOS.FINDER_INITIAL;
307
+ break;
308
+ default:
309
+ // application direct start
310
+ sDeterminedScenario = SCENARIOS.APP_INITIAL;
311
+ }
312
+ }
313
+
314
+ return {
315
+ scenario: sDeterminedScenario,
316
+ relatedRecord: oLastClosedRecord
317
+ };
318
+ }
319
+
320
+ const oLastTrackedRecord = this._getLastTrackedRecord();
321
+ const aUntrackedNavigationRecords = ShellAnalytics.getNextNavigationRecords(oLastTrackedRecord);
322
+
323
+ if (aUntrackedNavigationRecords.length) {
324
+ // take the last record, with this we stay in sync with the user action
325
+ const oNavigationRecord = aUntrackedNavigationRecords[aUntrackedNavigationRecords.length - 1];
326
+ if (aUntrackedNavigationRecords.length > 1) {
327
+ const aUntrackedHashes = aUntrackedNavigationRecords.reduce((aHashes, oRecord, iIndex) =>{
328
+ if (iIndex < aUntrackedNavigationRecords.length - 1) {
329
+ aHashes.push(oRecord.getTargetHash());
330
+ }
331
+ return aHashes;
332
+ }, []);
333
+ Log.warning(`${sLogPrefix} skipped Records:`, JSON.stringify(aUntrackedHashes, null, 2), sModuleName);
334
+ }
335
+
336
+ // do not track if last tracked record equals current record
337
+ if (oLastTrackedRecord && oNavigationRecord.isEqual(oLastTrackedRecord)) {
338
+ // no scenario detected
339
+ return {
340
+ scenario: null,
341
+ relatedRecord: null
342
+ };
343
+ }
344
+
345
+ this._setLastTrackedRecord(oNavigationRecord);
346
+ // specify navigation scenario further when during loading
347
+ const sScenario = oNavigationRecord.getStep() === SCENARIOS.HOME_LOADING ? SCENARIOS.HOME_LOADING : SCENARIOS.NAVIGATION;
348
+ return {
349
+ scenario: sScenario,
350
+ relatedRecord: oNavigationRecord
351
+ };
275
352
  }
276
353
 
277
- // unknown scenario
278
- Log.warning("[fesrEnhFlp] Unknown scenario at the end of execution, unnecessary code executed", null, "sap.ushell.performance.FesrEnhancer");
279
- return oIntermediateResult;
354
+ // no scenario detected
355
+ return {
356
+ scenario: null,
357
+ relatedRecord: null
358
+ };
280
359
  },
281
360
 
282
361
  /**
283
- * Takes the given FESR information oIntermediateResult and returns an enhanced version using the given information
362
+ * Takes the given FESR information and returns an enhancement using the given information
284
363
  * for scenario initial start.
285
364
  *
286
- * @param {object} oIntermediateResult Result that is enhanced.
365
+ * @param {object} oFesrHandle Result that is enhanced.
287
366
  * @param {string} sStepName Name of Step.
288
- * @param {string} sPerformanceMarkName Name of performance mark.
289
- * @returns {object} The enhanced version using the given information for scenario initial start.
367
+ * @param {sap.ushell.performance.StatisticalRecord} oRelatedRecord The related StatisticalRecord
368
+ *
369
+ * @returns {object} The enhancement for the initial start scenario.
290
370
  */
291
- _enhanceInitialStart: function (oIntermediateResult, sStepName, sPerformanceMarkName) {
292
- var oMark;
293
- var oEnhancedFesrHandle = deepExtend({}, oIntermediateResult);
371
+ _enhanceInitialStart: function (oFesrHandle, sStepName, oRelatedRecord) {
372
+ const oResult = {};
294
373
 
295
- // set step name
296
374
  if (sStepName === SCENARIOS.CUSTOM_HOME_INITIAL) {
297
375
  // special case: home app
298
- oEnhancedFesrHandle.stepName = sStepName + "@" + oIntermediateResult.appNameShort;
376
+ oResult.stepName = sStepName + "@" + oFesrHandle.appNameShort;
299
377
  } else {
300
378
  // ordinary case
301
- oEnhancedFesrHandle.stepName = sStepName;
379
+ oResult.stepName = sStepName;
302
380
  }
303
381
 
304
- // set interaction type
305
- oEnhancedFesrHandle.interactionType = INTERACTION_TYPE.APP_START;
306
-
307
- // set performance mark
308
- if (sPerformanceMarkName) {
309
- // if available also add the exact Time To Interactive
310
- oMark = this._getPerformanceEntries(sPerformanceMarkName, true)[0];
311
- if (oMark) {
312
- // in case of initial start, the startTime is most accurate
313
- oEnhancedFesrHandle.timeToInteractive = oMark.startTime;
314
- return oEnhancedFesrHandle;
315
- }
316
- // empty page
317
- oMark = this._getPerformanceEntries("FLP-Pages-Service-loadPage-end", false)[0];
318
- if (oMark) {
319
- // in case of empty page, the time load page end is most accurate
320
- oEnhancedFesrHandle.timeToInteractive = oMark.startTime;
321
- return oEnhancedFesrHandle;
322
- }
382
+ oResult.interactionType = INTERACTION_TYPE.APP_START;
383
+ oResult.appNameShort = oRelatedRecord.getTargetAppNameShort() || oRelatedRecord.getTargetApplication();
323
384
 
324
- Log.warning("[fesrEnhFlp] Scenario '" + sStepName + "' detected but expected performance mark '" +
325
- sPerformanceMarkName + "' does not exist",
326
- null, "sap.ushell.performance.FesrEnhancer"
327
- );
385
+ const oPerformanceMark = this._getRelevantPerformanceMark(oRelatedRecord);
386
+ if (oPerformanceMark) {
387
+ Log.debug(`${sLogPrefix} using performance mark: ${oPerformanceMark.name}`, null, sModuleName);
388
+ oResult.timeToInteractive = oPerformanceMark.startTime;
389
+ } else {
390
+ Log.warning(`${sLogPrefix} Scenario ${sStepName} detected did not found a performance mark`, null, sModuleName);
328
391
  }
329
392
 
330
- return oEnhancedFesrHandle;
393
+ return oResult;
331
394
  },
332
395
 
333
396
  /**
334
- * Takes the given FESR information oIntermediateResult and related record and returns an enhanced version
397
+ * Takes the given FESR information and related record and returns an enhancement
335
398
  * using the given information for scenario navigation.
336
399
  *
337
- * @param {object} oIntermediateResult Intermediate result.
338
400
  * @param {string} sDetectedScenario detected scenario
339
- * @param {object} oRelatedRecord Related record.
340
- * @returns {object} Adjusted FESR record.
401
+ * @param {sap.ushell.performance.StatisticalRecord} oRelatedRecord Related record.
402
+ *
403
+ * @returns {object} The enhancement for the navigation scenario.
341
404
  */
342
- _enhanceNavigationRecord: function (oIntermediateResult, sDetectedScenario, oRelatedRecord) {
343
- var oEnhancedFesrHandle = deepExtend({}, oIntermediateResult);
344
- // keep step from FESR
405
+ _enhanceNavigationRecord: function (sDetectedScenario, oRelatedRecord) {
406
+ const oResult = {};
345
407
  if (sDetectedScenario !== "FLP@DURING_LOAD") {
346
- oEnhancedFesrHandle.stepName = oRelatedRecord.step || oIntermediateResult.stepName;
408
+ oResult.stepName = oRelatedRecord.getStep();
347
409
  }
348
- oEnhancedFesrHandle.appNameShort = oRelatedRecord.targetApplication || "";
349
- if (oRelatedRecord.targetApplicationType === "UI5") {
350
- oEnhancedFesrHandle.interactionType = INTERACTION_TYPE.APP_START;
410
+
411
+ if (oRelatedRecord.getTargetApplicationType() === "UI5") {
412
+ oResult.interactionType = INTERACTION_TYPE.APP_START;
351
413
  }
352
414
 
353
- if (/^FLP_BACK/.test(oEnhancedFesrHandle.stepName)) {
354
- var oMark = this._getPerformanceEntries("FLP-TTI-Homepage", true)[0];
355
- if (oMark) {
356
- if (oMark.startTime > oRelatedRecord.getTimeStart()) {
357
- oEnhancedFesrHandle.timeToInteractive = oMark.startTime - oRelatedRecord.getTimeStart();
358
- }
359
- }
415
+ oResult.appNameShort = oRelatedRecord.getTargetAppNameShort() || oRelatedRecord.getTargetApplication();
416
+
417
+ // Adding TTI for navigating back from direct app start to home
418
+ const oPerformanceMark = this._getRelevantPerformanceMark(oRelatedRecord);
419
+ if (/^FLP_BACK/.test(oResult.stepName) && oPerformanceMark) {
420
+ Log.debug(`${sLogPrefix} using performance mark: ${oPerformanceMark.name}`, null, sModuleName);
421
+ oResult.timeToInteractive = oPerformanceMark.startTime - oRelatedRecord.getTimeStart();
360
422
  }
361
- return oEnhancedFesrHandle;
423
+ return oResult;
362
424
  },
363
425
 
364
426
  /**
365
- * Takes the given FESR information oIntermediateResult and returns an enhanced version using the given information
427
+ * Takes the given FESR information and returns an enhancement using the given information
366
428
  * for scenario initial app start.
367
429
  *
368
- * @param {object} oIntermediateResult Intermediate result.
369
430
  * @param {string} sStepName Name of the step.
370
431
  * @param {object} oRelatedRecord Related record.
371
- * @returns {object} Adjusted FESR record.
432
+ *
433
+ * @returns {object} The enhancement for the navigation scenario.
372
434
  */
373
- _enhanceInitialAppStart: function (oIntermediateResult, sStepName, oRelatedRecord) {
374
- var oEnhancedFesrHandle = deepExtend({}, oIntermediateResult);
375
- oEnhancedFesrHandle.stepName = sStepName;
376
- oEnhancedFesrHandle.appNameShort = oIntermediateResult.appNameShort;
435
+ _enhanceInitialAppStart: function (sStepName, oRelatedRecord) {
436
+ const oResult = {};
437
+ oResult.stepName = sStepName;
377
438
 
378
- if (oRelatedRecord.targetApplicationType === "UI5") {
379
- oEnhancedFesrHandle.interactionType = INTERACTION_TYPE.APP_START;
439
+ if (oRelatedRecord.getTargetApplicationType() === "UI5") {
440
+ oResult.interactionType = INTERACTION_TYPE.APP_START;
380
441
  } else {
381
- //Not UI5 applications handle the start flag theirself and we need to avoid duplication in the statistic
382
- oEnhancedFesrHandle.interactionType = INTERACTION_TYPE.STEP_IN_APP;
442
+ //Not UI5 applications handle the start flag themselves and we need to avoid duplication in the statistic
443
+ oResult.interactionType = INTERACTION_TYPE.STEP_IN_APP;
383
444
  }
384
- return oEnhancedFesrHandle;
445
+ return oResult;
385
446
  }
386
447
  };
387
448