@sapui5/sap.cux.home 1.135.0 → 1.136.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 (436) hide show
  1. package/package.json +1 -1
  2. package/src/sap/cux/home/AdvancedSettingsPanel-dbg.js +23 -5
  3. package/src/sap/cux/home/AdvancedSettingsPanel-dbg.js.map +1 -1
  4. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts +7 -0
  5. package/src/sap/cux/home/AdvancedSettingsPanel.d.ts.map +1 -1
  6. package/src/sap/cux/home/AdvancedSettingsPanel.js +1 -1
  7. package/src/sap/cux/home/AdvancedSettingsPanel.js.map +1 -1
  8. package/src/sap/cux/home/AdvancedSettingsPanel.ts +24 -5
  9. package/src/sap/cux/home/AppsAdditionPanel-dbg.js +919 -0
  10. package/src/sap/cux/home/AppsAdditionPanel-dbg.js.map +1 -0
  11. package/src/sap/cux/home/AppsAdditionPanel.d.ts +293 -0
  12. package/src/sap/cux/home/AppsAdditionPanel.d.ts.map +1 -0
  13. package/src/sap/cux/home/AppsAdditionPanel.js +6 -0
  14. package/src/sap/cux/home/AppsAdditionPanel.js.map +1 -0
  15. package/src/sap/cux/home/AppsAdditionPanel.ts +757 -0
  16. package/src/sap/cux/home/AppsContainer-dbg.js +42 -28
  17. package/src/sap/cux/home/AppsContainer-dbg.js.map +1 -1
  18. package/src/sap/cux/home/AppsContainer.d.ts +17 -1
  19. package/src/sap/cux/home/AppsContainer.d.ts.map +1 -1
  20. package/src/sap/cux/home/AppsContainer.js +1 -1
  21. package/src/sap/cux/home/AppsContainer.js.map +1 -1
  22. package/src/sap/cux/home/AppsContainer.ts +27 -6
  23. package/src/sap/cux/home/AppsContainerGenericPlaceholder-dbg.js +261 -0
  24. package/src/sap/cux/home/AppsContainerGenericPlaceholder-dbg.js.map +1 -0
  25. package/src/sap/cux/home/AppsContainerGenericPlaceholder.d.ts +8 -0
  26. package/src/sap/cux/home/AppsContainerGenericPlaceholder.d.ts.map +1 -0
  27. package/src/sap/cux/home/AppsContainerGenericPlaceholder.js +6 -0
  28. package/src/sap/cux/home/AppsContainerGenericPlaceholder.js.map +1 -0
  29. package/src/sap/cux/home/AppsContainerGenericPlaceholder.ts +251 -0
  30. package/src/sap/cux/home/BaseAppPanel-dbg.js +4 -5
  31. package/src/sap/cux/home/BaseAppPanel-dbg.js.map +1 -1
  32. package/src/sap/cux/home/BaseAppPanel.d.ts.map +1 -1
  33. package/src/sap/cux/home/BaseAppPanel.js +1 -1
  34. package/src/sap/cux/home/BaseAppPanel.js.map +1 -1
  35. package/src/sap/cux/home/BaseAppPanel.ts +3 -5
  36. package/src/sap/cux/home/BaseAppPersPanel-dbg.js +2 -1
  37. package/src/sap/cux/home/BaseAppPersPanel-dbg.js.map +1 -1
  38. package/src/sap/cux/home/BaseAppPersPanel.d.ts.map +1 -1
  39. package/src/sap/cux/home/BaseAppPersPanel.js +1 -1
  40. package/src/sap/cux/home/BaseAppPersPanel.js.map +1 -1
  41. package/src/sap/cux/home/BaseAppPersPanel.ts +2 -1
  42. package/src/sap/cux/home/BaseContainer-dbg.js +24 -3
  43. package/src/sap/cux/home/BaseContainer-dbg.js.map +1 -1
  44. package/src/sap/cux/home/BaseContainer.d.ts +10 -0
  45. package/src/sap/cux/home/BaseContainer.d.ts.map +1 -1
  46. package/src/sap/cux/home/BaseContainer.js +1 -1
  47. package/src/sap/cux/home/BaseContainer.js.map +1 -1
  48. package/src/sap/cux/home/BaseContainer.ts +24 -2
  49. package/src/sap/cux/home/BaseContainerRenderer-dbg.js +18 -1
  50. package/src/sap/cux/home/BaseContainerRenderer-dbg.js.map +1 -1
  51. package/src/sap/cux/home/BaseContainerRenderer.d.ts +4 -4
  52. package/src/sap/cux/home/BaseContainerRenderer.d.ts.map +1 -1
  53. package/src/sap/cux/home/BaseContainerRenderer.js +1 -1
  54. package/src/sap/cux/home/BaseContainerRenderer.js.map +1 -1
  55. package/src/sap/cux/home/BaseContainerRenderer.ts +25 -4
  56. package/src/sap/cux/home/BaseLayout-dbg.js +22 -2
  57. package/src/sap/cux/home/BaseLayout-dbg.js.map +1 -1
  58. package/src/sap/cux/home/BaseLayout.d.ts +6 -0
  59. package/src/sap/cux/home/BaseLayout.d.ts.map +1 -1
  60. package/src/sap/cux/home/BaseLayout.js +1 -1
  61. package/src/sap/cux/home/BaseLayout.js.map +1 -1
  62. package/src/sap/cux/home/BaseLayout.ts +23 -2
  63. package/src/sap/cux/home/BaseNewsItem-dbg.js +3 -3
  64. package/src/sap/cux/home/BaseNewsItem-dbg.js.map +1 -1
  65. package/src/sap/cux/home/BaseNewsItem.js +1 -1
  66. package/src/sap/cux/home/BaseNewsItem.js.map +1 -1
  67. package/src/sap/cux/home/BaseNewsItem.ts +3 -3
  68. package/src/sap/cux/home/BaseNewsPanel-dbg.js +4 -5
  69. package/src/sap/cux/home/BaseNewsPanel-dbg.js.map +1 -1
  70. package/src/sap/cux/home/BaseNewsPanel.d.ts.map +1 -1
  71. package/src/sap/cux/home/BaseNewsPanel.js +1 -1
  72. package/src/sap/cux/home/BaseNewsPanel.js.map +1 -1
  73. package/src/sap/cux/home/BaseNewsPanel.ts +5 -4
  74. package/src/sap/cux/home/BasePanel-dbg.js +1 -1
  75. package/src/sap/cux/home/BasePanel-dbg.js.map +1 -1
  76. package/src/sap/cux/home/BasePanel.js +1 -1
  77. package/src/sap/cux/home/BasePanel.js.map +1 -1
  78. package/src/sap/cux/home/BasePanel.ts +1 -1
  79. package/src/sap/cux/home/BaseSettingsDialog-dbg.js +11 -0
  80. package/src/sap/cux/home/BaseSettingsDialog-dbg.js.map +1 -1
  81. package/src/sap/cux/home/BaseSettingsDialog.d.ts.map +1 -1
  82. package/src/sap/cux/home/BaseSettingsDialog.js +1 -1
  83. package/src/sap/cux/home/BaseSettingsDialog.js.map +1 -1
  84. package/src/sap/cux/home/BaseSettingsDialog.ts +12 -0
  85. package/src/sap/cux/home/BaseSettingsPanel-dbg.js +67 -2
  86. package/src/sap/cux/home/BaseSettingsPanel-dbg.js.map +1 -1
  87. package/src/sap/cux/home/BaseSettingsPanel.d.ts +42 -0
  88. package/src/sap/cux/home/BaseSettingsPanel.d.ts.map +1 -1
  89. package/src/sap/cux/home/BaseSettingsPanel.gen.d.ts +75 -0
  90. package/src/sap/cux/home/BaseSettingsPanel.js +1 -1
  91. package/src/sap/cux/home/BaseSettingsPanel.js.map +1 -1
  92. package/src/sap/cux/home/BaseSettingsPanel.ts +70 -2
  93. package/src/sap/cux/home/CardsPanel-dbg.js +548 -168
  94. package/src/sap/cux/home/CardsPanel-dbg.js.map +1 -1
  95. package/src/sap/cux/home/CardsPanel.d.ts +121 -15
  96. package/src/sap/cux/home/CardsPanel.d.ts.map +1 -1
  97. package/src/sap/cux/home/CardsPanel.gen.d.ts +78 -0
  98. package/src/sap/cux/home/CardsPanel.js +1 -1
  99. package/src/sap/cux/home/CardsPanel.js.map +1 -1
  100. package/src/sap/cux/home/CardsPanel.ts +450 -97
  101. package/src/sap/cux/home/ContentAdditionDialog-dbg.js +353 -0
  102. package/src/sap/cux/home/ContentAdditionDialog-dbg.js.map +1 -0
  103. package/src/sap/cux/home/ContentAdditionDialog.d.ts +82 -0
  104. package/src/sap/cux/home/ContentAdditionDialog.d.ts.map +1 -0
  105. package/src/sap/cux/home/ContentAdditionDialog.js +6 -0
  106. package/src/sap/cux/home/ContentAdditionDialog.js.map +1 -0
  107. package/src/sap/cux/home/ContentAdditionDialog.ts +214 -0
  108. package/src/sap/cux/home/ErrorPanel-dbg.js +3 -3
  109. package/src/sap/cux/home/ErrorPanel-dbg.js.map +1 -1
  110. package/src/sap/cux/home/ErrorPanel.d.ts.map +1 -1
  111. package/src/sap/cux/home/ErrorPanel.js +1 -1
  112. package/src/sap/cux/home/ErrorPanel.js.map +1 -1
  113. package/src/sap/cux/home/ErrorPanel.ts +4 -2
  114. package/src/sap/cux/home/FavAppPanel-dbg.js +352 -333
  115. package/src/sap/cux/home/FavAppPanel-dbg.js.map +1 -1
  116. package/src/sap/cux/home/FavAppPanel.d.ts.map +1 -1
  117. package/src/sap/cux/home/FavAppPanel.js +1 -1
  118. package/src/sap/cux/home/FavAppPanel.js.map +1 -1
  119. package/src/sap/cux/home/FavAppPanel.ts +63 -54
  120. package/src/sap/cux/home/InsightsAdditionPanel-dbg.js +97 -0
  121. package/src/sap/cux/home/InsightsAdditionPanel-dbg.js.map +1 -0
  122. package/src/sap/cux/home/InsightsAdditionPanel.d.ts +57 -0
  123. package/src/sap/cux/home/InsightsAdditionPanel.d.ts.map +1 -0
  124. package/src/sap/cux/home/InsightsAdditionPanel.js +6 -0
  125. package/src/sap/cux/home/InsightsAdditionPanel.js.map +1 -0
  126. package/src/sap/cux/home/InsightsAdditionPanel.ts +94 -0
  127. package/src/sap/cux/home/InsightsContainer-dbg.js +22 -2
  128. package/src/sap/cux/home/InsightsContainer-dbg.js.map +1 -1
  129. package/src/sap/cux/home/InsightsContainer.d.ts +14 -0
  130. package/src/sap/cux/home/InsightsContainer.d.ts.map +1 -1
  131. package/src/sap/cux/home/InsightsContainer.js +1 -1
  132. package/src/sap/cux/home/InsightsContainer.js.map +1 -1
  133. package/src/sap/cux/home/InsightsContainer.ts +22 -1
  134. package/src/sap/cux/home/InsightsContainerGenericPlaceholder-dbg.js +401 -0
  135. package/src/sap/cux/home/InsightsContainerGenericPlaceholder-dbg.js.map +1 -0
  136. package/src/sap/cux/home/InsightsContainerGenericPlaceholder.d.ts +8 -0
  137. package/src/sap/cux/home/InsightsContainerGenericPlaceholder.d.ts.map +1 -0
  138. package/src/sap/cux/home/InsightsContainerGenericPlaceholder.js +6 -0
  139. package/src/sap/cux/home/InsightsContainerGenericPlaceholder.js.map +1 -0
  140. package/src/sap/cux/home/InsightsContainerGenericPlaceholder.ts +391 -0
  141. package/src/sap/cux/home/KeyUserLayoutSettingsPanel-dbg.js +10 -9
  142. package/src/sap/cux/home/KeyUserLayoutSettingsPanel-dbg.js.map +1 -1
  143. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.d.ts.map +1 -1
  144. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js +1 -1
  145. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.js.map +1 -1
  146. package/src/sap/cux/home/KeyUserLayoutSettingsPanel.ts +9 -8
  147. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel-dbg.js +2 -2
  148. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel-dbg.js.map +1 -1
  149. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js +1 -1
  150. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.js.map +1 -1
  151. package/src/sap/cux/home/KeyUserNewsPagesSettingsPanel.ts +2 -2
  152. package/src/sap/cux/home/KeyUserPagesSettingsPanel-dbg.js +6 -6
  153. package/src/sap/cux/home/KeyUserPagesSettingsPanel-dbg.js.map +1 -1
  154. package/src/sap/cux/home/KeyUserPagesSettingsPanel.js +1 -1
  155. package/src/sap/cux/home/KeyUserPagesSettingsPanel.js.map +1 -1
  156. package/src/sap/cux/home/KeyUserPagesSettingsPanel.ts +6 -6
  157. package/src/sap/cux/home/Layout-dbg.js +58 -33
  158. package/src/sap/cux/home/Layout-dbg.js.map +1 -1
  159. package/src/sap/cux/home/Layout.d.ts +13 -0
  160. package/src/sap/cux/home/Layout.d.ts.map +1 -1
  161. package/src/sap/cux/home/Layout.js +1 -1
  162. package/src/sap/cux/home/Layout.js.map +1 -1
  163. package/src/sap/cux/home/Layout.ts +48 -20
  164. package/src/sap/cux/home/LayoutSettingsPanel-dbg.js +1 -10
  165. package/src/sap/cux/home/LayoutSettingsPanel-dbg.js.map +1 -1
  166. package/src/sap/cux/home/LayoutSettingsPanel.d.ts.map +1 -1
  167. package/src/sap/cux/home/LayoutSettingsPanel.js +1 -1
  168. package/src/sap/cux/home/LayoutSettingsPanel.js.map +1 -1
  169. package/src/sap/cux/home/LayoutSettingsPanel.ts +2 -10
  170. package/src/sap/cux/home/NewsAndPagesContainer-dbg.js +35 -17
  171. package/src/sap/cux/home/NewsAndPagesContainer-dbg.js.map +1 -1
  172. package/src/sap/cux/home/NewsAndPagesContainer.d.ts +7 -0
  173. package/src/sap/cux/home/NewsAndPagesContainer.d.ts.map +1 -1
  174. package/src/sap/cux/home/NewsAndPagesContainer.js +1 -1
  175. package/src/sap/cux/home/NewsAndPagesContainer.js.map +1 -1
  176. package/src/sap/cux/home/NewsAndPagesContainer.ts +40 -16
  177. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder-dbg.js +164 -0
  178. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder-dbg.js.map +1 -0
  179. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder.d.ts +8 -0
  180. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder.d.ts.map +1 -0
  181. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder.js +6 -0
  182. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder.js.map +1 -0
  183. package/src/sap/cux/home/NewsAndPagesContainerGenericPlaceholder.ts +154 -0
  184. package/src/sap/cux/home/NewsGroup-dbg.js +112 -79
  185. package/src/sap/cux/home/NewsGroup-dbg.js.map +1 -1
  186. package/src/sap/cux/home/NewsGroup.d.ts +1 -0
  187. package/src/sap/cux/home/NewsGroup.d.ts.map +1 -1
  188. package/src/sap/cux/home/NewsGroup.js +1 -1
  189. package/src/sap/cux/home/NewsGroup.js.map +1 -1
  190. package/src/sap/cux/home/NewsGroup.ts +136 -100
  191. package/src/sap/cux/home/NewsPanel-dbg.js +541 -173
  192. package/src/sap/cux/home/NewsPanel-dbg.js.map +1 -1
  193. package/src/sap/cux/home/NewsPanel.d.ts +156 -16
  194. package/src/sap/cux/home/NewsPanel.d.ts.map +1 -1
  195. package/src/sap/cux/home/NewsPanel.js +1 -1
  196. package/src/sap/cux/home/NewsPanel.js.map +1 -1
  197. package/src/sap/cux/home/NewsPanel.ts +452 -82
  198. package/src/sap/cux/home/NewsSettingsPanel-dbg.js +61 -20
  199. package/src/sap/cux/home/NewsSettingsPanel-dbg.js.map +1 -1
  200. package/src/sap/cux/home/NewsSettingsPanel.d.ts +14 -0
  201. package/src/sap/cux/home/NewsSettingsPanel.d.ts.map +1 -1
  202. package/src/sap/cux/home/NewsSettingsPanel.js +1 -1
  203. package/src/sap/cux/home/NewsSettingsPanel.js.map +1 -1
  204. package/src/sap/cux/home/NewsSettingsPanel.ts +75 -21
  205. package/src/sap/cux/home/NoDataContainer-dbg.js +3 -3
  206. package/src/sap/cux/home/NoDataContainer-dbg.js.map +1 -1
  207. package/src/sap/cux/home/NoDataContainer.d.ts +1 -0
  208. package/src/sap/cux/home/NoDataContainer.d.ts.map +1 -1
  209. package/src/sap/cux/home/NoDataContainer.js +1 -1
  210. package/src/sap/cux/home/NoDataContainer.js.map +1 -1
  211. package/src/sap/cux/home/NoDataContainer.ts +4 -2
  212. package/src/sap/cux/home/PagePanel-dbg.js +86 -75
  213. package/src/sap/cux/home/PagePanel-dbg.js.map +1 -1
  214. package/src/sap/cux/home/PagePanel.d.ts +25 -3
  215. package/src/sap/cux/home/PagePanel.d.ts.map +1 -1
  216. package/src/sap/cux/home/PagePanel.js +1 -1
  217. package/src/sap/cux/home/PagePanel.js.map +1 -1
  218. package/src/sap/cux/home/PagePanel.ts +91 -76
  219. package/src/sap/cux/home/PageSettingsPanel-dbg.js +16 -15
  220. package/src/sap/cux/home/PageSettingsPanel-dbg.js.map +1 -1
  221. package/src/sap/cux/home/PageSettingsPanel.d.ts.map +1 -1
  222. package/src/sap/cux/home/PageSettingsPanel.js +1 -1
  223. package/src/sap/cux/home/PageSettingsPanel.js.map +1 -1
  224. package/src/sap/cux/home/PageSettingsPanel.ts +15 -14
  225. package/src/sap/cux/home/RecentAppPanel-dbg.js +2 -2
  226. package/src/sap/cux/home/RecentAppPanel-dbg.js.map +1 -1
  227. package/src/sap/cux/home/RecentAppPanel.js +1 -1
  228. package/src/sap/cux/home/RecentAppPanel.js.map +1 -1
  229. package/src/sap/cux/home/RecentAppPanel.ts +2 -2
  230. package/src/sap/cux/home/RecommendedAppPanel-dbg.js +4 -3
  231. package/src/sap/cux/home/RecommendedAppPanel-dbg.js.map +1 -1
  232. package/src/sap/cux/home/RecommendedAppPanel.d.ts.map +1 -1
  233. package/src/sap/cux/home/RecommendedAppPanel.js +1 -1
  234. package/src/sap/cux/home/RecommendedAppPanel.js.map +1 -1
  235. package/src/sap/cux/home/RecommendedAppPanel.ts +4 -2
  236. package/src/sap/cux/home/SettingsDialog-dbg.js +4 -3
  237. package/src/sap/cux/home/SettingsDialog-dbg.js.map +1 -1
  238. package/src/sap/cux/home/SettingsDialog.d.ts.map +1 -1
  239. package/src/sap/cux/home/SettingsDialog.js +1 -1
  240. package/src/sap/cux/home/SettingsDialog.js.map +1 -1
  241. package/src/sap/cux/home/SettingsDialog.ts +4 -2
  242. package/src/sap/cux/home/TaskPanel-dbg.js +16 -12
  243. package/src/sap/cux/home/TaskPanel-dbg.js.map +1 -1
  244. package/src/sap/cux/home/TaskPanel.d.ts +1 -2
  245. package/src/sap/cux/home/TaskPanel.d.ts.map +1 -1
  246. package/src/sap/cux/home/TaskPanel.js +1 -1
  247. package/src/sap/cux/home/TaskPanel.js.map +1 -1
  248. package/src/sap/cux/home/TaskPanel.ts +19 -12
  249. package/src/sap/cux/home/TilesPanel-dbg.js +9 -8
  250. package/src/sap/cux/home/TilesPanel-dbg.js.map +1 -1
  251. package/src/sap/cux/home/TilesPanel.d.ts.map +1 -1
  252. package/src/sap/cux/home/TilesPanel.js +1 -1
  253. package/src/sap/cux/home/TilesPanel.js.map +1 -1
  254. package/src/sap/cux/home/TilesPanel.ts +15 -8
  255. package/src/sap/cux/home/ToDoPanel-dbg.js +34 -25
  256. package/src/sap/cux/home/ToDoPanel-dbg.js.map +1 -1
  257. package/src/sap/cux/home/ToDoPanel.d.ts +0 -7
  258. package/src/sap/cux/home/ToDoPanel.d.ts.map +1 -1
  259. package/src/sap/cux/home/ToDoPanel.js +1 -1
  260. package/src/sap/cux/home/ToDoPanel.js.map +1 -1
  261. package/src/sap/cux/home/ToDoPanel.ts +27 -29
  262. package/src/sap/cux/home/ToDosContainer-dbg.js +27 -18
  263. package/src/sap/cux/home/ToDosContainer-dbg.js.map +1 -1
  264. package/src/sap/cux/home/ToDosContainer.d.ts +7 -0
  265. package/src/sap/cux/home/ToDosContainer.d.ts.map +1 -1
  266. package/src/sap/cux/home/ToDosContainer.js +1 -1
  267. package/src/sap/cux/home/ToDosContainer.js.map +1 -1
  268. package/src/sap/cux/home/ToDosContainer.ts +10 -0
  269. package/src/sap/cux/home/ToDosContainerGenericPlaceholder-dbg.js +84 -0
  270. package/src/sap/cux/home/ToDosContainerGenericPlaceholder-dbg.js.map +1 -0
  271. package/src/sap/cux/home/ToDosContainerGenericPlaceholder.d.ts +8 -0
  272. package/src/sap/cux/home/ToDosContainerGenericPlaceholder.d.ts.map +1 -0
  273. package/src/sap/cux/home/ToDosContainerGenericPlaceholder.js +6 -0
  274. package/src/sap/cux/home/ToDosContainerGenericPlaceholder.js.map +1 -0
  275. package/src/sap/cux/home/ToDosContainerGenericPlaceholder.ts +74 -0
  276. package/src/sap/cux/home/i18n/messagebundle.properties +63 -1
  277. package/src/sap/cux/home/i18n/messagebundle_ar.properties +42 -1
  278. package/src/sap/cux/home/i18n/messagebundle_bg.properties +43 -1
  279. package/src/sap/cux/home/i18n/messagebundle_ca.properties +43 -1
  280. package/src/sap/cux/home/i18n/messagebundle_cnr.properties +43 -1
  281. package/src/sap/cux/home/i18n/messagebundle_cs.properties +43 -1
  282. package/src/sap/cux/home/i18n/messagebundle_cy.properties +43 -1
  283. package/src/sap/cux/home/i18n/messagebundle_da.properties +43 -1
  284. package/src/sap/cux/home/i18n/messagebundle_de.properties +43 -1
  285. package/src/sap/cux/home/i18n/messagebundle_el.properties +44 -2
  286. package/src/sap/cux/home/i18n/messagebundle_en.properties +43 -246
  287. package/src/sap/cux/home/i18n/messagebundle_en_GB.properties +43 -1
  288. package/src/sap/cux/home/i18n/messagebundle_en_US_sappsd.properties +43 -1
  289. package/src/sap/cux/home/i18n/messagebundle_en_US_saprigi.properties +31 -1
  290. package/src/sap/cux/home/i18n/messagebundle_en_US_saptrc.properties +43 -1
  291. package/src/sap/cux/home/i18n/messagebundle_es.properties +43 -1
  292. package/src/sap/cux/home/i18n/messagebundle_es_MX.properties +43 -1
  293. package/src/sap/cux/home/i18n/messagebundle_et.properties +43 -1
  294. package/src/sap/cux/home/i18n/messagebundle_fi.properties +43 -1
  295. package/src/sap/cux/home/i18n/messagebundle_fr.properties +43 -1
  296. package/src/sap/cux/home/i18n/messagebundle_fr_CA.properties +42 -1
  297. package/src/sap/cux/home/i18n/messagebundle_hi.properties +43 -1
  298. package/src/sap/cux/home/i18n/messagebundle_hr.properties +42 -1
  299. package/src/sap/cux/home/i18n/messagebundle_hu.properties +43 -1
  300. package/src/sap/cux/home/i18n/messagebundle_id.properties +47 -5
  301. package/src/sap/cux/home/i18n/messagebundle_it.properties +43 -1
  302. package/src/sap/cux/home/i18n/messagebundle_iw.properties +43 -1
  303. package/src/sap/cux/home/i18n/messagebundle_ja.properties +43 -1
  304. package/src/sap/cux/home/i18n/messagebundle_kk.properties +43 -1
  305. package/src/sap/cux/home/i18n/messagebundle_ko.properties +43 -1
  306. package/src/sap/cux/home/i18n/messagebundle_lt.properties +42 -1
  307. package/src/sap/cux/home/i18n/messagebundle_lv.properties +43 -1
  308. package/src/sap/cux/home/i18n/messagebundle_mk.properties +43 -1
  309. package/src/sap/cux/home/i18n/messagebundle_ms.properties +43 -1
  310. package/src/sap/cux/home/i18n/messagebundle_nl.properties +43 -1
  311. package/src/sap/cux/home/i18n/messagebundle_no.properties +44 -2
  312. package/src/sap/cux/home/i18n/messagebundle_pl.properties +44 -2
  313. package/src/sap/cux/home/i18n/messagebundle_pt.properties +43 -1
  314. package/src/sap/cux/home/i18n/messagebundle_pt_PT.properties +43 -1
  315. package/src/sap/cux/home/i18n/messagebundle_ro.properties +43 -1
  316. package/src/sap/cux/home/i18n/messagebundle_ru.properties +43 -1
  317. package/src/sap/cux/home/i18n/messagebundle_sh.properties +43 -1
  318. package/src/sap/cux/home/i18n/messagebundle_sk.properties +42 -1
  319. package/src/sap/cux/home/i18n/messagebundle_sl.properties +44 -2
  320. package/src/sap/cux/home/i18n/messagebundle_sr.properties +43 -1
  321. package/src/sap/cux/home/i18n/messagebundle_sv.properties +43 -1
  322. package/src/sap/cux/home/i18n/messagebundle_th.properties +43 -2
  323. package/src/sap/cux/home/i18n/messagebundle_tr.properties +42 -1
  324. package/src/sap/cux/home/i18n/messagebundle_uk.properties +43 -1
  325. package/src/sap/cux/home/i18n/messagebundle_vi.properties +42 -1
  326. package/src/sap/cux/home/i18n/messagebundle_zh_CN.properties +43 -1
  327. package/src/sap/cux/home/i18n/messagebundle_zh_TW.properties +42 -1
  328. package/src/sap/cux/home/interface/AppsInterface-dbg.js.map +1 -1
  329. package/src/sap/cux/home/interface/AppsInterface.d.ts +5 -3
  330. package/src/sap/cux/home/interface/AppsInterface.d.ts.map +1 -1
  331. package/src/sap/cux/home/interface/AppsInterface.ts +5 -3
  332. package/src/sap/cux/home/interface/CardsInterface-dbg.js +32 -0
  333. package/src/sap/cux/home/interface/CardsInterface-dbg.js.map +1 -1
  334. package/src/sap/cux/home/interface/CardsInterface.d.ts +320 -55
  335. package/src/sap/cux/home/interface/CardsInterface.d.ts.map +1 -1
  336. package/src/sap/cux/home/interface/CardsInterface.js +5 -1
  337. package/src/sap/cux/home/interface/CardsInterface.js.map +1 -1
  338. package/src/sap/cux/home/interface/CardsInterface.ts +359 -55
  339. package/src/sap/cux/home/library-preload.js +88 -45
  340. package/src/sap/cux/home/library-preload.js.map +1 -1
  341. package/src/sap/cux/home/manifest.json +4 -4
  342. package/src/sap/cux/home/themes/base/AppsContainer.less +12 -0
  343. package/src/sap/cux/home/themes/base/BaseLayout.less +1 -0
  344. package/src/sap/cux/home/themes/base/ContentAdditionDialog.less +69 -0
  345. package/src/sap/cux/home/themes/base/NewsAndPagesContainer.less +37 -12
  346. package/src/sap/cux/home/themes/base/PlaceHolder.less +1374 -0
  347. package/src/sap/cux/home/themes/base/ToDosContainer.less +1 -1
  348. package/src/sap/cux/home/themes/base/library-RTL.css +2 -2
  349. package/src/sap/cux/home/themes/base/library-parameters.json +1 -1
  350. package/src/sap/cux/home/themes/base/library.css +2 -2
  351. package/src/sap/cux/home/themes/base/library.source.less +2 -0
  352. package/src/sap/cux/home/themes/sap_fiori_3/library-RTL.css +2 -2
  353. package/src/sap/cux/home/themes/sap_fiori_3/library-parameters.json +1 -1
  354. package/src/sap/cux/home/themes/sap_fiori_3/library.css +2 -2
  355. package/src/sap/cux/home/themes/sap_fiori_3_dark/library-RTL.css +2 -2
  356. package/src/sap/cux/home/themes/sap_fiori_3_dark/library-parameters.json +1 -1
  357. package/src/sap/cux/home/themes/sap_fiori_3_dark/library.css +2 -2
  358. package/src/sap/cux/home/themes/sap_fiori_3_hcb/AppsContainer.less +1 -0
  359. package/src/sap/cux/home/themes/sap_fiori_3_hcb/library-RTL.css +2 -2
  360. package/src/sap/cux/home/themes/sap_fiori_3_hcb/library-parameters.json +1 -1
  361. package/src/sap/cux/home/themes/sap_fiori_3_hcb/library.css +2 -2
  362. package/src/sap/cux/home/themes/sap_fiori_3_hcb/library.source.less +2 -0
  363. package/src/sap/cux/home/themes/sap_fiori_3_hcw/AppsContainer.less +1 -0
  364. package/src/sap/cux/home/themes/sap_fiori_3_hcw/library-RTL.css +2 -2
  365. package/src/sap/cux/home/themes/sap_fiori_3_hcw/library-parameters.json +1 -1
  366. package/src/sap/cux/home/themes/sap_fiori_3_hcw/library.css +2 -2
  367. package/src/sap/cux/home/themes/sap_fiori_3_hcw/library.source.less +2 -0
  368. package/src/sap/cux/home/themes/sap_horizon/library-RTL.css +2 -2
  369. package/src/sap/cux/home/themes/sap_horizon/library-parameters.json +1 -1
  370. package/src/sap/cux/home/themes/sap_horizon/library.css +2 -2
  371. package/src/sap/cux/home/themes/sap_horizon_dark/library-RTL.css +2 -2
  372. package/src/sap/cux/home/themes/sap_horizon_dark/library-parameters.json +1 -1
  373. package/src/sap/cux/home/themes/sap_horizon_dark/library.css +2 -2
  374. package/src/sap/cux/home/themes/sap_horizon_hcb/AppsContainer.less +1 -0
  375. package/src/sap/cux/home/themes/sap_horizon_hcb/library-RTL.css +2 -2
  376. package/src/sap/cux/home/themes/sap_horizon_hcb/library-parameters.json +1 -1
  377. package/src/sap/cux/home/themes/sap_horizon_hcb/library.css +2 -2
  378. package/src/sap/cux/home/themes/sap_horizon_hcb/library.source.less +2 -0
  379. package/src/sap/cux/home/themes/sap_horizon_hcw/AppsContainer.less +1 -0
  380. package/src/sap/cux/home/themes/sap_horizon_hcw/library-RTL.css +2 -2
  381. package/src/sap/cux/home/themes/sap_horizon_hcw/library-parameters.json +1 -1
  382. package/src/sap/cux/home/themes/sap_horizon_hcw/library.css +2 -2
  383. package/src/sap/cux/home/themes/sap_horizon_hcw/library.source.less +2 -0
  384. package/src/sap/cux/home/utils/AppManager-dbg.js +405 -440
  385. package/src/sap/cux/home/utils/AppManager-dbg.js.map +1 -1
  386. package/src/sap/cux/home/utils/AppManager.d.ts +88 -124
  387. package/src/sap/cux/home/utils/AppManager.d.ts.map +1 -1
  388. package/src/sap/cux/home/utils/AppManager.js +1 -1
  389. package/src/sap/cux/home/utils/AppManager.js.map +1 -1
  390. package/src/sap/cux/home/utils/AppManager.ts +351 -542
  391. package/src/sap/cux/home/utils/Constants-dbg.js +25 -1
  392. package/src/sap/cux/home/utils/Constants-dbg.js.map +1 -1
  393. package/src/sap/cux/home/utils/Constants.d.ts +17 -0
  394. package/src/sap/cux/home/utils/Constants.d.ts.map +1 -1
  395. package/src/sap/cux/home/utils/Constants.js +1 -1
  396. package/src/sap/cux/home/utils/Constants.js.map +1 -1
  397. package/src/sap/cux/home/utils/Constants.ts +20 -1
  398. package/src/sap/cux/home/utils/Device-dbg.js +49 -1
  399. package/src/sap/cux/home/utils/Device-dbg.js.map +1 -1
  400. package/src/sap/cux/home/utils/Device.d.ts +13 -0
  401. package/src/sap/cux/home/utils/Device.d.ts.map +1 -1
  402. package/src/sap/cux/home/utils/Device.js +1 -1
  403. package/src/sap/cux/home/utils/Device.js.map +1 -1
  404. package/src/sap/cux/home/utils/Device.ts +58 -1
  405. package/src/sap/cux/home/utils/InsightsUtils-dbg.js +25 -0
  406. package/src/sap/cux/home/utils/InsightsUtils-dbg.js.map +1 -1
  407. package/src/sap/cux/home/utils/InsightsUtils.d.ts +14 -0
  408. package/src/sap/cux/home/utils/InsightsUtils.d.ts.map +1 -1
  409. package/src/sap/cux/home/utils/InsightsUtils.js +1 -1
  410. package/src/sap/cux/home/utils/InsightsUtils.js.map +1 -1
  411. package/src/sap/cux/home/utils/InsightsUtils.ts +25 -0
  412. package/src/sap/cux/home/utils/PerformanceUtils-dbg.js +5 -2
  413. package/src/sap/cux/home/utils/PerformanceUtils-dbg.js.map +1 -1
  414. package/src/sap/cux/home/utils/PerformanceUtils.d.ts +1 -0
  415. package/src/sap/cux/home/utils/PerformanceUtils.d.ts.map +1 -1
  416. package/src/sap/cux/home/utils/PerformanceUtils.js +1 -1
  417. package/src/sap/cux/home/utils/PerformanceUtils.js.map +1 -1
  418. package/src/sap/cux/home/utils/PerformanceUtils.ts +5 -1
  419. package/src/sap/cux/home/utils/RecommendedCardUtil-dbg.js +1599 -0
  420. package/src/sap/cux/home/utils/RecommendedCardUtil-dbg.js.map +1 -0
  421. package/src/sap/cux/home/utils/RecommendedCardUtil.d.ts +534 -0
  422. package/src/sap/cux/home/utils/RecommendedCardUtil.d.ts.map +1 -0
  423. package/src/sap/cux/home/utils/RecommendedCardUtil.js +6 -0
  424. package/src/sap/cux/home/utils/RecommendedCardUtil.js.map +1 -0
  425. package/src/sap/cux/home/utils/RecommendedCardUtil.ts +1945 -0
  426. package/src/sap/cux/home/utils/SituationUtils-dbg.js +1 -1
  427. package/src/sap/cux/home/utils/SituationUtils-dbg.js.map +1 -1
  428. package/src/sap/cux/home/utils/SituationUtils.js +1 -1
  429. package/src/sap/cux/home/utils/SituationUtils.js.map +1 -1
  430. package/src/sap/cux/home/utils/SituationUtils.ts +1 -1
  431. package/src/sap/cux/home/utils/UshellPersonalizer-dbg.js.map +1 -1
  432. package/src/sap/cux/home/utils/UshellPersonalizer.d.ts +4 -1
  433. package/src/sap/cux/home/utils/UshellPersonalizer.d.ts.map +1 -1
  434. package/src/sap/cux/home/utils/UshellPersonalizer.js.map +1 -1
  435. package/src/sap/cux/home/utils/UshellPersonalizer.ts +2 -1
  436. package/src/sap/cux/home/utils/fragment/appsAdditionContent.fragment.xml +126 -0
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/ResourceBundle", "sap/ui/VersionInfo", "sap/ui/base/Object", "sap/ui/model/odata/v2/ODataModel", "sap/ushell/Config", "sap/ushell/Container", "./AnalyticalCardSkeleton", "./CardSkeleton", "./Constants", "./DataFormatUtils", "./HttpHelper"], function (Log, Formatting, ResourceBundle, VersionInfo, BaseObject, ODataModelV2, Config, Container, ___AnalyticalCardSkeleton, ___CardSkeleton, ___Constants, ___DataFormatUtils, __HttpHelper) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/i18n/ResourceBundle", "sap/ui/VersionInfo", "sap/ui/base/Object", "sap/ui/model/odata/v2/ODataModel", "sap/ushell/Config", "sap/ushell/Container", "./AnalyticalCardSkeleton", "./Constants", "./DataFormatUtils", "./HttpHelper", "./RecommendedCardUtil"], function (Log, ResourceBundle, VersionInfo, BaseObject, ODataModelV2, Config, Container, ___AnalyticalCardSkeleton, ___Constants, ___DataFormatUtils, __HttpHelper, __RecommendedCardUtil) {
6
6
  "use strict";
7
7
 
8
8
  function _interopRequireDefault(obj) {
@@ -163,7 +163,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
163
163
  return body(values[i]);
164
164
  }, check);
