@sapui5/sap.ushell 1.131.0 → 1.132.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 (418) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +37 -1
  3. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +26 -21
  4. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  5. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
  6. package/src/main/js/sap/ushell/NWBCInterface.js +1 -1
  7. package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
  8. package/src/main/js/sap/ushell/UIActions.js +8 -13
  9. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  10. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
  11. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
  12. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
  13. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
  14. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
  15. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  16. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  17. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  18. package/src/main/js/sap/ushell/User.js +74 -48
  19. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  20. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  21. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  22. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +67 -11
  23. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +1 -1
  24. package/src/main/js/sap/ushell/adapters/cdm/MenuAdapter.js +1 -1
  25. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  26. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
  28. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  29. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  30. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  31. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  33. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  34. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  35. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +1 -1
  36. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  41. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  44. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +357 -182
  46. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  51. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +68 -4
  54. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  61. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
  62. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  63. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  67. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  68. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +0 -11
  69. package/src/main/js/sap/ushell/appRuntime/ui5/BusyIndicator.js +21 -27
  70. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaAgent/i18n/i18n_en_US_saptrc.properties +5 -5
  71. package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaShell/i18n/i18n_en_US_saptrc.properties +2 -2
  72. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +1 -1
  73. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +1 -1
  74. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
  75. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycleAgent.js +4 -12
  76. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +1 -1
  77. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +1 -1
  78. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +1 -1
  79. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
  80. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +33 -9
  81. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +1 -1
  82. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
  83. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
  84. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
  85. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
  86. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
  87. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +1 -1
  88. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +1 -1
  89. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +1 -1
  90. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
  91. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +1 -1
  92. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +1 -1
  93. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +13 -1
  94. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
  95. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  96. package/src/main/js/sap/ushell/appRuntime/ui5/style.css +48 -0
  97. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/LoadingConfiguration.json +4 -0
  98. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/StepConfiguration.json +20 -0
  99. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
  100. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +10 -4
  101. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  102. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +11 -1
  103. package/src/main/js/sap/ushell/bootstrap/sandbox2/sandboxConfig.json +1 -2
  104. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
  105. package/src/main/js/sap/ushell/components/MessagingHelper.js +3 -3
  106. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  107. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +14 -11
  108. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +1 -1
  109. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +1 -1
  110. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +32 -51
  111. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +31 -68
  112. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +26 -8
  113. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +40 -32
  114. package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/i18n/i18n_en_US_saptrc.properties +37 -37
  115. package/src/main/js/sap/ushell/components/cepsearchresult/app/i18n/i18n_en_US_saptrc.properties +9 -9
  116. package/src/main/js/sap/ushell/components/cepsearchresult/app/util/i18n/i18n_en_US_saptrc.properties +109 -109
  117. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +2 -1
  118. package/src/main/js/sap/ushell/components/container/resources/resources_en_US_saptrc.properties +6 -6
  119. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +1 -1
  120. package/src/main/js/sap/ushell/components/contentFinder/Component.js +507 -359
  121. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +253 -161
  122. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +30 -39
  123. package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +98 -0
  124. package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +50 -0
  125. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +5 -6
  126. package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +193 -141
  127. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +14 -30
  128. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +6 -2
  129. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +7 -3
  130. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +6 -2
  131. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +6 -2
  132. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +6 -2
  133. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +6 -2
  134. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +6 -2
  135. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +6 -2
  136. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +6 -2
  137. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +6 -2
  138. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +6 -2
  139. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +2 -1
  140. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saptrc.properties +45 -26
  141. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +6 -2
  142. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +6 -2
  143. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +6 -2
  144. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +6 -2
  145. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +6 -2
  146. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +6 -2
  147. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +6 -2
  148. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +8 -4
  149. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +6 -2
  150. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +6 -2
  151. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +6 -2
  152. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +6 -2
  153. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +6 -2
  154. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +6 -2
  155. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +6 -2
  156. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +6 -2
  157. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +6 -2
  158. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +6 -2
  159. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +6 -2
  160. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +6 -2
  161. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +6 -2
  162. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +6 -2
  163. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +6 -2
  164. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +6 -2
  165. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +6 -2
  166. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +7 -3
  167. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +6 -2
  168. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +6 -2
  169. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +6 -2
  170. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +6 -2
  171. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +6 -2
  172. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +6 -2
  173. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +6 -2
  174. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +6 -2
  175. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +6 -2
  176. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +6 -2
  177. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +6 -2
  178. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +90 -96
  179. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchBox.fragment.xml +58 -38
  180. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +20 -8
  181. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchList.fragment.xml +41 -26
  182. package/src/main/js/sap/ushell/components/contentFinder/view/ContentFinderDialog.view.xml +24 -58
  183. package/src/main/js/sap/ushell/components/contentFinder/view/VisualizationsNoDataIllustratedMessage.fragment.xml +7 -9
  184. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +5 -5
  185. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +180 -162
  186. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +33 -4
  187. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources.properties +5 -0
  188. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_US_saptrc.properties +3 -0
  189. package/src/main/js/sap/ushell/components/contentFinderStandalone/view/ContentFinderStandalone.view.xml +9 -8
  190. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  191. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  192. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +5 -3
  193. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +1 -1
  194. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  195. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  196. package/src/main/js/sap/ushell/components/pages/ActionMode.js +1 -1
  197. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  198. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  199. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +49 -16
  200. package/src/main/js/sap/ushell/components/pages/fragment/DialogPageNotExists.fragment.xml +27 -0
  201. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  202. package/src/main/js/sap/ushell/components/pages/view/PageRuntime.view.xml +1 -6
  203. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  204. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  205. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  206. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +1 -0
  207. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  208. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +1 -1
  209. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -1
  210. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  211. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  212. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  213. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  214. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +4 -12
  215. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  216. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  217. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  218. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
  219. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +1 -1
  220. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +4 -1
  221. package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.view.xml +1 -1
  222. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +16 -0
  223. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.view.xml +40 -9
  224. package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +57 -0
  225. package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +432 -0
  226. package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +45 -0
  227. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +8 -0
  228. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +35 -0
  229. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  230. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  231. package/src/main/js/sap/ushell/components/tiles/applauncher/Configuration.view.xml +1 -1
  232. package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/Configuration.view.xml +1 -1
  233. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
  234. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +1 -1
  235. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
  236. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +61 -61
  237. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  238. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  239. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  240. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  241. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  242. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  243. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +4 -10
  244. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources.properties +6 -0
  245. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en_US_saptrc.properties +88 -77
  246. package/src/main/js/sap/ushell/components/workPageBuilder/view/WorkPageBuilder.view.xml +9 -2
  247. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  248. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +1 -1
  249. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  250. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  251. package/src/main/js/sap/ushell/library.js +7 -2
  252. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  253. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +1 -1
  254. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  255. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  256. package/src/main/js/sap/ushell/plugins/rta/i18n/i18n_en_US_saptrc.properties +8 -8
  257. package/src/main/js/sap/ushell/renderer/Renderer.js +2 -2
  258. package/src/main/js/sap/ushell/renderer/Shell.controller.js +27 -11
  259. package/src/main/js/sap/ushell/renderer/resources/resources.properties +8 -0
  260. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +8 -8
  261. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +8 -8
  262. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +8 -8
  263. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +8 -8
  264. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +8 -8
  265. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +8 -8
  266. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +8 -8
  267. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +8 -8
  268. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +8 -8
  269. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +8 -8
  270. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +8 -8
  271. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +4 -3
  272. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saptrc.properties +1009 -990
  273. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +12 -12
  274. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +8 -8
  275. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +8 -8
  276. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +8 -8
  277. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +8 -8
  278. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +8 -8
  279. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +7 -7
  280. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +29 -29
  281. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +8 -8
  282. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +12 -12
  283. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +8 -8
  284. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +8 -8
  285. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +8 -8
  286. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +8 -8
  287. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +8 -8
  288. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +8 -8
  289. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +8 -8
  290. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +10 -10
  291. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +8 -8
  292. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +8 -8
  293. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +8 -8
  294. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +8 -8
  295. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +8 -8
  296. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +8 -8
  297. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +19 -19
  298. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +8 -8
  299. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +8 -8
  300. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +8 -8
  301. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +8 -8
  302. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +8 -8
  303. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +8 -8
  304. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +16 -16
  305. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +8 -8
  306. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +9 -9
  307. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +9 -9
  308. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +8 -8
  309. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +8 -8
  310. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  311. package/src/main/js/sap/ushell/services/AppConfiguration.js +12 -4
  312. package/src/main/js/sap/ushell/services/AppLifeCycle.js +1 -1
  313. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  314. package/src/main/js/sap/ushell/services/Bookmark.js +56 -8
  315. package/src/main/js/sap/ushell/services/BookmarkV2.js +180 -171
  316. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
  317. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
  318. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
  319. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
  320. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
  321. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
  322. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
  323. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
  324. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
  325. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  326. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +1 -1
  327. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
  328. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
  329. package/src/main/js/sap/ushell/services/CommonDataModel.js +156 -137
  330. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  331. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  332. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  333. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +1 -1
  334. package/src/main/js/sap/ushell/services/DarkModeSupport.js +1 -1
  335. package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
  336. package/src/main/js/sap/ushell/services/Extension.js +1 -1
  337. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +17 -86
  338. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
  339. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
  340. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
  341. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
  342. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
  343. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
  344. package/src/main/js/sap/ushell/services/LaunchPage.js +1 -1
  345. package/src/main/js/sap/ushell/services/Menu.js +18 -1
  346. package/src/main/js/sap/ushell/services/Message.js +1 -1
  347. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +1 -1
  348. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
  349. package/src/main/js/sap/ushell/services/MessageInternal.js +1 -1
  350. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +1 -1
  351. package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
  352. package/src/main/js/sap/ushell/services/Navigation.js +1 -1
  353. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +1 -1
  354. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  355. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  356. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  357. package/src/main/js/sap/ushell/services/Pages.js +1 -1
  358. package/src/main/js/sap/ushell/services/Personalization.js +1 -1
  359. package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
  360. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
  361. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
  362. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
  363. package/src/main/js/sap/ushell/services/PluginManager.js +1 -1
  364. package/src/main/js/sap/ushell/services/ReferenceResolver.js +1 -1
  365. package/src/main/js/sap/ushell/services/Search.js +1 -1
  366. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  367. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  368. package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
  369. package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +3 -5
  370. package/src/main/js/sap/ushell/services/SmartNavigation.js +1 -1
  371. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  372. package/src/main/js/sap/ushell/services/UITracer.js +1 -1
  373. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  374. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  375. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +1 -1
  376. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +1 -1
  377. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  378. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  379. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  380. package/src/main/js/sap/ushell/services/UserRecents/RecentActivity.js +4 -1
  381. package/src/main/js/sap/ushell/services/UserRecents.js +1 -1
  382. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  383. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
  384. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  385. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  386. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
  387. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  388. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  389. package/src/main/js/sap/ushell/themes/base/Catalog.less +1 -0
  390. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.json +5 -1
  391. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.ttf +0 -0
  392. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff +0 -0
  393. package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff2 +0 -0
  394. package/src/main/js/sap/ushell/themes/sap_belize_base/Catalog.less +1 -0
  395. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/Catalog.less +1 -0
  396. package/src/main/js/sap/ushell/themes/sap_hcb/base_Catalog.less +1 -0
  397. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  398. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  399. package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
  400. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  401. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  402. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  403. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
  404. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  405. package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
  406. package/src/main/js/sap/ushell/utils/tilecard/resources/resources_en_US_saptrc.properties +3 -3
  407. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +8 -7
  408. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +75 -11
  409. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +47 -2
  410. package/src/main/js/sap/ushell/utils/workpage/resources/resources.properties +6 -0
  411. package/src/main/js/sap/ushell/utils/workpage/resources/resources_en_US_saptrc.properties +95 -77
  412. package/src/main/js/sap/ushell/utils/workpage/resources/resources_es.properties +5 -5
  413. package/src/main/js/sap/ushell/utils.js +1 -1
  414. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  415. package/ui5.yaml +1 -0
  416. package/src/main/js/sap/ushell/components/contentFinder/controller/WidgetGallery.controller.js +0 -62
  417. package/src/main/js/sap/ushell/components/contentFinder/view/WidgetGallery.view.xml +0 -102
  418. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifestAppSearch.json +0 -50
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * @fileOverview ContentFinder Component
4
4
  *