165
165
  }
166
- const CardSkeleton = ___CardSkeleton["CardSkeleton"];
166
+ const COLUMN_LENGTH = ___Constants["COLUMN_LENGTH"];
167
167
  function _catch(body, recover) {
168
168
  try {
169
169
  var result = body();
@@ -186,8 +186,8 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
186
186
  const RECOMMENDED_CARD_LIMIT = ___Constants["RECOMMENDED_CARD_LIMIT"];
187
187
  const createBookMarkData = ___DataFormatUtils["createBookMarkData"];
188
188
  const getLeanURL = ___DataFormatUtils["getLeanURL"];
189
- const sortCollectionByImportance = ___DataFormatUtils["sortCollectionByImportance"];
190
189
  const HttpHelper = _interopRequireDefault(__HttpHelper);
190
+ const RecommendedCardUtil = _interopRequireDefault(__RecommendedCardUtil);
191
191
  const CONSTANTS = {
192
192
  MUST_INCLUDE_RECOMMEDED_APPS: ["F0862", "F1823"] //My Inbox and Manage Timesheet apps
193
193
  };
@@ -295,14 +295,18 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
295
295
  *
296
296
  * @alias sap.cux.home.util.AppManager
297
297
  */
298
+
298
299
  class AppManager extends BaseObject {
299
300
  aRequestQueue = [];
300
301
  bInsightsSectionPresent = false;
301
302
  vizDataModified = false;
302
303
  _oVizCacheData = {};
303
304
  _favPageVisualizations = [];
305
+ componentData = {};
306
+ fioriAppData = {};
304
307
  constructor() {
305
308
  super();
309
+ this.recommendedUtilInstance = RecommendedCardUtil.getInstance();
306
310
  }
307
311
  static getInstance() {
308
312
  if (!AppManager.Instance) {
@@ -903,6 +907,17 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
903
907
  return Promise.reject(e);
904
908
  }
905
909
  }
910
+ /**
911
+ * Checks if a specific URL parameter is enabled (set to "true").
912
+ *
913
+ * @param {string} param - The name of the URL parameter to check.
914
+ * @returns {boolean} `true` if the URL parameter exists and is set to "true" (case-insensitive), otherwise `false`.
915
+ */
916
+ isURLParamEnabled(param) {
917
+ const urlParams = new URLSearchParams(window.location.search);
918
+ return urlParams?.get(param)?.toLowerCase() === "true" || false;
919
+ }
920
+
906
921
  /**
907
922
  * Fetch Recommended Fiori IDs
908
923
  *
@@ -947,38 +962,42 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
947
962
  */
948
963
  _getCatalogApps() {
949
964
  try {
950
- return Promise.resolve(_catch(function () {
951
- return Promise.resolve(Container.getServiceAsync("SearchableContent")).then(function (SearchableContent) {
952
- return SearchableContent.getApps({
953
- includeAppsWithoutVisualizations: false
965
+ let _exit3 = false;
966
+ const _this15 = this;
967
+ function _temp14(_result4) {
968
+ return _exit3 ? _result4 : Promise.resolve(_this15.catalogAppData);
969
+ }
970
+ const _temp13 = function () {
971
+ if (!_this15.catalogAppData) {
972
+ return _catch(function () {
973
+ return Promise.resolve(Container.getServiceAsync("SearchableContent")).then(function (SearchableContent) {
974
+ _this15.catalogAppData = SearchableContent.getApps({
975
+ includeAppsWithoutVisualizations: false
976
+ });
977
+ const _this15$catalogAppDat = _this15.catalogAppData;
978
+ _exit3 = true;
979
+ return _this15$catalogAppDat;
980
+ });
981
+ }, function (error) {
982
+ _this15.catalogAppData = undefined;
983
+ Log.error(error instanceof Error ? "Error while fetching catalog apps:" + error.message : String(error));
984
+ const _temp12 = [];
985
+ _exit3 = true;
986
+ return _temp12;
954
987
  });
955
- });
956
- }, function (error) {
957
- Log.error("Error while fetching catalog apps: " + error.message);
958
- return [];
959
- }));
988
+ }
989
+ }();
990
+ return Promise.resolve(_temp13 && _temp13.then ? _temp13.then(_temp14) : _temp14(_temp13));
960
991
  } catch (e) {
961
992
  return Promise.reject(e);
962
993
  }
963
994
  }
964
- /**
965
- * Check If Page is List Report
966
- *
967
- * @param {object} page - page object
968
- * @returns {boolean} returns boolean
969
- * @private
970
- */
971
- _isListReport(page) {
972
- return page?.component?.name === "sap.suite.ui.generic.template.ListReport";
973
- }
974
-
975
995
  /**
976
996
  * Checks whether page settings contains addCardtoInsightsHidden
977
997
  * @param {object} page - page object
978
998
  * @returns {boolean} returns boolean
979
999
  * @private
980
1000
  */
981
- // checks whether page settings contains addCardtoInsightsHidden
982
1001
  isAddCardToInsightsHidden(page) {
983
1002
  return page?.component?.settings?.tableSettings?.addCardtoInsightsHidden;
984
1003
  }
@@ -991,7 +1010,10 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
991
1010
  */
992
1011
 
993
1012
  _checkValidManifests(manifest) {
994
- const hasRequiredDataSource = manifest["sap.ui.generic.app"] && manifest["sap.app"]?.dataSources?.mainService;
1013
+ const dataSources = manifest["sap.app"]?.dataSources;
1014
+
1015
+ // Ensure dataSources has the correct structure for `mainService`
1016
+ const hasRequiredDataSource = manifest["sap.ui.generic.app"] && dataSources?.mainService;
995
1017
  if (!hasRequiredDataSource) {
996
1018
  return false;
997
1019
  }
@@ -999,12 +1021,12 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
999
1021
  // if its not list report component or if listreport page settings has
1000
1022
  // isAddCardToInsightsHidden as true, then do not recommend the card
1001
1023
  if (Array.isArray(pages)) {
1002
- return this._isListReport(pages[0]) && !this.isAddCardToInsightsHidden(pages[0]);
1003
- } else if (Object.keys(pages).length) {
1004
- return Object.keys(pages).some(key => {
1005
- if (pages[key]) {
1006
- return this._isListReport(pages[key]) && !this.isAddCardToInsightsHidden(pages[key]);
1007
- }
1024
+ return this.recommendedUtilInstance._isListReport(pages[0]) && !this.isAddCardToInsightsHidden(pages[0]);
1025
+ }
1026
+ const pageValues = Object.values(pages);
1027
+ if (pageValues.length > 0) {
1028
+ return pageValues.some(page => {
1029
+ return typeof page === "object" && this.recommendedUtilInstance._isListReport(page) && !this.isAddCardToInsightsHidden(page);
1008
1030
  });
1009
1031
  }
1010
1032
  return false;
@@ -1014,18 +1036,14 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1014
1036
  * Get OData Model
1015
1037
  *
1016
1038
  * @param {object} manifest - manifest object
1017
- * @returns {object} returns OData Model
1039
+ * @returns {ODataModelV2} returns OData Model
1018
1040
  * @private
1019
1041
  */
1020
1042
  _getOdataModel(oManifest) {
1021
1043
  return new Promise(function (resolve) {
1022
1044
  const datasource = oManifest?.["sap.app"]?.dataSources;
1023
1045
  const mainService = datasource?.mainService;
1024
- const annotationUrls = mainService?.settings?.annotations.map(sname => {
1025
- if (datasource && datasource[sname]) {
1026
- return datasource[sname]?.uri;
1027
- }
1028
- }).filter(urls => urls !== undefined);
1046
+ let annotationUrls = (mainService?.settings?.annotations || []).map(name => datasource?.[name]?.uri || "").filter(Boolean);
1029
1047
  const oDataModel = new ODataModelV2(mainService?.uri, {
1030
1048
  annotationURI: annotationUrls,
1031
1049
  loadAnnotationsJoined: true
@@ -1053,7 +1071,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1053
1071
  } else if (pages) {
1054
1072
  for (const key in pages) {
1055
1073
  const oApp = pages[key];
1056
- if (oApp.component && oApp.component?.name === "sap.suite.ui.generic.template.ListReport") {
1074
+ if (this.recommendedUtilInstance._isListReport(oApp)) {
1057
1075
  return oApp.entitySet;
1058
1076
  }
1059
1077
  }
@@ -1061,203 +1079,6 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1061
1079
  return undefined;
1062
1080
  }
1063
1081
 
1064
- /**
1065
- * function returns true if the passed entityset / properties have mandatory properties
1066
- *
1067
- * @param {EntitySet} oEntitySet - Entity set
1068
- * @param {Array} aProperties - Additional Properties
1069
- * @returns {boolean} returns boolean
1070
- * @private
1071
- */
1072
- _hasMandatoryProperties(oEntitySet, aProperties) {
1073
- // if entityset has required properties in filter restrictions return true
1074
- if (oEntitySet?.["Org.OData.Capabilities.V1.FilterRestrictions"]?.["RequiredProperties"]?.length) {
1075
- return true;
1076
- } else if (aProperties?.length) {
1077
- // iterate through all properties and return true if any property is mandatory or sap:rquired-in-filter is true
1078
- return aProperties.some(oProperty => {
1079
- return Object.keys(oProperty).length && (oProperty["sap:parameter"] === "mandatory" || oProperty["sap:required-in-filter"] === "true");
1080
- });
1081
- }
1082
- }
1083
-
1084
- /**
1085
- * Get Parametersised Entity Set Params
1086
- *
1087
- * @param {ODataMetaModel} oMetaModel - Meta Model
1088
- * @param {string} sEntitySet - Entity Set
1089
- * @param {boolean} bIsParamEntitySet - Is Param Entity Set
1090
- * @returns {object} returns entity set params
1091
- * @private
1092
- */
1093
- _getParametersisedEntitySetParams(oMetaModel, sEntitySet, bInfoParams) {
1094
- if (!oMetaModel) {
1095
- throw new Error("OData Model needs to be passed as an argument");
1096
- }
1097
- const oResult = {
1098
- entitySetName: null,
1099
- parameters: [],
1100
- navPropertyName: null
1101
- };
1102
- const oEntitySet = oMetaModel.getODataEntitySet(sEntitySet);
1103
- const oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
1104
- const aNavigationProperties = oEntityType.navigationProperty;
1105
- if (!aNavigationProperties) {
1106
- return oResult;
1107
- }
1108
- // filter the parameter entityset for extracting it's key and it's entityset name
1109
- aNavigationProperties.forEach(function (oNavProperty) {
1110
- const oNavigationEntitySet = oMetaModel.getODataAssociationEnd(oEntityType, oNavProperty.name);
1111
- const oNavigationEntityType = oNavigationEntitySet && oMetaModel.getODataEntityType(oNavigationEntitySet.type);
1112
- if (oNavigationEntityType?.["sap:semantics"] !== "parameters" || !oNavigationEntityType.key) {
1113
- return;
1114
- }
1115
- oResult.entitySetName = oMetaModel.getODataAssociationSetEnd(oEntityType, oNavProperty.name)?.entitySet;
1116
- for (let value of oNavigationEntityType.key.propertyRef) {
1117
- if (bInfoParams) {
1118
- const navProp = oNavigationEntityType.property;
1119
- for (let navProperty of navProp) {
1120
- if (navProperty.name === value.name) {
1121
- oResult.parameters.push(navProperty);
1122
- oResult.entitySetName = oMetaModel.getODataAssociationSetEnd(oEntityType, oNavProperty.name)?.entitySet;
1123
- }
1124
- }
1125
- } else {
1126
- oResult.parameters.push(value.name);
1127
- }
1128
- }
1129
- const aSubNavigationProperties = oNavigationEntityType.navigationProperty;
1130
- // Parameter entityset must have association back to main entityset.
1131
- const bBackAssociationPresent = aSubNavigationProperties?.some(function (oSubNavigationProperty) {
1132
- const sSubNavigationEntityType = oMetaModel.getODataAssociationEnd(oNavigationEntityType, oSubNavigationProperty.name)?.type;
1133
- //if entityset.entitytype is same as subnavigation entitytype then it's a back association
1134
- oResult.navPropertyName = sSubNavigationEntityType === oEntitySet.entityType ? oSubNavigationProperty.name : null;
1135
- return oResult.navPropertyName;
1136
- });
1137
- return bBackAssociationPresent && oResult.navPropertyName && oResult.entitySetName;
1138
- });
1139
- return oResult;
1140
- }
1141
-
1142
- /**
1143
- * Get Column Detail
1144
- *
1145
- * @param {object} oEntityType - entity type object
1146
- * @param {object} oMetaModel - meta model object
1147
- * @param {object} oColumn - column object
1148
- * @returns {object} returns column detail
1149
- * @private
1150
- */
1151
- _getColumnDetail(oEntityType, oMetaModel, oLineItemContext) {
1152
- let oProperty,
1153
- oColumnObject = {};
1154
- if (oLineItemContext.Value?.Path) {
1155
- oProperty = oMetaModel.getODataProperty(oEntityType, oLineItemContext.Value.Path);
1156
- }
1157
- if (!oProperty || oProperty["com.sap.vocabularies.UI.v1.Hidden"]?.Bool || oLineItemContext["com.sap.vocabularies.UI.v1.Hidden"]?.Bool) {
1158
- return oColumnObject;
1159
- }
1160
- // if there is field control path binding then ignore the column
1161
- if (oProperty["com.sap.vocabularies.Common.v1.FieldControl"]?.Path) {
1162
- return undefined;
1163
- }
1164
- let sColumnKeyDescription = oProperty["com.sap.vocabularies.Common.v1.Text"]?.Path || "";
1165
- sColumnKeyDescription = "{" + sColumnKeyDescription + "}";
1166
- let sColumnValue = "{" + oProperty.name + "}";
1167
- let sNavigation = ""; //need to improve
1168
- const aSemKeyAnnotation = oEntityType["com.sap.vocabularies.Common.v1.SemanticKey"];
1169
- const bIsPropertySemanticKey = !!aSemKeyAnnotation && aSemKeyAnnotation.some(function (oAnnotation) {
1170
- return oAnnotation.PropertyPath === oProperty.name;
1171
- });
1172
- if (oProperty["Org.OData.Measures.V1.ISOCurrency"]?.Path) {
1173
- sColumnValue = sColumnValue.concat(" " + "{" + sNavigation + oProperty["Org.OData.Measures.V1.ISOCurrency"].Path + "}");
1174
- }
1175
- if (oProperty["Org.OData.Measures.V1.Unit"]?.Path) {
1176
- sColumnValue = sColumnValue.concat(" " + "{" + sNavigation + oProperty["Org.OData.Measures.V1.Unit"].Path + "}");
1177
- }
1178
- if (oProperty["com.sap.vocabularies.Common.v1.Text"]?.Path) {
1179
- let sTextArragement = oProperty["com.sap.vocabularies.Common.v1.Text"]["com.sap.vocabularies.UI.v1.TextArrangement"];
1180
- if (!sTextArragement) {
1181
- sTextArragement = oEntityType["com.sap.vocabularies.UI.v1.TextArrangement"];
1182
- }
1183
- this._setColumnTextValue(sTextArragement, oColumnObject, sColumnKeyDescription, sColumnValue);
1184
- } else {
1185
- oColumnObject["value"] = sColumnValue;
1186
- if (bIsPropertySemanticKey) {
1187
- oColumnObject.identifier = bIsPropertySemanticKey;
1188
- }
1189
- }
1190
- oColumnObject.path = oProperty["com.sap.vocabularies.Common.v1.Text"] ? oProperty["com.sap.vocabularies.Common.v1.Text"].Path : oProperty.name;
1191
- oColumnObject.importance = oLineItemContext["com.sap.vocabularies.UI.v1.Importance"];
1192
- oColumnObject.type = oProperty.type;
1193
- return oColumnObject;
1194
- }
1195
-
1196
- /**
1197
- * Sets display text format of column
1198
- *
1199
- * @private
1200
- * @param {{EnumMember: string} | undefined} sTextArragement - sTextArragement object
1201
- * @param {Record<string, unknown>} oColumnObject - Object containing column details
1202
- * @param {string} sColumnKeyDescription - Description field to include in text value
1203
- * @param {string} sColumnValue - The value to include in Text value
1204
- */
1205
- _setColumnTextValue(sTextArragement, oColumnObject, sColumnKeyDescription, sColumnValue) {
1206
- const sTextArrangementType = sTextArragement?.EnumMember.split("/")[1];
1207
- if (sTextArrangementType === "TextOnly") {
1208
- oColumnObject["value"] = "{= $" + sColumnKeyDescription + " === '' ? '' : $" + sColumnKeyDescription + "}";
1209
- } else if (sTextArrangementType === "TextLast") {
1210
- oColumnObject["value"] = "{= $" + sColumnValue + " === '' ? '' : $" + sColumnValue + "}" + "{= $" + sColumnKeyDescription + " === '' ? '' : ' (' + ($" + sColumnKeyDescription + ") + ')'}";
1211
- } else if (sTextArrangementType === "TextSeparate") {
1212
- oColumnObject["value"] = "{= $" + sColumnValue + " === '' ? '' : $" + sColumnValue + "}";
1213
- } else {
1214
- // Default case
1215
- oColumnObject["value"] = "{= $" + sColumnKeyDescription + " === '' ? '' : $" + sColumnKeyDescription + "}" + "{= $" + sColumnValue + " === '' ? '' : ' (' + ($" + sColumnValue + ") + ')'}";
1216
- }
1217
- }
1218
-
1219
- /**
1220
- * Get Manifest Card Data
1221
- *
1222
- * @param {object} manifest - manifest object
1223
- * @param {object} entityType - entity type object
1224
- * @param {object} lineItem - line item object
1225
- * @param {string} entitySet - entity set
1226
- * @param {object} parentApp - parent app object
1227
- * @param {object} metaModel - meta model object
1228
- * @returns {object} returns card data
1229
- * @private
1230
- */
1231
- _getManifestCardData(manifest, oEntityType, lineItem, entitySet, oParentApp, oMetaModel) {
1232
- const mainServiceUri = manifest?.["sap.app"]?.dataSources.mainService.uri;
1233
- const serviceUrl = mainServiceUri?.[mainServiceUri.length - 1] === "/" ? mainServiceUri + entitySet : mainServiceUri + "/" + entitySet;
1234
-
1235
- //get the column details for each of the lineitem columns
1236
- const aColumns = lineItem?.map(oColumn => {
1237
- return this._getColumnDetail(oEntityType, oMetaModel, oColumn);
1238
- }).filter(function (oItem) {
1239
- // if no column or if path of column is complex path then filter it out
1240
- return oItem !== undefined && oItem.path.split("/").length <= 1;
1241
- });
1242
- //sort the column based on their importance and then splice the first 4 columns
1243
- const aColumnSorted = sortCollectionByImportance(aColumns).map(column => {
1244
- return {
1245
- path: column.path,
1246
- type: column.type,
1247
- value: column.value
1248
- };
1249
- }).splice(0, 4);
1250
- return {
1251
- cardTitle: manifest?.["sap.app"]?.title,
1252
- subTitle: oEntityType["com.sap.vocabularies.Common.v1.Label"] ? "Top 5 " + oEntityType["com.sap.vocabularies.Common.v1.Label"].String : "",
1253
- url: serviceUrl + "?$top=5&skip=0",
1254
- semanticObject: oParentApp.semanticObject,
1255
- action: oParentApp.action,
1256
- id: manifest?.["sap.app"]?.id,
1257
- columns: aColumnSorted
1258
- };
1259
- }
1260
-
1261
1082
  /**
1262
1083
  * Load I18n
1263
1084
  *
@@ -1268,27 +1089,27 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1268
1089
  */
1269
1090
  loadI18n(manifest, manifestUrl) {
1270
1091
  try {
1271
- const _this15 = this;
1272
- function _temp13() {
1273
- return _this15._RBManifestMap[absoluteUrl];
1092
+ const _this16 = this;
1093
+ function _temp16() {
1094
+ return _this16._RBManifestMap[absoluteUrl];
1274
1095
  }
1275
1096
  // construct abslute url for properties file relative to manifest url
1276
- const i18nBundleUrl = manifest?.["sap.app"]?.["i18n"]["bundleUrl"];
1097
+ const i18nBundleUrl = manifest?.["sap.app"]?.["i18n"]?.["bundleUrl"];
1277
1098
  const absoluteUrl = new URL(i18nBundleUrl, manifestUrl).href;
1278
- _this15._RBManifestMap = _this15._RBManifestMap || {};
1279
- const _temp12 = function () {
1280
- if (!_this15._RBManifestMap[absoluteUrl]) {
1099
+ _this16._RBManifestMap = _this16._RBManifestMap || {};
1100
+ const _temp15 = function () {
1101
+ if (!_this16._RBManifestMap[absoluteUrl]) {
1281
1102
  return Promise.resolve(ResourceBundle.create({
1282
1103
  // specify url of the base .properties file
1283
1104
  bundleUrl: absoluteUrl,
1284
1105
  async: true,
1285
- terminologies: manifest["sap.app"]?.["i18n"]["terminologies"]
1106
+ terminologies: manifest["sap.app"]?.["i18n"]?.["terminologies"]
1286
1107
  })).then(function (oResourceBundle) {
1287
- _this15._RBManifestMap[absoluteUrl] = oResourceBundle;
1108
+ _this16._RBManifestMap[absoluteUrl] = oResourceBundle;
1288
1109
  });
1289
1110
  }
1290
1111
  }();
1291
- return Promise.resolve(_temp12 && _temp12.then ? _temp12.then(_temp13) : _temp13(_temp12));
1112
+ return Promise.resolve(_temp15 && _temp15.then ? _temp15.then(_temp16) : _temp16(_temp15));
1292
1113
  } catch (e) {
1293
1114
  return Promise.reject(e);
1294
1115
  }
@@ -1311,24 +1132,6 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1311
1132
  return sPath ? oRB.getText(sPath) : sValue;
1312
1133
  }
1313
1134
 
1314
- /**
1315
- * Get Attribute Value
1316
- *
1317
- * @param {object} oColumn - column object
1318
- * @returns {string} returns attribute value
1319
- * @private
1320
- */
1321
- _getAttributeValue(oAttribute) {
1322
- let oAttributeValue = !oAttribute.value.startsWith("{") ? "{= extension.formatters.stringFormatter(${" + oAttribute.path + "}) }" : oAttribute.value;
1323
- if (oAttribute.type === "Edm.Date" || oAttribute.type === "Edm.DateTime") {
1324
- const oDateFormatOptions = JSON.stringify({
1325
- pattern: Formatting.getDatePattern("short")
1326
- });
1327
- oAttributeValue = "{=${" + oAttribute.path + "}?format.dateTime(${" + oAttribute.path + "}, " + oDateFormatOptions + ") : ''}";
1328
- }
1329
- return oAttributeValue;
1330
- }
1331
-
1332
1135
  /**
1333
1136
  * Retrieves a copy of the analytical card manifest.
1334
1137
  *
@@ -1339,48 +1142,177 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1339
1142
  _getAnalyticalCardManifest() {
1340
1143
  return JSON.parse(JSON.stringify(AnalyticalCardSkeleton));
1341
1144
  }
1145
+
1342
1146
  /**
1343
- * Get Manifest
1147
+ * Processes the app manifest and generates a recommended card manifest if the app meets the required conditions.
1344
1148
  *
1345
- * @param {object} cardInput - card input object
1346
- * @returns {object} returns manifest
1149
+ * @param {ODataMetaModel} metaModel - The OData meta model containing metadata about entities and properties.
1150
+ * @param {IValidManifest} manifestObj - An object containing the app manifest and its URL.
1151
+ * @param {AppInfoData | undefined} parentApp - The parent app information, if available.
1152
+ * @param {IVersionInfo} versionInfo - The version and build timestamp of the app.
1153
+ * @returns {Promise<ICardManifest | undefined>} A promise that resolves to the generated card manifest if the app is eligible,
1154
+ * or `undefined` if the app does not meet the required conditions.
1347
1155
  * @private
1348
1156
  */
1349
- _getListCardManifest(oInput) {
1350
- const cardSkeletonCopy = JSON.parse(JSON.stringify(CardSkeleton));
1351
- const oApp = cardSkeletonCopy["sap.app"];
1352
- const oCard = cardSkeletonCopy["sap.card"];
1353
- if (oApp) {
1354
- oApp.id = "user." + oInput.id + "." + Date.now();
1355
- oApp.title = oCard.header.title = oInput.cardTitle;
1356
- oApp.subTitle = oCard.header.subTitle = oInput.subTitle;
1157
+ getProcessedManifest(metaModel, manifestObj, parentApp, versionInfo) {
1158
+ try {
1159
+ const _this17 = this;
1160
+ return Promise.resolve(_catch(function () {
1161
+ function _temp19() {
1162
+ return _this17.recommendedUtilInstance._createCardManifest(cardInput, versionInfo, manifest, suppressRowNavigation);
1163
+ }
1164
+ const manifest = manifestObj.manifest;
1165
+ const mainEntitySetName = _this17._getEntitySet(manifest);
1166
+ if (!mainEntitySetName) {
1167
+ return undefined;
1168
+ }
1169
+ const mainEntitySet = metaModel.getODataEntitySet(mainEntitySetName);
1170
+ const lineItemDetails = _this17.recommendedUtilInstance.getLineItemDetails(metaModel, manifest, mainEntitySetName);
1171
+ if (!lineItemDetails?.lineItem) {
1172
+ return undefined;
1173
+ }
1174
+ const entitySetName = lineItemDetails.entitySet || mainEntitySetName;
1175
+ const entitySet = entitySetName === mainEntitySetName ? mainEntitySet : metaModel.getODataEntitySet(entitySetName);
1176
+ const entityType = metaModel.getODataEntityType(entitySet.entityType);
1177
+ const suppressRowNavigation = lineItemDetails?.lrSettings?.["bSupressCardRowNavigation"];
1178
+
1179
+ // Check for mandatory properties
1180
+ if (_this17.recommendedUtilInstance.hasMandatoryProperties(entitySet, entityType?.property)) {
1181
+ return undefined;
1182
+ }
1183
+
1184
+ // Check for parameterized entity sets
1185
+ const parameterDetails = _this17.recommendedUtilInstance._getParametersisedEntitySetParams(metaModel, entitySetName, true);
1186
+ if (parameterDetails?.entitySetName && parameterDetails?.parameters?.length) {
1187
+ const paramEntitySet = metaModel.getODataEntitySet(parameterDetails.entitySetName);
1188
+ if (_this17.recommendedUtilInstance.hasMandatoryProperties(paramEntitySet, parameterDetails.parameters)) {
1189
+ return undefined;
1190
+ }
1191
+ }
1192
+ const cardInput = _this17.recommendedUtilInstance._getManifestCardData(manifest, lineItemDetails, parentApp, metaModel);
1193
+
1194
+ // Ensure the card has at least 3 columns
1195
+ if (cardInput.columns.length < COLUMN_LENGTH) {
1196
+ return undefined;
1197
+ }
1198
+
1199
+ // Resolve card title
1200
+ const headerInfo = lineItemDetails?.headerInfo;
1201
+ const cardTitle = headerInfo.TypeNamePlural?.String || "";
1202
+ cardInput.cardTitle = cardTitle || cardInput.cardTitle;
1203
+
1204
+ // Resolve i18n title if necessary
1205
+ const _temp18 = function () {
1206
+ if (!cardTitle && manifest["sap.app"]?.i18n) {
1207
+ const i18nBundleUrl = manifest["sap.app"].i18n.bundleUrl;
1208
+ const appTitle = manifest["sap.app"].title;
1209
+ const _temp17 = function () {
1210
+ if (i18nBundleUrl && (appTitle.startsWith("i18n>") || appTitle.startsWith("{"))) {
1211
+ return Promise.resolve(_this17.loadI18n(manifest, manifestObj.url)).then(function (i18nResourceBundle) {
1212
+ cardInput.cardTitle = _this17.getI18nValueOrDefaultString(cardInput.cardTitle, i18nResourceBundle);
1213
+ });
1214
+ }
1215
+ }();
1216
+ if (_temp17 && _temp17.then) return _temp17.then(function () {});
1217
+ }
1218
+ }();
1219
+ return _temp18 && _temp18.then ? _temp18.then(_temp19) : _temp19(_temp18);
1220
+ }, function (oError) {
1221
+ Log.error("Error while processing manifest", oError instanceof Error ? oError.message : String(oError));
1222
+ return undefined;
1223
+ }));
1224
+ } catch (e) {
1225
+ return Promise.reject(e);
1357
1226
  }
1358
- const oContent = oCard.content;
1359
- oContent.item.title = this._getAttributeValue(oInput.columns[0]);
1360
- oContent.item.description = this._getAttributeValue(oInput.columns[1]);
1361
- oContent.item.attributes[0] = {
1362
- value: this._getAttributeValue(oInput.columns[2]),
1363
- visible: "{= !!${" + oInput.columns[2].path + "} }"
1364
- };
1365
- oContent.data.request.url = oInput.url;
1366
- oContent.item.actions = oCard.header.actions = [{
1367
- type: "Navigation",
1368
- parameters: {
1369
- ibnTarget: {
1370
- semanticObject: oInput.semanticObject,
1371
- action: oInput.action
1227
+ }
1228
+ /**
1229
+ * Fetches the OData meta models for a given list of valid manifests.
1230
+ * @param {IValidManifest[]} validManifests - An array of valid manifest objects
1231
+ * @returns {Promise<(ODataMetaModel | undefined)[]>} A promise that resolves to an array of OData meta models.
1232
+ * Each element corresponds to a manifest in the input array, and may be `undefined` if the meta model could not be fetched.
1233
+ * @private
1234
+ */
1235
+ fetchMetaModels(validManifests) {
1236
+ try {
1237
+ const _this18 = this;
1238
+ const odataPromises = validManifests.map(function (manifestObj) {
1239
+ try {
1240
+ return Promise.resolve(_catch(function () {
1241
+ return Promise.resolve(_this18._getOdataModel(manifestObj.manifest)).then(function (_this18$_getOdataMode) {
1242
+ return _this18$_getOdataMode?.getMetaModel();
1243
+ });
1244
+ }, function (oError) {
1245
+ Log.error("Error while fetching metamodel", oError instanceof Error ? oError.message : String(oError));
1246
+ return undefined;
1247
+ }));
1248
+ } catch (e) {
1249
+ return Promise.reject(e);
1372
1250
  }
1251
+ });
1252
+ return Promise.resolve(Promise.all(odataPromises));
1253
+ } catch (e) {
1254
+ return Promise.reject(e);
1255
+ }
1256
+ }
1257
+ /**
1258
+ * Combines the valid manifests with their corresponding OData meta models.
1259
+ * @param {IValidManifest[]} validManifests - An array of valid manifest objects
1260
+ * @param {ODataMetaModel[]} aMetaModel - An array of OData meta models
1261
+ * @returns {ICombinedManifestDetails[]} An array of objects containing the manifest and the corresponding meta model.
1262
+ * @private
1263
+ */
1264
+ combineManifestsAndMetaModels(validManifests, aMetaModel) {
1265
+ return validManifests.reduce((combined, manifestObj, index) => {
1266
+ const metaModel = aMetaModel[index];
1267
+ if (metaModel) {
1268
+ combined.push({
1269
+ manifest: manifestObj,
1270
+ metaModel
1271
+ });
1373
1272
  }
1374
- }];
1375
- cardSkeletonCopy["sap.insights"] = {
1376
- parentAppId: oInput.id,
1377
- cardType: "RT",
1378
- versions: {
1379
- ui5: this.versionInfo.version + "-" + this.versionInfo.buildTimestamp
1380
- },
1381
- visible: true
1382
- };
1383
- return cardSkeletonCopy;
1273
+ return combined;
1274
+ }, []);
1275
+ }
1276
+
1277
+ /**
1278
+ * Process the manifest and meta model to get the card manifest
1279
+ * @param {ICombinedManifestDetails[]} combinedDetails - An array of objects containing the manifest and the corresponding meta model.
1280
+ * @param {IAppInfoData[]} aCSTR - An array of app info data
1281
+ * @returns {Promise<(ICardManifest | undefined)[]>} A promise that resolves to an array of recommended card manifests.
1282
+ * @private
1283
+ */
1284
+ processManifests(combinedDetails, aCSTR) {
1285
+ try {
1286
+ const _this19 = this;
1287
+ return Promise.all(combinedDetails.map(item => {
1288
+ const parentApp = aCSTR.find(oApp => oApp.resolutionResult?.ui5ComponentName === item.manifest.manifest?.["sap.app"]?.id);
1289
+ return _this19.getProcessedManifest(item.metaModel, item.manifest, parentApp, _this19.versionInfo);
1290
+ }));
1291
+ } catch (e) {
1292
+ return Promise.reject(e);
1293
+ }
1294
+ }
1295
+ /**
1296
+ * Processes the app list to generate a list of Fiori IDs.
1297
+ *
1298
+ * If `aList` is not provided, it uses `aAppComponentIds` and `aComponent` to generate the list of Fiori IDs.
1299
+ * It matches the `semanticObject` and `action` of each component in `aAppComponentIds` with the entries in `aComponent`.
1300
+ * If a match is found, the corresponding `fioriId` is added to the list.
1301
+ *
1302
+ * @param {string[]} [aList] - An optional array of Fiori IDs to return directly.
1303
+ * @param {ICardDetails[]} [aAppComponentIds] - An array of app component details to process.
1304
+ * @param {IAppInfo} [aComponent] - A mapping of component IDs to their corresponding data entries.
1305
+ * @returns {string[]} - A list of Fiori IDs.
1306
+ */
1307
+ processAppList(aList, aAppComponentIds, aComponent) {
1308
+ if (!aList && aAppComponentIds && aAppComponentIds.length) {
1309
+ return aAppComponentIds.reduce((list, oComponent) => {
1310
+ const oData = aComponent?.[oComponent.id] || [];
1311
+ const matchingData = oData.find(entry => entry.semanticObject === oComponent.target?.semanticObject && entry.action === oComponent.target?.action);
1312
+ return matchingData ? [...list, matchingData.fioriId] : list;
1313
+ }, []);
1314
+ }
1315
+ return aList || [];
1384
1316
  }
1385
1317
 
1386
1318
  /**
@@ -1390,119 +1322,94 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1390
1322
  * @returns {Promise} resolves to array of card manifest
1391
1323
  * @private
1392
1324
  */
1393
- _getCardMainfest(aAppIds) {
1325
+ _getCardManifest(aList, aAppComponentIds) {
1394
1326
  try {
1395
- const _this16 = this;
1396
- return Promise.resolve(Promise.all([_this16._getInboundApps(), _this16._getCatalogApps()])).then(function (_ref3) {
1397
- let [aInbounds, aCatalog] = _ref3;
1398
- return Promise.resolve(VersionInfo.load()).then(function (_VersionInfo$load) {
1399
- _this16.versionInfo = _VersionInfo$load;
1400
- let aAppUrls = aAppIds.map(appId => {
1401
- const oApp = aInbounds.find(oItem => {
1402
- return oItem?.signature?.parameters?.["sap-fiori-id"]?.defaultValue?.value === appId;
1403
- });
1404
- if (oApp) {
1405
- const oViz = aCatalog.find(oCatalog => {
1406
- return oApp.semanticObject === oCatalog.target?.semanticObject && oApp.action === oCatalog.target?.action;
1407
- });
1408
- return oViz && oApp?.resolutionResult?.applicationDependencies?.manifest;
1409
- }
1410
- return undefined;
1411
- }).filter(url => {
1412
- return url !== undefined;
1413
- });
1414
- const aManifestPromises = aAppUrls.map(function (url) {
1415
- try {
1416
- return Promise.resolve(fetch(String(url))).then(function (response) {
1417
- return Promise.resolve(response.json()).then(function (_response$json) {
1418
- const manifest = _response$json;
1419
- return {
1420
- url: response.url,
1421
- manifest: manifest
1422
- };
1327
+ const _this20 = this;
1328
+ return Promise.resolve(_catch(function () {
1329
+ return Promise.resolve(Promise.all([_this20._getCatalogApps(), _this20.getFioriAppData()])).then(function (_ref3) {
1330
+ let [aCatalog, aFioriData] = _ref3;
1331
+ return Promise.resolve(VersionInfo.load()).then(function (_VersionInfo$load) {
1332
+ _this20.versionInfo = _VersionInfo$load;
1333
+ const aCSTR = Object.values(aFioriData).flat();
1334
+ const aComponent = _this20.componentData;
1335
+ // in case of replacing old recommended cards fioriIds are not available hence make use of componnetname
1336
+ // and semanticobject and action to find fioriId, and populate aList to recreate recommended card again
1337
+ const processedList = _this20.processAppList(aList, aAppComponentIds, aComponent);
1338
+ return Promise.resolve(_this20.fetchManifests(processedList, aFioriData, aCatalog)).then(function (manifests) {
1339
+ const validManifests = manifests.filter(manifestObj => _this20._checkValidManifests(manifestObj.manifest));
1340
+ return Promise.resolve(_this20.fetchMetaModels(validManifests)).then(function (aMetaModel) {
1341
+ const combinedDetails = _this20.combineManifestsAndMetaModels(validManifests, aMetaModel);
1342
+ return Promise.resolve(_this20.processManifests(combinedDetails, aCSTR)).then(function (cards) {
1343
+ return cards.filter(card => card !== undefined);
1423
1344
  });
1424
1345
  });
1425
- } catch (e) {
1426
- return Promise.reject(e);
1427
- }
1428
- });
1429
- return Promise.resolve(Promise.all(aManifestPromises)).then(function (aManifest) {
1430
- const validManifests = aManifest.filter(manifestObj => {
1431
- return _this16._checkValidManifests(manifestObj.manifest);
1432
- });
1433
- const odataPromises = validManifests.map(manifestObj => {
1434
- return _this16._getOdataModel(manifestObj.manifest).then(model => {
1435
- return model.getMetaModel();
1436
- });
1437
1346
  });
1438
- return Promise.resolve(Promise.all(odataPromises)).then(function (aMetaModel) {
1439
- const cardPromises = validManifests.map(function (manifestObj, index) {
1440
- try {
1441
- let _exit3 = false;
1442
- return Promise.resolve(_catch(function () {
1443
- function _temp15(_result5) {
1444
- return _exit3 ? _result5 : _this16._getListCardManifest(cardInput);
1445
- }
1446
- const oMetaModel = aMetaModel[index];
1447
- const entitySet = _this16._getEntitySet(manifestObj.manifest);
1448
- if (!entitySet) {
1449
- return undefined;
1450
- }
1451
- const oEntitySet = oMetaModel.getODataEntitySet(entitySet);
1452
- const oEntityType = oMetaModel.getODataEntityType(oEntitySet.entityType);
1453
- const oLineItem = oEntityType["com.sap.vocabularies.UI.v1.LineItem"];
1454
- if (!oLineItem || _this16._hasMandatoryProperties(oEntitySet, oEntityType.property)) {
1455
- return undefined;
1456
- }
1457
- const parameterDetails = _this16._getParametersisedEntitySetParams(oMetaModel, entitySet, true);
1458
- if (parameterDetails && parameterDetails.entitySetName && parameterDetails.parameters.length) {
1459
- const paramEntitySet = oMetaModel.getODataEntitySet(parameterDetails.entitySetName);
1460
- if (_this16._hasMandatoryProperties(paramEntitySet, parameterDetails.parameters)) {
1461
- return undefined;
1462
- }
1463
- }
1464
- const oParentApp = aInbounds.find(function (oApp) {
1465
- return oApp.resolutionResult && oApp.resolutionResult.ui5ComponentName === manifestObj?.manifest?.["sap.app"]?.id;
1347
+ });
1348
+ });
1349
+ }, function (oError) {
1350
+ Log.error("Error while fetching card manifest", oError instanceof Error ? oError.message : String(oError));
1351
+ return [];
1352
+ }));
1353
+ } catch (e) {
1354
+ return Promise.reject(e);
1355
+ }
1356
+ }
1357
+ /**
1358
+ * Fetch the app manifest for the given app ids
1359
+ * @param {string[]} appIdList - array of app ids
1360
+ * @param {AppInfo} fioriData - fiori data
1361
+ * @param {AppData[]} catalogData - catalog data
1362
+ * @returns {Promise} resolves to array of manifests
1363
+ * @private
1364
+ */
1365
+ fetchManifests(appIdList, fioriData, catalogData) {
1366
+ try {
1367
+ return Promise.resolve(_catch(function () {
1368
+ const appPromises = appIdList.map(function (appId) {
1369
+ try {
1370
+ let _exit4 = false;
1371
+ const aApp = fioriData[appId] || [];
1372
+ const _temp20 = _forOf(aApp, function (oApp) {
1373
+ const oViz = catalogData.find(catalog => oApp.semanticObject === catalog.target?.semanticObject && oApp.action === catalog.target?.action);
1374
+ const manifestUrl = oApp?.resolutionResult?.applicationDependencies?.manifest;
1375
+ return function () {
1376
+ if (oViz && manifestUrl) {
1377
+ return _catch(function () {
1378
+ return Promise.resolve(fetch(manifestUrl)).then(function (response) {
1379
+ return Promise.resolve(response.json()).then(function (_response$json) {
1380
+ const manifest = _response$json;
1381
+ const _url$manifest = {
1382
+ url: response.url,
1383
+ manifest
1384
+ };
1385
+ _exit4 = true;
1386
+ return _url$manifest;
1387
+ });
1466
1388
  });
1467
- const cardInput = _this16._getManifestCardData(manifestObj.manifest, oEntityType, oLineItem, entitySet, oParentApp, oMetaModel);
1468
- // if less than 3 columns are present in the card, then do not recommend the card
1469
- if (cardInput.columns.length < 3) {
1470
- return undefined;
1471
- }
1472
- const _temp14 = function () {
1473
- if (typeof manifestObj?.manifest?.["sap.app"]?.i18n === "object") {
1474
- const i18nBundleUrl = manifestObj.manifest["sap.app"].i18n.bundleUrl;
1475
- //if manifest title is not resolved load the resource bundle of the parent app and get the text
1476
- return function () {
1477
- if (i18nBundleUrl && (manifestObj.manifest["sap.app"].title.startsWith("i18n>") || manifestObj.manifest["sap.app"].title.startsWith("{"))) {
1478
- return Promise.resolve(_this16.loadI18n(manifestObj.manifest, manifestObj.url)).then(function (i18nResourceBundle) {
1479
- cardInput.cardTitle = _this16.getI18nValueOrDefaultString(cardInput.cardTitle, i18nResourceBundle);
1480
- const _this16$_getListCardM = _this16._getListCardManifest(cardInput);
1481
- _exit3 = true;
1482
- return _this16$_getListCardM;
1483
- });
1484
- }
1485
- }();
1486
- }
1487
- }();
1488
- return _temp14 && _temp14.then ? _temp14.then(_temp15) : _temp15(_temp14);
1489
1389
  }, function (error) {
1490
- Log.error(error);
1390
+ Log.error("Error while fetching manifest", error instanceof Error ? error.message : String(error));
1391
+ _exit4 = true;
1491
1392
  return undefined;
1492
- }));
1493
- } catch (e) {
1494
- return Promise.reject(e);
1393
+ });
1495
1394
  }
1496
- });
1497
- return Promise.resolve(Promise.all(cardPromises)).then(function (cards) {
1498
- return cards.filter(card => {
1499
- return card !== undefined;
1500
- });
1501
- });
1395
+ }();
1396
+ }, function () {
1397
+ return _exit4;
1502
1398
  });
1503
- });
1399
+ return Promise.resolve(_temp20 && _temp20.then ? _temp20.then(function (_result6) {
1400
+ return _exit4 ? _result6 : undefined;
1401
+ }) : _exit4 ? _temp20 : undefined); // No valid manifest found in this appId's entries
1402
+ } catch (e) {
1403
+ return Promise.reject(e);
1404
+ }
1504
1405
  });
1505
- });
1406
+ return Promise.resolve(Promise.all(appPromises)).then(function (results) {
1407
+ return results.filter(manifest => manifest !== undefined);
1408
+ });
1409
+ }, function (oError) {
1410
+ Log.error("Error while processing manifests", oError instanceof Error ? oError.message : String(oError));
1411
+ return [];
1412
+ }));
1506
1413
  } catch (e) {
1507
1414
  return Promise.reject(e);
1508
1415
  }
@@ -1530,19 +1437,19 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1530
1437
  /**
1531
1438
  * Fetch Recommended Cards
1532
1439
  *
1533
- * @returns {Promise} resolves to array of recommended cards
1440
+ * @returns {Promise<ICard[] | []> } resolves to array of recommended cards
1534
1441
  * @private
1535
1442
  */
1536
1443
  getRecommenedCards() {
1537
1444
  try {
1538
- const _this17 = this;
1445
+ const _this21 = this;
1539
1446
  return Promise.resolve(_catch(function () {
1540
- return Promise.resolve(_this17._getRecommenedFioriIds()).then(function (aAppIds) {
1541
- return Promise.resolve(_this17._getCardMainfest(aAppIds)).then(function (aManifests) {
1542
- const aRecManifests = aManifests.slice(0, RECOMMENDED_CARD_LIMIT);
1543
- const aRecommendedCards = aRecManifests.map(manifest => {
1447
+ return Promise.resolve(_this21._getRecommenedFioriIds()).then(function (aAppIds) {
1448
+ return Promise.resolve(_this21._getCardManifest(aAppIds)).then(function (aManifests) {
1449
+ const aRecManifests = aManifests?.slice(0, RECOMMENDED_CARD_LIMIT);
1450
+ const aRecommendedCards = aRecManifests?.map(manifest => {
1544
1451
  let id;
1545
- if (manifest) {
1452
+ if (manifest?.["sap.card"]) {
1546
1453
  manifest["sap.card"].rec = true;
1547
1454
  id = manifest["sap.app"]?.id;
1548
1455
  }
@@ -1551,11 +1458,11 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1551
1458
  descriptorContent: manifest
1552
1459
  };
1553
1460
  });
1554
- return _this17._removeDuplicateCards(aRecommendedCards);
1461
+ return _this21._removeDuplicateCards(aRecommendedCards);
1555
1462
  });
1556
1463
  });
1557
1464
  }, function (error) {
1558
- Log.error("Error while fetching recommended cards: " + error.message);
1465
+ Log.error("Error while fetching recommended cards:", error instanceof Error ? error.message : String(error));
1559
1466
  return [];
1560
1467
  }));
1561
1468
  } catch (e) {
@@ -1578,18 +1485,18 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1578
1485
  getRecommendedVisualizations() {
1579
1486
  let forceRefresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
1580
1487
  try {
1581
- const _this18 = this;
1582
- function _temp18() {
1583
- return _this18._recommendedVisualizations;
1488
+ const _this22 = this;
1489
+ function _temp23() {
1490
+ return _this22._recommendedVisualizations;
1584
1491
  }
1585
- const _temp17 = function () {
1586
- if (!_this18._recommendedVisualizations || forceRefresh) {
1587
- return Promise.resolve(_this18._getRecommenedFioriIds(forceRefresh)).then(function (recommendedFioriIds) {
1588
- const _temp16 = function () {
1492
+ const _temp22 = function () {
1493
+ if (!_this22._recommendedVisualizations || forceRefresh) {
1494
+ return Promise.resolve(_this22._getRecommenedFioriIds(forceRefresh)).then(function (recommendedFioriIds) {
1495
+ const _temp21 = function () {
1589
1496
  if (recommendedFioriIds.length) {
1590
1497
  let finalRecommendations = [];
1591
1498
  let mustIncludeRecommendations = [];
1592
- return Promise.resolve(Promise.all([_this18._getVisualizationsByFioriIds(recommendedFioriIds), _this18._fetchMyHomeVizs(forceRefresh)])).then(function (_ref4) {
1499
+ return Promise.resolve(Promise.all([_this22._getVisualizationsByFioriIds(recommendedFioriIds), _this22._fetchMyHomeVizs(forceRefresh)])).then(function (_ref4) {
1593
1500
  let [recommendedVisualizations, favoriteVisualizations] = _ref4;
1594
1501
  //filter out recommendations that are already added
1595
1502
  recommendedVisualizations = recommendedVisualizations.filter(recViz => _isVisualizationAlreadyAdded(recViz, favoriteVisualizations));
@@ -1601,17 +1508,17 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1601
1508
  }
1602
1509
  });
1603
1510
  //return only 10 recommended apps along with 'MyInbox' and 'Manage My Timesheet' if user has access to these apps.
1604
- _this18._recommendedVisualizations = finalRecommendations.slice(0, 10 - mustIncludeRecommendations.length).concat(mustIncludeRecommendations);
1511
+ _this22._recommendedVisualizations = finalRecommendations.slice(0, 10 - mustIncludeRecommendations.length).concat(mustIncludeRecommendations);
1605
1512
  });
1606
1513
  } else {
1607
- _this18._recommendedVisualizations = [];
1514
+ _this22._recommendedVisualizations = [];
1608
1515
  }
1609
1516
  }();
1610
- if (_temp16 && _temp16.then) return _temp16.then(function () {});
1517
+ if (_temp21 && _temp21.then) return _temp21.then(function () {});
1611
1518
  });
1612
1519
  }
1613
1520
  }();
1614
- return Promise.resolve(_temp17 && _temp17.then ? _temp17.then(_temp18) : _temp18(_temp17));
1521
+ return Promise.resolve(_temp22 && _temp22.then ? _temp22.then(_temp23) : _temp23(_temp22));
1615
1522
  } catch (e) {
1616
1523
  return Promise.reject(e);
1617
1524
  }
@@ -1638,6 +1545,64 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1638
1545
  return Promise.reject(e);
1639
1546
  }
1640
1547
  }
1548
+ /**
1549
+ * Retrieves Fiori app data and stores it in the `fioriAppData` and `componentData` properties.
1550
+ *
1551
+ * This method fetches inbound applications using the `_getInboundApps` method and processes them to extract
1552
+ * Fiori app IDs (`sap-fiori-id`) and their associated semantic data. It also maps UI5 component names to their
1553
+ * corresponding Fiori app IDs for later use.
1554
+ *
1555
+ * @returns {Promise<IAppInfo>} A promise that resolves to an object containing Fiori app data
1556
+ * @private
1557
+ */
1558
+ getFioriAppData() {
1559
+ try {
1560
+ const _this23 = this;
1561
+ return Promise.resolve(_catch(function () {
1562
+ function _temp25() {
1563
+ return _this23.fioriAppData;
1564
+ }
1565
+ const _temp24 = function () {
1566
+ if (!Object.keys(_this23.componentData).length) {
1567
+ _this23.componentData = {};
1568
+ _this23.fioriAppData = {};
1569
+ return Promise.resolve(_this23._getInboundApps()).then(function (inbounds) {
1570
+ inbounds.forEach(oItem => {
1571
+ const fioriId = oItem?.signature?.parameters?.["sap-fiori-id"]?.defaultValue?.value;
1572
+ const componentId = oItem?.resolutionResult?.ui5ComponentName;
1573
+ if (fioriId) {
1574
+ const semanticData = {
1575
+ action: oItem.action,
1576
+ semanticObject: oItem.semanticObject,
1577
+ resolutionResult: oItem.resolutionResult
1578
+ };
1579
+ _this23.fioriAppData[fioriId] = _this23.fioriAppData[fioriId] || [];
1580
+ _this23.fioriAppData[fioriId].push(semanticData);
1581
+
1582
+ // store data along with fioriId in componentData, this can be used later to find the
1583
+ // fioriId for those apps when only ui5ComponentName is known
1584
+ if (componentId) {
1585
+ const combinedData = {
1586
+ ...semanticData,
1587
+ fioriId
1588
+ };
1589
+ _this23.componentData[componentId] = _this23.componentData[componentId] || [];
1590
+ _this23.componentData[componentId].push(combinedData);
1591
+ }
1592
+ }
1593
+ });
1594
+ });
1595
+ }
1596
+ }();
1597
+ return _temp24 && _temp24.then ? _temp24.then(_temp25) : _temp25(_temp24);
1598
+ }, function (oError) {
1599
+ Log.error(oError instanceof Error ? oError.message : String(oError));
1600
+ return {};
1601
+ }));
1602
+ } catch (e) {
1603
+ return Promise.reject(e);
1604
+ }
1605
+ }
1641
1606
  /**
1642
1607
  * Retrieves visualizations based on a list of Fiori IDs.
1643
1608
  *
@@ -1653,10 +1618,10 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1653
1618
  */
1654
1619
  _getVisualizationsByFioriIds(fioriIds) {
1655
1620
  try {
1656
- const _this19 = this;
1621
+ const _this24 = this;
1657
1622
  const visualizations = [];
1658
1623
  const visitedVisualizations = new Map();
1659
- return Promise.resolve(Promise.all([_this19._getInboundApps(), _this19._getCatalogApps()])).then(function (_ref5) {
1624
+ return Promise.resolve(Promise.all([_this24._getInboundApps(), _this24._getCatalogApps()])).then(function (_ref5) {
1660
1625
  let [inbounds, catalogApps] = _ref5;
1661
1626
  fioriIds.forEach(fioriId => {
1662
1627
  // get all inbounds with the fiori id
@@ -1709,17 +1674,17 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1709
1674
  */
1710
1675
  _getAllFavPageApps(pages, shouldReload) {
1711
1676
  try {
1712
- let _exit4 = false;
1713
- const _this20 = this;
1677
+ let _exit5 = false;
1678
+ const _this25 = this;
1714
1679
  return Promise.resolve(_catch(function () {
1715
- function _temp20(_result6) {
1716
- return _exit4 ? _result6 : [];
1680
+ function _temp27(_result7) {
1681
+ return _exit5 ? _result7 : [];
1717
1682
  }
1718
- const _temp19 = function () {
1683
+ const _temp26 = function () {
1719
1684
  if (pages) {
1720
- _this20._favPageVisualizations = _this20._favPageVisualizations || [];
1685
+ _this25._favPageVisualizations = _this25._favPageVisualizations || [];
1721
1686
  //Check to ensure that missing visualization data is loaded, if any
1722
- const loadedPages = _this20._favPageVisualizations.reduce((pageIDs, visualization) => {
1687
+ const loadedPages = _this25._favPageVisualizations.reduce((pageIDs, visualization) => {
1723
1688
  if (visualization.pageId && !pageIDs.includes(visualization.pageId)) {
1724
1689
  pageIDs.push(visualization.pageId);
1725
1690
  }
@@ -1728,20 +1693,20 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Formatting", "sap/base/i18n/Resour
1728
1693
  const pageIds = pages.map(page => page.pageId);
1729
1694
  const shouldLoadMissingApps = loadedPages.length === 0 || !loadedPages.every(pageId => pageIds.includes(pageId));
1730
1695
  if (!shouldReload && !shouldLoadMissingApps) {
1731
- const _this20$_favPageVisua = _this20._favPageVisualizations;
1732
- _exit4 = true;
1733
- return _this20$_favPageVisua;
1696
+ const _this25$_favPageVisua = _this25._favPageVisualizations;
1697
+ _exit5 = true;
1698
+ return _this25$_favPageVisua;
1734
1699
  } else {
1735
- return Promise.resolve(_this20._loadAllPageVisualizations(pages)).then(function (_this20$_loadAllPageV) {
1736
- _this20._favPageVisualizations = _this20$_loadAllPageV;
1737
- const _this20$_favPageVisua2 = _this20._favPageVisualizations;
1738
- _exit4 = true;
1739
- return _this20$_favPageVisua2;
1700
+ return Promise.resolve(_this25._loadAllPageVisualizations(pages)).then(function (_this25$_loadAllPageV) {
1701
+ _this25._favPageVisualizations = _this25$_loadAllPageV;
1702
+ const _this25$_favPageVisua2 = _this25._favPageVisualizations;
1703
+ _exit5 = true;
1704
+ return _this25$_favPageVisua2;
1740
1705
  });
1741
1706
  }
1742
1707
  }
1743
1708
  }();
1744
- return _temp19 && _temp19.then ? _temp19.then(_temp20) : _temp20(_temp19);
1709
+ return _temp26 && _temp26.then ? _temp26.then(_temp27) : _temp27(_temp26);
1745
1710
  }, function (error) {
1746
1711
  Log.error(error);
1747
1712
  return [];