5
- * @version 1.131.0
5
+ * @version 1.132.0
6
6
  */
7
7
 
8
8
  sap.ui.define([
@@ -36,92 +36,50 @@ sap.ui.define([
36
36
  * @property {string} widgetId The ID of the selected widget type
37
37
  */
38
38
 
39
-
40
- /**
41
- * The available navigation targets
42
- */
43
- var oNavigationTargets = {
44
- widgetGallery: "widgetGallery",
45
- appSearchTiles: "appSearch_tiles",
46
- appSearchCards: "appSearch_cards"
47
- // TODO: appSearch_mixed: "appSearch_cards"
48
- };
49
-
50
- var oNavigationTargetTypeMapping = {
51
- appSearch_tiles: ["sap.ushell.StaticAppLauncher", "sap.ushell.DynamicAppLauncher"],
52
- appSearch_cards: ["sap.card"]
53
- };
54
-
55
- var oInitialSelectionData = {
56
- appSearch: {
57
- visualizations: {
58
- tiles: []
59
- }
60
- }
61
- };
62
-
63
- /**
64
- * Initial data to be set to the ContentFinder model.
65
- *
66
- * @type {object}
67
- */
68
- var oInitialData = {
69
- standalone: false, // If the ContentFinder is in standalone mode or not
70
- navigationTargets: oNavigationTargets,
71
-
72
- // The current/active navigation target within the ContentFinderDialog
73
- activeNavigationTarget: oNavigationTargets.widgetGallery,
74
- selectedCategoryId: undefined,
75
- selectedCategoryTitle: undefined,
76
-
77
- // A content finder in restricted mode shows no widget Gallery and starts directly with the appSearch.
78
- // Additionally, no "Back" button is rendered, as the end user cannot navigate to the WidgetGallery.
79
- restrictedMode: false,
80
-
81
- personalizationEnabled: false,
82
-
83
- widgetGallery: {
84
- widgetGroups: []
85
- },
86
-
87
- appSearch: {
88
- growingThreshold: 100,
89
- visualizationsLoaded: false,
90
- hasSelectables: true,
91
- currentSelectedTreeNode: "",
92
- searchTerm: "",
93
- filteredAppCount: 0,
94
- showSelectedPressed: false,
95
- showLaunchButton: false,
96
- visualizations: {
97
- cards: [],
98
- tiles: []
99
- },
100
- totalCount: 0,
101
- originalRestrictedVisualizations: [],
102
- restrictedVisualizations: [],
103
- listView: false
104
- },
105
- categoryTree: [],
106
- categoryTreeAvailable: false
107
- };
108
-
109
39
  /**
110
40
  * Component of the ContentFinder view.
111
41
  *
112
42
  * @param {string} sId Component id.
113
43
  * @param {object} mSettings Optional map for component settings.
44
+ *
114
45
  * @class
115
46
  * @extends sap.ui.core.UIComponent
116
- * @private
117
- * @since 1.113.0
118
47
  * @alias sap.ushell.components.contentFinder.Component
48
+ * @since 1.113.0
49
+ * @private
119
50
  */
120
51
  return UIComponent.extend("sap.ushell.components.contentFinder.Component", /** @lends sap.ushell.components.contentFinder.Component.prototype */{
121
52
  metadata: {
122
53
  manifest: "json",
123
54
  library: "sap.ushell",
124
55
  interfaces: ["sap.ui.core.IAsyncContentCreation"],
56
+ properties: {
57
+ enablePersonalization: {
58
+ type: "boolean",
59
+ defaultValue: true,
60
+ group: "Behavior"
61
+ },
62
+ noItemsInCatalogDescription: {
63
+ type: "string",
64
+ defaultValue: "",
65
+ group: "Appearance"
66
+ },
67
+ showAppBoxFieldsPlaceholder: {
68
+ type: "boolean",
69
+ defaultValue: true,
70
+ group: "Appearance"
71
+ },
72
+ showCategoryTreeWhenEmpty: {
73
+ type: "boolean",
74
+ defaultValue: true,
75
+ group: "Appearance"
76
+ },
77
+ showApplicationLaunchButton: {
78
+ type: "boolean",
79
+ defaultValue: false,
80
+ group: "Appearance"
81
+ }
82
+ },
125
83
  events: {
126
84
  /**
127
85
  * Fires when additional visualizations must be requested:
@@ -166,7 +124,7 @@ sap.ui.define([
166
124
  }
167
125
  },
168
126
  /**
169
- * Fires when the Content Finder dialog is closed:
127
+ * Fires when the Content Finder dialog is closed.
170
128
  * @type {object}
171
129
  * @since 1.113.0
172
130
  * @private
@@ -175,7 +133,7 @@ sap.ui.define([
175
133
  parameters: {}
176
134
  },
177
135
  /**
178
- * Fires when a widget is selected
136
+ * Fires when a widget is selected.
179
137
  * @type {object}
180
138
  * @since 1.112.0
181
139
  * @private
@@ -183,7 +141,7 @@ sap.ui.define([
183
141
  widgetSelected: {
184
142
  parameters: {
185
143
  /**
186
- * The currently selected widget ID
144
+ * The currently selected widget ID.
187
145
  */
188
146
  widgetId: { type: "string" }
189
147
  }
@@ -205,7 +163,7 @@ sap.ui.define([
205
163
  },
206
164
 
207
165
  /**
208
- * The string of the current contentFinder component for usage in Error Logs
166
+ * The string of the current contentFinder component for usage in Error Logs.
209
167
  * @type {string}
210
168
  */
211
169
  logComponent: "sap.ushell.components.ContentFinder.Component",
@@ -221,60 +179,218 @@ sap.ui.define([
221
179
 
222
180
  this.oResourceBundle = this.getModel("i18n").getResourceBundle();
223
181
 
224
- var oModel = new GraphQLModel();
225
- var oSelectionModel = new JSONModel();
182
+ // The "ui" model is used for the external and internal settings
183
+ // (e.g. component settings and internal configuration)
184
+ this.setModel(this.getUiModel(), "ui");
226
185
 
227
- oModel.setSizeLimit(Infinity);
228
- oSelectionModel.setSizeLimit(Infinity);
186
+ // The "unnamed" model is used for (external) data provided from the API.
187
+ // (e.g. "categoryTree", "visualizations")
188
+ this.setModel(this.getDataModel());
229
189
 
230
- this.setModel(oModel);
231
- this.setModel(oSelectionModel, "Selection");
190
+ // The "data" model is just an alias for the "unnamed" model which is used
191
+ // to swap the data and selection models on the GridList and Table.
192
+ // It is only used for this purpose.
193
+ this.setModel(this.getDataModel(), "data");
232
194
 
233
- this.initializeModel();
195
+ // The "selection" model is used for the selection mode in the GridList and the Table
196
+ this.setModel(this.getSelectionModel(), "selection");
197
+
198
+ this.initializeUiModel(false);
199
+ this.initializeDataModel();
234
200
  this.initializeSelectionModel();
201
+ // Keep in mind that applySettings is called after the init function and hence don't contain
202
+ // the properties (settings) provided with the component constructor.
203
+ // Property changes that require updates of dependent properties need to be triggered by
204
+ // binding events. Check the following method for an example:
205
+ this._initializeSidebarStatus();
206
+
207
+ const oComponentData = this.getComponentData();
208
+ if (oComponentData?.visualizationFilters) {
209
+ this.setVisualizationsFilters(oComponentData.visualizationFilters);
210
+ }
235
211
 
236
- this._oRootControlLoadedPromise = this.rootControlLoaded().then(function (oRootView) {
237
- this.oNavContainer = oRootView.byId("contentFinderNavContainer");
238
- this.oContentFinderWidgetGalleryPage = oRootView.byId("contentFinderWidgetGalleryPage");
239
- this.oContentFinderAppSearchPage = oRootView.byId("contentFinderAppSearchPage");
240
- this.oContentFinderAppSearchView = oRootView.byId("contentFinderAppSearchView");
241
- this.oDialog = oRootView.byId("contentFinderDialog");
242
- }.bind(this));
212
+ // Initialize Map which stores the restricted visualizations, which are visualizations
213
+ // that are already present on the section. This allows direct access to the keys and can be used in a
214
+ // formatter to indicate used visualizations.
215
+ this.oRestrictedVisualizationsMap = new Map();
216
+
217
+ // Indicates if the visualizations are currently loading to prevent additional events for data retrieval to be fired.
218
+ this._bLoading = false;
243
219
  },
244
220
 
245
221
  /**
246
- * Opens the content finder and shows the provided target (WidgetGallery or AppSearch).
247
- * Possible targets are: Widget Gallery (default): <code>widgetGallery</code>, App Search: <code>appSearch_tiles</code>.
222
+ * @typedef {object} VisualizationFilter A visualization filter.
223
+ * @property {string} key The key of the filter to be used. For example, in the "displayed" array.
224
+ * @property {string} title The translated title of the filter.
225
+ * @property {array<string>} types The visualization types (e.g. "sap.ushell.StaticAppLauncher", "sap.ushell.DynamicAppLauncher", "sap.card")
226
+ */
227
+ /**
228
+ * @typedef {object} VisualizationsFilters
229
+ * @property {VisualizationFilter[]} available The available visualization filters configuration objects.
230
+ * @property {string[]} displayed The keys of the displayed visualization filters.
231
+ * @property {string} selected The key of the selected visualization filter.
232
+ */
233
+ /**
234
+ * Sets the visualization filters used by the type selection filter.
248
235
  *
249
- * @param {string} [sTarget] Target view which is navigated to.
236
+ * @param {VisualizationsFilters} oVisualizationsFilters The visualization filters.
250
237
  *
251
- * @since 1.113.0
252
- * @returns {Promise<undefined>} Resolves with <code>undefined</code>.
253
- * @public
238
+ * @since 1.132.0
239
+ * @private
254
240
  */
255
- show: function (sTarget) {
256
- if (sTarget && !Object.values(oNavigationTargets).includes(sTarget)) {
257
- return Promise.reject(new Error("Invalid navigation target provided. Could not open ContentFinder dialog."));
241
+ setVisualizationsFilters: function (oVisualizationsFilters) {
242
+ const oUiModel = this.getUiModel();
243
+ if (oVisualizationsFilters?.available) {
244
+ oUiModel.setProperty("/visualizations/filters/available", oVisualizationsFilters.available);
245
+ }
246
+ if (oVisualizationsFilters?.displayed) {
247
+ oUiModel.setProperty("/visualizations/filters/displayed", oVisualizationsFilters.displayed);
258
248
  }
259
- sTarget = sTarget || oNavigationTargets.widgetGallery;
249
+ if (oVisualizationsFilters?.selected) {
250
+ oUiModel.setProperty("/visualizations/filters/selected", oVisualizationsFilters.selected);
251
+ }
252
+ },
260
253
 
261
- return this.navigate(sTarget).then(function () {
262
- this.oDialog.open();
263
- }.bind(this));
254
+ /**
255
+ * Returns the "ui" model.
256
+ *
257
+ * Creates a new JSONModel if it does not exist.
258
+ *
259
+ * @returns {sap.ui.model.json.JSONModel} The model.
260
+ *
261
+ * @since 1.132.0
262
+ * @private
263
+ */
264
+ getUiModel: function () {
265
+ if (!this.oUiModel) {
266
+ this.oUiModel = new JSONModel();
267
+ }
268
+ return this.oUiModel;
264
269
  },
265
270
 
266
271
  /**
267
- * Sets the widget groups (e.g. applications, premium widgets) for the content finder instance.
272
+ * Returns the "data" model.
268
273
  *
269
- * A row of the VBox as part of the WidgetGallery represents a single widget group.
270
- * A widget type represents a specific widget type like tiles or cards.
274
+ * Creates a new GraphQLModel if it does not exist.
271
275
  *
272
- * @param {object[]} aWidgetGroups An array of widget groups.
273
- * @since 1.113.0
276
+ * @returns {sap.ushell.components.contentFinder.model.GraphQLModel} The model.
277
+ *
278
+ * @since 1.132.0
279
+ * @private
280
+ */
281
+ getDataModel: function () {
282
+ if (!this.oDataModel) {
283
+ this.oDataModel = new GraphQLModel();
284
+ this.oDataModel.setSizeLimit(Infinity);
285
+ }
286
+ return this.oDataModel;
287
+ },
288
+
289
+ /**
290
+ * Returns the "selection" model.
291
+ *
292
+ * Creates a new JSONModel if it does not exist.
293
+ *
294
+ * @returns {sap.ui.model.json.JSONModel} The model.
295
+ *
296
+ * @since 1.132.0
297
+ * @private
298
+ */
299
+ getSelectionModel: function () {
300
+ if (!this.oSelectionModel) {
301
+ this.oSelectionModel = new JSONModel();
302
+ this.oSelectionModel.setSizeLimit(Infinity);
303
+ }
304
+ return this.oSelectionModel;
305
+ },
306
+
307
+ /**
308
+ * Sets a component setting as a property in the "ui" model.
309
+ *
310
+ * Helper method to set a property in the component properties and the "ui" model.
311
+ * The name of the property must be the same in the component and the model.
312
+ *
313
+ * @param {string} sPropertyName The name of the property in the component and the model
314
+ * @param {any} vValue The value of the property.
315
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
316
+ *
317
+ * @since 1.132.0
318
+ * @private
319
+ */
320
+ _setComponentSettingsProperty: function (sPropertyName, vValue) {
321
+ this.setProperty(sPropertyName, vValue);
322
+ this.getModel("ui").setProperty("/componentSettings/" + sPropertyName, vValue);
323
+ return this;
324
+ },
325
+
326
+ /**
327
+ * Sets the enablePersonalization property.
328
+ *
329
+ * If set to true, the visualizations are selectable and can be added to the page.
330
+ *
331
+ * @param {boolean} bEnablePersonalization True if personalization is enabled.
332
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
333
+ *
334
+ * @since 1.132.0
335
+ * @public
336
+ */
337
+ setEnablePersonalization: function (bEnablePersonalization) {
338
+ return this._setComponentSettingsProperty("enablePersonalization", !!bEnablePersonalization);
339
+ },
340
+
341
+ /**
342
+ * Sets the description for the "No items in catalog" message.
343
+ *
344
+ * The description is shown when no items are available in the catalog. This translation is provided
345
+ * from the consumer because the ContentFinder does not know if it is in design or runtime mode.
346
+ *
347
+ * @param {string} sNoItemsInCatalogDescription The actual string for the description and not the i18n key.
348
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
349
+ *
350
+ * @since 1.132.0
351
+ * public
352
+ */
353
+ setNoItemsInCatalogDescription: function (sNoItemsInCatalogDescription) {
354
+ return this._setComponentSettingsProperty("noItemsInCatalogDescription", sNoItemsInCatalogDescription);
355
+ },
356
+
357
+ /**
358
+ * Sets the visibility of the app box fields which are empty.
359
+ *
360
+ * @param {boolean} bShowAppBoxFieldsPlaceholder True if all app box fields should be shown.
361
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
362
+ *
363
+ * @since 1.132.0
364
+ * @public
365
+ */
366
+ setShowAppBoxFieldsPlaceholder: function (bShowAppBoxFieldsPlaceholder) {
367
+ return this._setComponentSettingsProperty("showAppBoxFieldsPlaceholder", !!bShowAppBoxFieldsPlaceholder);
368
+ },
369
+
370
+ /**
371
+ * Sets the visibility of the category tree when it is empty.
372
+ *
373
+ * @param {boolean} bShowCategoryTreeWhenEmpty True if the category tree should be shown when empty.
374
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
375
+ *
376
+ * @since 1.132.0
377
+ * @public
378
+ */
379
+ setShowCategoryTreeWhenEmpty: function (bShowCategoryTreeWhenEmpty) {
380
+ return this._setComponentSettingsProperty("showCategoryTreeWhenEmpty", !!bShowCategoryTreeWhenEmpty);
381
+ },
382
+
383
+ /**
384
+ * Sets the visibility of the application launch button.
385
+ *
386
+ * @param {boolean} bShowApplicationLaunchButton True if the application launch button should be shown.
387
+ * @returns {sap.ushell.components.contentFinder.Component} The Content Finder component instance.
388
+ *
389
+ * @since 1.132.0
274
390
  * @public
275
391
  */
276
- setWidgetGroups: function (aWidgetGroups) {
277
- this.getModel().setProperty("/widgetGallery/widgetGroups", aWidgetGroups);
392
+ setShowApplicationLaunchButton: function (bShowApplicationLaunchButton) {
393
+ return this._setComponentSettingsProperty("showApplicationLaunchButton", !!bShowApplicationLaunchButton);
278
394
  },
279
395
 
280
396
  /**
@@ -298,39 +414,46 @@ sap.ui.define([
298
414
  * the FlexibleColumnLayout to TwoColumnsMidExpanded.
299
415
  *
300
416
  * @param {CategoryTreeItem[]|[]} aCategoryTree A tree of category objects.
417
+ *
301
418
  * @experimental
419
+ * @since 1.123.0
302
420
  * @private
303
421
  */
304
422
  setCategoryTree: function (aCategoryTree) {
305
- this.getModel().setProperty("/categoryTree", aCategoryTree);
306
- this.initializeSidebarStatus();
423
+ const oDataModel = this.getDataModel();
424
+ if (!Array.isArray(aCategoryTree)) {
425
+ Log.error("Category tree data must be an array.");
426
+ aCategoryTree = [];
427
+ }
428
+ oDataModel.setProperty("/categoryTree", aCategoryTree);
307
429
  },
308
430
 
309
431
  /**
310
432
  * Fires the event to query for visualizations.
311
433
  *
312
- * @since 1.115.0
313
434
  * @param {int} iSkip Number of entries already displayed.
314
435
  * @param {string} [sSearchTerm] The search term.
315
436
  * @param {string} [sCategoryId] The category ID resulting from the category tree selection
316
437
  *
438
+ * @since 1.115.0
317
439
  * @private
318
440
  */
319
441
  queryVisualizations: function (iSkip, sSearchTerm, sCategoryId) {
320
- var oModel = this.getModel();
321
- var sActiveNavigationTarget = oModel.getProperty("/activeNavigationTarget");
322
- var aTypes = oNavigationTargetTypeMapping[sActiveNavigationTarget] || [];
442
+ const oUiModel = this.getUiModel();
443
+ const sSelectedVisualizationFilter = oUiModel.getProperty("/visualizations/filters/selected");
444
+ const aAvailableVisualizationFilters = oUiModel.getProperty("/visualizations/filters/available");
445
+ const oSelected = aAvailableVisualizationFilters.find((oElement) => oElement.key === sSelectedVisualizationFilter);
323
446
 
324
447
  if (!this._bLoading) {
325
448
  this._bLoading = true;
326
- oModel.setProperty("/appSearch/visualizationsLoaded", false);
449
+ oUiModel.setProperty("/visualizations/loaded", false);
327
450
 
328
451
  this.fireEvent("visualizationFilterApplied", {
329
452
  pagination: {
330
- skip: iSkip,
331
- top: oModel.getProperty("/appSearch/growingThreshold")
453
+ skip: iSkip || 0,
454
+ top: oUiModel.getProperty("/visualizations/growingThreshold")
332
455
  },
333
- types: aTypes,
456
+ types: oSelected?.types || [],
334
457
  search: sSearchTerm || null,
335
458
  categoryId: sCategoryId || null
336
459
  });
@@ -338,80 +461,61 @@ sap.ui.define([
338
461
  },
339
462
 
340
463
  /**
341
- * Concatenates the visualization data for the Content Finder model.
342
- * Will replace 'setVisualizationData' once pagination is available.
464
+ * Replaces or concatenates the visualization data.
343
465
  *
344
466
  * @param {object} oVisualizationData An object containing all the visualization data as arrays.
467
+ * @param {boolean} [bReplaceVisualizations] If true, the visualizations will be replaced.
468
+ *
345
469
  * @since 1.115.0
346
470
  * @private
347
471
  */
348
- setVisualizationData: function (oVisualizationData) {
349
- var aVisualizations = ObjectPath.get("visualizations.nodes", oVisualizationData) || [];
350
- var iTotalCount = ObjectPath.get("visualizations.totalCount", oVisualizationData) || 0;
351
- var oModel = this.getModel();
352
-
353
- // Prepare AppBox object structure for tiles and cards
354
- var aTiles = this._prepareTiles(aVisualizations);
355
- var aCards = this._prepareCards(aVisualizations);
356
-
357
- var aExistingTiles = oModel.getProperty("/appSearch/visualizations/tiles");
358
- var aExistingCards = oModel.getProperty("/appSearch/visualizations/cards");
472
+ setVisualizationData: function (oVisualizationData, bReplaceVisualizations = false) {
473
+ const aVisualizations = ObjectPath.get("visualizations.nodes", oVisualizationData) || [];
474
+ const iTotalCount = ObjectPath.get("visualizations.totalCount", oVisualizationData) || 0;
475
+ const oDataModel = this.getDataModel();
476
+ const oUiModel = this.getUiModel();
477
+
478
+ // Prepare object structure for visualizations
479
+ const aPreparedVisualizations = this._prepareVisualizations(aVisualizations);
480
+
481
+ // Replace or append to existing visualizations
482
+ let aExistingVisualizations;
483
+ if (bReplaceVisualizations) {
484
+ aExistingVisualizations = [];
485
+ } else {
486
+ aExistingVisualizations = oDataModel.getProperty("/visualizations/items");
487
+ }
488
+ oDataModel.setProperty("/visualizations/items", aExistingVisualizations.concat(deepExtend([], aPreparedVisualizations)));
359
489
 
360
- oModel.setProperty("/appSearch/visualizations/tiles", aExistingTiles.concat(deepExtend([], aTiles)));
361
- oModel.setProperty("/appSearch/visualizations/cards", aExistingCards.concat(deepExtend([], aCards)));
362
- oModel.setProperty("/appSearch/totalCount", iTotalCount);
363
- oModel.setProperty("/appSearch/filteredAppCount", iTotalCount);
364
- oModel.setProperty("/appSearch/visualizationsLoaded", true);
490
+ oDataModel.setProperty("/visualizations/totalCount", iTotalCount);
491
+ oUiModel.setProperty("/visualizations/loaded", true);
365
492
 
366
- this._updateVisualizationsRestricted();
367
493
  this._bLoading = false;
368
494
  },
369
495
 
370
- /**
371
- * Sets the restricted mode for the Content Finder.
372
- *
373
- * A content finder in restricted mode shows no "Back" button as part of the AppSearch view.
374
- *
375
- * @param {boolean} bRestrictedMode A boolean representing whether the content finder is restricted or not.
376
- * @since 1.113.0
377
- * @public
378
- */
379
- setRestrictedMode: function (bRestrictedMode) {
380
- this.getModel().setProperty("/restrictedMode", !!bRestrictedMode);
381
- },
382
-
383
496
  /**
384
497
  * Adds context data to visualization data.
385
498
  *
386
- * This context can be used to set restricted visualizations.
387
- * Restricted visualizations are non-selectable widgets which are already present on the page.
499
+ * This context can be used to set restricted visualizations. Restricted visualizations are
500
+ * visualizations which are already present in the section.
388
501
  *
389
502
  * @param {object} oContextData The context data with the restricted visualizations.
503
+ * @param {array<string>} [oContextData.restrictedVisualizations] An array of restricted visualization IDs.
504
+ *
390
505
  * @since 1.113.0
391
506
  * @public
392
507
  */
393
508
  setContextData: function (oContextData) {
394
- var aRestrictedVisualizations = ObjectPath.get("restrictedVisualizations", oContextData) || [];
395
- var oModel = this.getModel();
396
-
397
- oModel.setProperty("/appSearch/originalRestrictedVisualizations", deepExtend([], aRestrictedVisualizations));
509
+ const aRestrictedVisualizations = ObjectPath.get("restrictedVisualizations", oContextData) || [];
510
+ const oModel = this.getDataModel();
398
511
 
399
- oModel.setProperty("/appSearch/restrictedVisualizations", deepExtend([], aRestrictedVisualizations));
400
-
401
- this._updateVisualizationsRestricted();
402
- },
512
+ this.oRestrictedVisualizationsMap.clear();
513
+ aRestrictedVisualizations.forEach((sId) => {
514
+ this.oRestrictedVisualizationsMap.set(sId, true);
515
+ });
403
516
 
404
- /**
405
- * Returns the NavContainer.
406
- *
407
- * @returns {Promise<sap.m.NavContainer>} Resolves with the NavContainer.
408
- * @since 1.113.0
409
- * @private
410
- */
411
- getNavContainer: function () {
412
- return this._oRootControlLoadedPromise.then(function () {
413
- return this.oNavContainer;
414
- }.bind(this));
517
+ // Should be called last to trigger the bindings
518
+ oModel.setProperty("/visualizations/restrictedItems", deepExtend([], aRestrictedVisualizations));
415
519
  },
416
520
 
417
521
  /**
@@ -426,6 +530,7 @@ sap.ui.define([
426
530
  *
427
531
  * @fires sap.ushell.components.contentFinder.Component#visualizationsAdded
428
532
  * @param {Visualization[]} aVisualizationsToAdd An array of visualizations to be added.
533
+ *
429
534
  * @since 1.113.0
430
535
  * @private
431
536
  */
@@ -436,126 +541,179 @@ sap.ui.define([
436
541
  });
437
542
  }
438
543
  },
544
+
439
545
  /**
440
546
  * Function to trigger the <code>contentFinderClosed</code> event.
441
547
  * It will fire the `contentFinderClosed` without any parameters.
442
- * @since 1.131.0
548
+ *
549
+ * @since 1.132.0
443
550
  * @private
444
551
  */
445
- triggerContentFinderClosed: function() {
552
+ triggerContentFinderClosed: function () {
446
553
  this.fireEvent("contentFinderClosed");
447
554
  },
555
+
448
556
  /**
449
557
  * Fires the <code>widgetSelected</code> event .
558
+ *
450
559
  * @param {string} [widgetId] The widget ID resulting from the widget selection.
451
- * @since 1.131.0
560
+ *
561
+ * @since 1.132.0
452
562
  * @private
453
563
  */
454
564
  triggerWidgetSelected: function (widgetId) {
455
565
  if (widgetId) {
456
- this.fireEvent("widgetSelected", { widgetId: widgetId });
566
+ this.fireEvent("widgetSelected", {widgetId: widgetId});
457
567
  }
458
568
  },
569
+
459
570
  /**
460
- * Resets the AppSearch, but keeps originally passed visualizations in the model.
571
+ * Resets the AppSearch, but keeps originally passed settings in the model.
461
572
  *
462
- * Resetting the AppSearch is necessary when navigating away from the AppSearch.
573
+ * Should net empty visualizations, but reset all the data which needs to be initialized again
574
+ * if the consumer closes and opens the Content Finder again.
463
575
  *
464
576
  * @since 1.113.0
465
577
  * @private
466
578
  */
467
579
  resetAppSearch: function () {
468
- this.oContentFinderAppSearchView.getController().resetAppSearch();
580
+ this.initializeUiModel(true);
581
+ this.initializeSelectionModel();
582
+ this.useSelectionModel(false);
583
+ this.updateSidebarStatus();
469
584
  },
470
585
 
471
586
  /**
472
- * Executes the navigation from one view to another view.
587
+ * Switches the default model to the selection model or the data model.
473
588
  *
474
- * @param {string} [sTarget] Target view which is navigated to.
475
- * @since 1.113.0
476
- * @returns {Promise<undefined>} Resolves with <code>undefined</code>.
589
+ * @param {boolean} bEnable True if the selection model or false if the data model should be used.
590
+ *
591
+ * @since 1.132.0
477
592
  * @private
478
593
  */
479
- navigate: function (sTarget) {
480
- var oModel = this.getModel();
594
+ useSelectionModel: function (bEnable) {
595
+ let oModel;
596
+ if (bEnable) {
597
+ oModel = this.getSelectionModel();
598
+ } else {
599
+ oModel = this.getDataModel();
600
+ }
601
+ this.setModel(oModel, "data");
602
+ },
481
603
 
482
- oModel.setProperty("/activeNavigationTarget", sTarget);
483
- if (sTarget === oNavigationTargets.appSearchCards) {
484
- this.initializeSidebarStatus();
604
+ /**
605
+ * Initializes the content finder model.
606
+ *
607
+ * @param {boolean} [bPreserveData] If true, the data is preserved.
608
+ *
609
+ * @since 1.132.0
610
+ * @private
611
+ */
612
+ initializeUiModel: function (bPreserveData = false) {
613
+ const oModel = this.getUiModel();
614
+
615
+ let oPreservedData;
616
+ if (bPreserveData) {
617
+ oPreservedData = {
618
+ preservedLayoutType: oModel.getProperty("/preservedLayoutType"),
619
+ categoryTree: oModel.getProperty("/categoryTree"),
620
+ visualizations: {
621
+ filters: oModel.getProperty("/visualizations/filters"),
622
+ listView: oModel.getProperty("/visualizations/listView")
623
+ }
624
+ };
485
625
  }
486
- if (sTarget === oNavigationTargets.appSearchTiles || sTarget === oNavigationTargets.appSearchCards) {
487
- oModel.setProperty("/appSearch/visualizations/tiles", []);
488
- oModel.setProperty("/appSearch/visualizations/cards", []);
489
626
 
490
- this._bLoading = false;
627
+ oModel.setData({
628
+ // Settings which are only used internally
629
+ layoutType: LayoutType.TwoColumnsMidExpanded,
630
+ preservedLayoutType: LayoutType.TwoColumnsMidExpanded,
631
+ maxColumnsCount: 2,
632
+
633
+ // Settings provided to the component as settings parameter
634
+ componentSettings: {
635
+ enablePersonalization: this.getEnablePersonalization(),
636
+ noItemsInCatalogDescription: this.getNoItemsInCatalogDescription(),
637
+ showAppBoxFieldsPlaceholder: this.getShowAppBoxFieldsPlaceholder(),
638
+ showCategoryTreeWhenEmpty: this.getShowCategoryTreeWhenEmpty(),
639
+ showApplicationLaunchButton: this.getShowApplicationLaunchButton()
640
+ },
491
641
 
492
- this.queryVisualizations(0);
642
+ categoryTree: {
643
+ // If the categoryTree has data (array is not empty)
644
+ hasData: false,
645
+ itemPressed: false,
646
+ selectedId: undefined,
647
+ selectedTitle: undefined,
648
+ // If the categoryTree is currently visible by considering the available space.
649
+ visible: true
650
+ },
493
651
 
494
- return this.getNavContainer().then(function (oNavContainer) {
495
- oNavContainer.to(this.oContentFinderAppSearchPage);
496
- }.bind(this));
497
- }
652
+ visualizations: {
653
+ appliedSearchTerm: "",
654
+ filters: {
655
+ displayed: [],
656
+ filterIsTitle: true,
657
+ selected: "tiles",
658
+ available: []
659
+ },
660
+ growingThreshold: 100,
661
+ listView: false,
662
+ loaded: false,
663
+ searchFieldValue: "",
664
+ searchTerm: "",
665
+ showSelectedPressed: false
666
+ }
667
+ });
498
668
 
499
- return this.getNavContainer().then(function (oNavContainer) {
500
- oNavContainer.to(this.oContentFinderWidgetGalleryPage);
501
- }.bind(this));
669
+ if (bPreserveData) {
670
+ oModel.setData(oPreservedData, true);
671
+ }
502
672
  },
503
673
 
504
674
  /**
505
- * Initializes the content finder model.
675
+ * Initializes the data model.
506
676
  *
507
- * It is also called again after closing the dialog.
508
- *
509
- * @since 1.113.0
677
+ * @since 1.132.0
510
678
  * @private
511
679
  */
512
- initializeModel: function () {
513
- const oModel = this.getModel();
514
- oModel.setData(deepExtend({}, oInitialData));
515
- this.initializeModelData(oModel);
680
+ initializeDataModel: function () {
681
+ this.getDataModel().setData({
682
+ categoryTree: [],
683
+ visualizations: {
684
+ items: [],
685
+ totalCount: 0,
686
+ restrictedItems: []
687
+ }
688
+ });
516
689
  },
517
690
 
518
691
  /**
519
- * Initializes the Selection model with an empty selection
692
+ * Initializes the selection model.
520
693
  *
521
- * @since 1.121.0
694
+ * @since 1.132.0
522
695
  * @private
523
696
  */
524
697
  initializeSelectionModel: function () {
525
- const oModel = this.getModel("Selection");
526
- oModel.setData(deepExtend({}, oInitialSelectionData));
527
- this.initializeModelData(oModel);
698
+ this.getSelectionModel().setData({
699
+ visualizations: {
700
+ items: [],
701
+ totalCount: 0,
702
+ restrictedItems: []
703
+ }
704
+ });
528
705
  },
529
706
 
530
707
  /**
531
- * Initializes the model data.
532
- *
533
- * The method should also set all model related properties to their initial values.
708
+ * Resets the visualizations in the data model.
534
709
  *
535
- * @param {sap.ui.model.json.JSONModel} oModel The model to initialize
536
- * @since 1.131.0
710
+ * @since 1.132.0
537
711
  * @private
538
712
  */
539
- initializeModelData: function (oModel) {
540
- // If a siteId is set, the AppFinder is in run time mode, without siteId design time mode.
541
- const oUrlParams = new URLSearchParams(window.location.search);
542
- const bIsDesignTime = !(oUrlParams.get("siteId") || Config.last("/core/site/siteId"));
543
-
544
- // The category tree is always available in design time.
545
- oModel.setProperty("/appSearch/isDesignTime", bIsDesignTime);
546
-
547
- oModel.setProperty("/categoryTreeAvailable", bIsDesignTime);
548
- oModel.setProperty("/appSearch/showLaunchButton", !bIsDesignTime);
549
- oModel.setProperty("/personalizationEnabled", Config.last("/core/shell/enablePersonalization"));
550
-
551
- this.initializeSidebarStatus();
552
-
553
- /**
554
- * Temporary fallback to the classic AppFinder in case the Content Finder causes issues or does not show all required data.
555
- */
556
- const oUrl = new URL(location.href);
557
- oUrl.searchParams.append("sap-ushell-xx-overwrite-config", "/core/workPages/contentFinderStandalone:false");
558
- oModel.setProperty("/linkToAppFinder", oUrl.toString());
713
+ resetVisualizations: function () {
714
+ const oDataModel = this.getDataModel();
715
+ oDataModel.setProperty("/visualizations/items", []);
716
+ oDataModel.setProperty("/visualizations/totalCount", 0);
559
717
  },
560
718
 
561
719
  /**
@@ -563,163 +721,153 @@ sap.ui.define([
563
721
  *
564
722
  * The sidebar status is set to MidColumnFullScreen (no category tree) if the category tree is empty in run time.
565
723
  *
566
- * @since 1.131.0
724
+ * @since 1.132.0
567
725
  * @private
568
726
  */
569
- initializeSidebarStatus: function () {
570
- const oModel = this.getModel();
571
-
572
- const bDesignTime = oModel.getProperty("/appSearch/isDesignTime");
573
- const vCategoryTree = oModel.getProperty("/categoryTree");
574
- const sActiveNavigationTarget = oModel.getProperty("/activeNavigationTarget");
575
-
576
- if ((!bDesignTime && vCategoryTree?.length === 0) || (bDesignTime && sActiveNavigationTarget === oNavigationTargets.appSearchCards)) {
577
- oModel.setProperty("/categoryTreeAvailable", false);
578
- oModel.setProperty("/sidebarStatus", LayoutType.MidColumnFullScreen);
579
- } else {
580
- oModel.setProperty("/categoryTreeAvailable", Array.isArray(vCategoryTree));
581
- oModel.setProperty("/sidebarStatus", LayoutType.TwoColumnsMidExpanded);
582
- }
727
+ _initializeSidebarStatus: function () {
728
+ const oDataModel = this.getDataModel();
729
+ const oUiModel = this.getUiModel();
730
+
731
+ this.oCategoryTreeLengthBinding = oDataModel.bindProperty("/categoryTree/length");
732
+ this.oShowCategoryTreeWhenEmptyBinding = oUiModel.bindProperty("/componentSettings/showCategoryTreeWhenEmpty");
733
+ this.oMaxColumnsCountBinding = oUiModel.bindProperty("/maxColumnsCount");
734
+ this.oVisualizationsFilterSelectedBinding = oUiModel.bindProperty("/visualizations/filters/selected");
735
+
736
+ [
737
+ this.oCategoryTreeLengthBinding,
738
+ this.oShowCategoryTreeWhenEmptyBinding,
739
+ this.oMaxColumnsCountBinding,
740
+ this.oVisualizationsFilterSelectedBinding
741
+ ].forEach((fn) => fn.attachChange(this.onUpdateSidebarStatus, this));
742
+
743
+ this.updateSidebarStatus();
583
744
  },
584
745
 
585
746
  /**
586
- * @typedef preparedTile
587
- * @property {string} id The vizId.
588
- * @property {string} appId The appId.
589
- * @property {string} icon The icon src.
590
- * @property {string} info The info string.
591
- * @property {string} launchUrl The launch url for the tile.
592
- * @property {string} subtitle The subtitle.
593
- * @property {string} title The title.
594
- * @property {string} type The type.
595
- * @property {string} dataHelpId The data-help-id for the assistant.
596
- * @property {object} vizData The whole vizData object.
597
- * @property {boolean} selected flag.
598
- * @property {boolean} added added flag. True if the visualization was already added to the cell.
599
- * @property {string} systemLabel The system label.
600
- */
601
-
602
- /**
603
- * Prepares tiles from the visualizationData and enriches them for the appBoxes.
747
+ * Called when the sidebar status needs to be updated.
604
748
  *
605
- * @param {object[]} aVisualizationData The visualizationData from the consumer
606
- * @returns {preparedTile[]} The prepared and filtered tiles
607
- * @since 1.113.0
749
+ * Several bindings are used to determine if the sidebar status needs to be updated.
750
+ * this method is called when one of the bindings changes. The setTimeout ensures that
751
+ * it is only called once or called as least as possible.
752
+ * The bindings are initialized in _initializeSidebarStatus.
753
+ *
754
+ * @since 1.132.0
608
755
  * @private
609
756
  */
610
- _prepareTiles: function (aVisualizationData) {
611
- var aTilesData = aVisualizationData.filter(function (tile) {
612
- return [
613
- "sap.ushell.StaticAppLauncher",
614
- "sap.ushell.DynamicAppLauncher"
615
- ].indexOf(tile.type) > -1;
616
- });
757
+ onUpdateSidebarStatus: function () {
758
+ this.iUpdateSidebarStatusTimeout = this.iUpdateSidebarStatusTimeout || setTimeout(() => {
759
+ this.updateSidebarStatus();
760
+ this.iUpdateSidebarStatusTimeout = null;
761
+ }, 0);
762
+ },
617
763
 
618
- return aTilesData.map(function (oTile) {
619
- if (!oTile.descriptor || !oTile.descriptor.value) {
620
- Log.error("No descriptor available. Cannot load this tile!", null, this.logComponent);
621
- return;
764
+ updateSidebarStatus: function (sLayoutType) {
765
+ const oDataModel = this.getDataModel();
766
+ const oUiModel = this.getUiModel();
767
+ const iMaxColumnsCount = oUiModel.getProperty("/maxColumnsCount");
768
+ const bCategoryTreeHasData = oDataModel.getProperty("/categoryTree")?.length > 0;
769
+ const bShowCategoryTreeWhenEmpty = oUiModel.getProperty("/componentSettings/showCategoryTreeWhenEmpty");
770
+ const sVisualizationsFilterSelected = oUiModel.getProperty("/visualizations/filters/selected");
771
+ let sNewLayoutType;
772
+
773
+ // Temporary: Layout type override for the visualizations filter "cards" because they don't have catalogs.
774
+ if (sVisualizationsFilterSelected === "cards") {
775
+ sNewLayoutType = LayoutType.MidColumnFullScreen;
776
+ } else if (sLayoutType) {
777
+ sNewLayoutType = sLayoutType;
778
+ } else if (bShowCategoryTreeWhenEmpty || bCategoryTreeHasData) {
779
+ sNewLayoutType = oUiModel.getProperty("/preservedLayoutType");
780
+ // This happens only if the layout was resized to a larger width when only the category tree is displayed,
781
+ // then the layout needs to leave the "OneColumn" state because there are more columns available.
782
+ // Otherwise, we just update the layoutType property.
783
+ if (sNewLayoutType === LayoutType.OneColumn && iMaxColumnsCount > 1) {
784
+ sNewLayoutType = LayoutType.TwoColumnsMidExpanded;
622
785
  }
786
+ } else {
787
+ sNewLayoutType = LayoutType.MidColumnFullScreen;
788
+ }
623
789
 
624
- var oTileSapApp = oTile.descriptor.value["sap.app"];
625
- var oTileSapFiori = oTile.descriptor.value["sap.fiori"];
626
- var sSystemLabel = oTile["systemLabel"];
627
- var sAppID = "";
790
+ // If the layout is currently TwoColumnsMidExpanded and maxColumnsCount is only 1,
791
+ // the category tree should not be visible because there is no space.
792
+ let bCategoryTreeVisible = true;
793
+ if ((sNewLayoutType === LayoutType.TwoColumnsMidExpanded && iMaxColumnsCount === 1)
794
+ || (sNewLayoutType === LayoutType.MidColumnFullScreen)
795
+ ) {
796
+ bCategoryTreeVisible = false;
797
+ }
628
798
 
629
- if (oTileSapFiori) {
630
- sAppID = oTileSapFiori.registrationIds[0];
631
- } else if (oTileSapApp && oTileSapApp.hasOwnProperty("id")) {
632
- sAppID = oTileSapApp.id;
633
- }
634
- var oVizTarget = oTile.descriptor.value && oTile.descriptor.value["sap.flp"] && oTile.descriptor.value["sap.flp"].target;
635
- var sLaunchUrl = utilsCdm.toHashFromTargetIntent(oTile.targetAppIntent, oVizTarget);
799
+ if (sLayoutType && sLayoutType !== LayoutType.OneColumn) {
800
+ oUiModel.setProperty("/preservedLayoutType", sLayoutType);
801
+ }
636
802
 
637
- return {
638
- id: oTile.id,
639
- appId: sAppID,
640
- icon: ObjectPath.get("icons.icon", oTile.descriptor.value["sap.ui"]) || "",
641
- info: oTileSapApp && oTileSapApp.info || "",
642
- launchUrl: sLaunchUrl,
643
- subtitle: oTileSapApp && oTileSapApp.subTitle || "",
644
- title: oTileSapApp && oTileSapApp.title || "",
645
- type: oTile.type,
646
- dataHelpId: oTile.id,
647
- vizData: oTile,
648
- added: false,
649
- systemLabel: sSystemLabel || ""
650
- };
651
- }.bind(this));
803
+ oUiModel.setProperty("/layoutType", sNewLayoutType);
804
+ oUiModel.setProperty("/categoryTree/hasData", bCategoryTreeHasData);
805
+ oUiModel.setProperty("/categoryTree/visible", bCategoryTreeVisible);
652
806
  },
653
807
 
654
808
  /**
655
- * @typedef preparedCard
809
+ * @typedef preparedVizualization
810
+ *
656
811
  * @property {string} id The vizId.
657
812
  * @property {string} appId The appId.
658
813
  * @property {string} icon The icon src.
659
814
  * @property {string} info The info string.
815
+ * @property {string} launchUrl The launch url for the visualization.
660
816
  * @property {string} subtitle The subtitle.
661
817
  * @property {string} title The title.
662
818
  * @property {string} type The type.
663
- * @property {object} manifest The card manifest (descriptor).
664
819
  * @property {string} dataHelpId The data-help-id for the assistant.
665
820
  * @property {object} vizData The whole vizData object.
821
+ * @property {boolean} added The added flag. True if the visualization was already added to the cell.
822
+ * @property {string} systemLabel The system label.
666
823
  */
667
824
 
668
825
  /**
669
- * Prepares cards from the visualizationData and enriches them for the appBoxes.
826
+ * Prepares visualizations from the visualizationData and enriches them.
670
827
  *
671
828
  * @param {object[]} aVisualizationData The visualizationData from the consumer
672
- * @returns {preparedCard[]} The prepared cards
829
+ * @returns {preparedVizualization[]} The prepared visualizations
673
830
  * @since 1.113.0
674
831
  * @private
675
832
  */
676
- _prepareCards: function (aVisualizationData) {
677
- var aCardsData = aVisualizationData.filter(function (oViz) {
678
- return oViz.type === "sap.card";
679
- });
680
-
681
- return aCardsData.map(function (oCard) {
682
- if (!oCard.descriptor || !oCard.descriptor.value) {
683
- Log.error("No descriptor available. Cannot load this card!", null, this.logComponent);
684
- return;
833
+ _prepareVisualizations: function (aVisualizationData) {
834
+ return aVisualizationData.reduce((aResult, oViz) => {
835
+ if (!oViz?.descriptor || !oViz?.descriptor?.value) {
836
+ Log.error("No descriptor available. Cannot load this visualization.", null, this.logComponent);
837
+ return aResult;
685
838
  }
686
839
 
687
- var oCardSapApp = oCard.descriptor.value["sap.app"];
688
- var sAppID = oCardSapApp && oCardSapApp.id || "";
689
-
690
- return {
691
- id: oCard.id,
692
- appId: sAppID,
693
- icon: ObjectPath.get("icons.icon", oCard.descriptor.value["sap.ui"]) || "",
694
- info: oCardSapApp && oCardSapApp.info || "",
695
- subtitle: oCardSapApp && oCardSapApp.subTitle || "",
696
- title: oCardSapApp && oCardSapApp.title || "",
697
- type: oCard.type,
698
- manifest: oCard.descriptor.value,
699
- dataHelpId: oCard.id,
700
- vizData: oCard
701
- };
702
- }.bind(this));
703
- },
704
-
705
- /**
706
- * Updates the added flag of the currently available visualizations.
707
- *
708
- * @since 1.113.0
709
- * @private
710
- */
711
- _updateVisualizationsRestricted: function () {
712
- var oModel = this.getModel();
713
- var aRestrictedVisualizations = oModel.getProperty("/appSearch/restrictedVisualizations");
714
- var aTiles = oModel.getProperty("/appSearch/visualizations/tiles");
840
+ const oVizSapApp = oViz.descriptor.value["sap.app"];
841
+ const oVizSapFiori = oViz.descriptor.value["sap.fiori"];
715
842
 
716
- var aPreparedTiles = aTiles.map(function (oTile) {
717
- oTile.added = aRestrictedVisualizations.includes(oTile.id);
718
- return oTile;
719
- });
843
+ let sAppID = "";
844
+ if (oVizSapFiori?.registrationIds[0]) {
845
+ sAppID = oVizSapFiori.registrationIds[0];
846
+ } else if (oVizSapApp?.id) {
847
+ sAppID = oVizSapApp.id;
848
+ }
720
849
 
721
- oModel.setProperty("/appSearch/visualizations/tiles", aPreparedTiles);
850
+ let sLaunchUrl;
851
+ if (oViz.targetAppIntent) {
852
+ sLaunchUrl = utilsCdm.toHashFromTargetIntent(oViz.targetAppIntent, oViz.descriptor.value["sap.flp"]?.target);
853
+ }
722
854
 
855
+ aResult.push({
856
+ id: oViz.id,
857
+ appId: sAppID,
858
+ icon: ObjectPath.get("icons.icon", oViz.descriptor.value["sap.ui"]) || "",
859
+ info: oVizSapApp && oVizSapApp.info || "",
860
+ launchUrl: sLaunchUrl || "",
861
+ subtitle: oVizSapApp && oVizSapApp.subTitle || "",
862
+ title: oVizSapApp && oVizSapApp.title || "",
863
+ type: oViz.type,
864
+ dataHelpId: oViz.id,
865
+ vizData: oViz,
866
+ added: false,
867
+ systemLabel: oViz.systemLabel || ""
868
+ });
869
+ return aResult;
870
+ }, []);
723
871
  }
724
872
  });
725
873
  });