@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
@@ -1 +1 @@
1
- {"version":3,"file":"NewsPanel.js","names":["sap","ui","define","Log","GenericTile","SlideTile","EventBus","DateFormat","XMLModel","Container","__BaseNewsPanel","__MenuItem","__NewsGroup","__NewsItem","___library","___utils_Device","___utils_FESRUtil","__HttpHelper","__PersonalisationUtils","__UshellPersonalizer","_interopRequireDefault","obj","__esModule","default","_settle","pact","state","value","s","_Pact","v","o","bind","then","observer","BaseNewsPanel","prototype","onFulfilled","onRejected","result","this","callback","e","_this","_isSettledPact","thenable","_for","test","update","body","stage","shouldContinue","updateValue","reject","_resumeAfterTest","_resumeAfterBody","_resumeAfterUpdate","MenuItem","_catch","recover","NewsGroup","NewsItem","NewsType","DeviceType","addFESRId","HttpHelper","PersonalisationUtils","UshellPersonalizer","BASE_URL","NEWS_FEED_READ_API","NEWS_FEED_TRANSLATION_API","NEWS_FEED_COUNT_URL","DEFAULT_FEED_COUNT","fnImagePlaceholder","sPath","N","Array","from","length","i","CUSTOM_NEWS_FEED","TITLE","LINK","VALIDITY","PREPARATION_REQUIRED","EXCLUDE_FIELDS","IMAGE_URL","FESR_STEP_NAME","EMPTY_DATA_ERROR_CODE","CUSTOM_IMAGES","Finance","Manufacturing","Sales","NewsPanel","extend","metadata","library","properties","url","type","group","defaultValue","visibility","RSS","customFeedKey","customFileName","showCustom","newsAvailable","supportedFileFormats","aggregations","newsGroup","singularName","multiple","constructor","_constructor","id","settings","BaseNewsPanel.prototype.constructor.call","customNewsFeedCache","Map","init","_init","BaseNewsPanel.prototype.init.call","oNewsTile","getId","displayTime","width","height","tiles","mode","frameType","addStyleClass","getNewsWrapper","addContent","setProperty","_i18nBundle","getText","_eventBus","getInstance","oManageMenuItem","title","icon","press","handleEditNews","addAggregation","getData","_getData","_temp4","fireEvent","_adjustLayout","sUrl","getUrl","_temp3","getProperty","Promise","resolve","initializeXmlModel","_this$initializeXmlMo","oNewsModel","setModel","setVisible","_temp2","bNewsLoad","sCustomNewsFeedKey","getCustomFeedKey","_temp","setCustomNewsFeed","handleFeedError","_getCustomFeedKey","_getUrl","_initializeXmlModel","_this2","oParent","getParent","setDefaultBindingMode","attachRequestCompleted","oEvent","panelLoadedFn","loaded","count","oDocument","getSource","loadNewsFeed","publish","showError","date","Date","attachRequestFailed","_loadNewsFeed","noOfFeeds","_this3","_temp6","querySelector","oBindingInfo","path","bindNewsTile","_temp5","extractAllImageUrls","_handleFeedError","generateErrorMessage","setURL","_setURL","_this4","getDeviceType","Mobile","setHeight","setWidth","_bindNewsTile","oSlideTile","bindAggregation","templateShareable","factory","sId","oContext","newsInfo","getObject","oTile","getElementsByTagName","textContent","subTitle","imageUrl","footer","formatDate","getTile","_extractAllImageUrls","_this5","_temp7","oItemElement","extractImage","oImageUrl","createElement","appendChild","_formatDate","timeStamp","relativeDateFormatter","getDateTimeInstance","style","relative","relativeStyle","format","getFavNewsFeed","_getFavNewsFeed","aFavNewsFeed","_extractImage","sHrefLink","fnLoadPlaceholderImage","sPrefix","require","toUrl","image","fetch","res","text","sHTML","aMatches","match","isArray","catch","_setCustomNewsFeed","sFeedId","_this6","_getUserPersonalization","personalizer","read","persData","favNewsFeed","all","getCustomNewsFeedCount","getCustomNewsFeed","showAllPreparationRequired","_ref","iFeedCount","aFeeds","Error","items","filter","oNewsFeed","includes","loadCustomNewsFeed","err","error","_getCustomNewsFeedCount","_this7","encodeURI","has","set","GetJSON","get","_getCustomNewsFeed","_this8","newsDetailUrl","getNewsFeedDetailsUrl","changeId","getAuthNewsFeed","_this8$customNewsFeed","authorizedNewsFeeds","oFeedDict","forEach","oFeed","push","getCustomFeedImage","_getNewsFeedDetailsUrl","oNews","_getAuthNewsFeed","sNewsUrl","_this9","getAllAvailableApps","getNewsFeedDetails","_ref2","aAvailableApps","aNewsFeed","arrangeNewsFeeds","_arrangeNewsFeeds","aAuthNewsFeed","Category","ImpactedArtifacts","aImpactedArtifacts","split","impactedArtifact","oImpactedArtifact","isAuthFeed","_isAuthFeed","fioriIdSplitter","aTokens","sFioriId","trim","index","findIndex","oApp","signature","parameters","_getAllAvailableApps","getServiceAsync","oService","_oAdapter","_aInbounds","message","_getNewsFeedDetails","_this10","fnFormattedLabel","sLabel","replace","getTranslatedText","_ref3","newsResponse","translationResponse","aNews","JSON","parse","stringify","aTranslation","map","aFields","Object","keys","aExpandFields","oField","oTranslatedField","find","oTranslation","ColumnName","toUpperCase","oTranslatedFieldName","TranslatedName","label","Link","expanded","expandFields","_getTranslatedText","_loadCustomNewsFeed","feeds","oXMLResponse","parseJsonToXml","setData","_parseJsonToXml","json","_transformJsonForXml","aData","data","item","_jsonToXml","xml","key","transformedJson","rootToken","replaceAll","parser","DOMParser","parseFromString","_getCustomFeedImage","sFileName","sFileBasePath","sFilePath","files","randomIndex","randomArray","window","Uint32Array","crypto","getRandomValues","persContainerId","getPersContainerId","ownerComponent","getOwnerComponent"],"sources":["NewsPanel.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\nimport Log from \"sap/base/Log\";\nimport FlexBox from \"sap/m/FlexBox\";\nimport GenericTile from \"sap/m/GenericTile\";\nimport SlideTile from \"sap/m/SlideTile\";\nimport { FrameType } from \"sap/m/library\";\nimport Event from \"sap/ui/base/Event\";\nimport Component from \"sap/ui/core/Component\";\nimport type { MetadataOptions } from \"sap/ui/core/Element\";\nimport EventBus from \"sap/ui/core/EventBus\";\nimport DateFormat from \"sap/ui/core/format/DateFormat\";\nimport Context from \"sap/ui/model/Context\";\nimport XMLModel from \"sap/ui/model/xml/XMLModel\";\nimport Container from \"sap/ushell/Container\";\nimport type { $BaseNewsPanelSettings } from \"./BaseNewsPanel\";\nimport BaseNewsPanel from \"./BaseNewsPanel\";\nimport MenuItem from \"./MenuItem\";\nimport NewsAndPagesContainer from \"./NewsAndPagesContainer\";\nimport NewsGroup from \"./NewsGroup\";\nimport NewsItem from \"./NewsItem\";\nimport { NewsType } from \"./library\";\nimport { DeviceType } from \"./utils/Device\";\nimport { addFESRId } from \"./utils/FESRUtil\";\nimport HttpHelper from \"./utils/HttpHelper\";\nimport PersonalisationUtils from \"./utils/PersonalisationUtils\";\nimport UshellPersonalizer from \"./utils/UshellPersonalizer\";\n\ninterface IBindingInfo {\n\tpath: string;\n\tlength: number;\n}\n\ninterface INewsResponse {\n\tvalue: ICustomNewsFeed[];\n}\n\nexport interface ICustomNewsFeed {\n\t[key: string]: string | boolean | INewsLink | number | INewsLink[] | INewsParam;\n}\n\nexport interface INewsItem {\n\tchangeId: string;\n\ttitle?: string;\n\tshowAllPreparationRequired?: boolean;\n}\n\ninterface ITranslatedText {\n\tColumnName?: string;\n\tTranslatedName?: string;\n}\n\ninterface IAppConfiguration {\n\t_oAdapter: {\n\t\t_aInbounds: IAvailableApp[];\n\t};\n}\n\ninterface IAvailableApp {\n\tsemanticObject?: string;\n\taction?: string;\n\tid?: string;\n\ttitle?: string;\n\tpermanentKey?: string;\n\tcontentProviderId?: string;\n\tresolutionResult?: {\n\t\t[key: string]: string;\n\t};\n\tdeviceTypes?: {\n\t\t[key: string]: boolean;\n\t};\n\tsignature: {\n\t\tparameters: {\n\t\t\t[key: string]: IAppParameter;\n\t\t};\n\t\tadditionalParameters?: string;\n\t};\n}\n\ninterface IAppParameter {\n\tdefaultValue?: {\n\t\tvalue: string;\n\t\tformat: string;\n\t};\n\trequired: boolean;\n}\n\nexport interface INewsLink {\n\t[key: string]: string;\n}\n\nexport interface INewsParam {\n\t[key: string]: { [key: string]: string };\n}\n\nexport type FileFormat = \"xlsx\" | \"csv\";\n\nconst BASE_URL = \"/sap/opu/odata4/ui2/insights_srv/srvd/ui2/\",\n\tNEWS_FEED_READ_API = BASE_URL + \"insights_read_srv/0001/\" + \"NEWS_FEED\",\n\tNEWS_FEED_TRANSLATION_API = BASE_URL + \"insights_read_srv/0001/\" + \"NewsFeedColumnTranslation\",\n\tNEWS_FEED_COUNT_URL = NEWS_FEED_READ_API + \"/$count\",\n\tDEFAULT_FEED_COUNT = 7,\n\tfnImagePlaceholder = function (sPath: string, N: number) {\n\t\treturn Array.from({ length: N }, function (v, i) {\n\t\t\treturn sPath + \"/\" + (i + 1) + \".jpg\";\n\t\t});\n\t};\n\nconst CUSTOM_NEWS_FEED = {\n\t\tTITLE: \"LineOfBusiness\",\n\t\tLINK: \"WhatsNewDocument\",\n\t\tVALIDITY: \"ValidAsOf\",\n\t\tPREPARATION_REQUIRED: \"PreparationRequired\",\n\t\tEXCLUDE_FIELDS: [\n\t\t\t\"ChangeId\",\n\t\t\t\"LineNumber\",\n\t\t\t\"LineOfBusiness\",\n\t\t\t\"SolutionArea\",\n\t\t\t\"Title\",\n\t\t\t\"Description\",\n\t\t\t\"Type\",\n\t\t\t\"ValidAsOf\",\n\t\t\t\"WhatsNewDocument\",\n\t\t\t\"Link\"\n\t\t],\n\t\tIMAGE_URL: \"sap/cux/home/img/CustomNewsFeed/\",\n\t\tFESR_STEP_NAME: \"custNewsSlide-press\",\n\t\tEMPTY_DATA_ERROR_CODE: \"NODATA\"\n\t},\n\tCUSTOM_IMAGES: { [key: string]: string[] } = {\n\t\t\"Application Platform and Infrastructure\": fnImagePlaceholder(\"ApplicationPlatformandInfrastructure\", 3),\n\t\t\"Asset Management\": fnImagePlaceholder(\"AssetManagement\", 3),\n\t\t\"Cross Applications\": fnImagePlaceholder(\"CrossApplications\", 3),\n\t\tFinance: fnImagePlaceholder(\"Finance\", 3),\n\t\tManufacturing: fnImagePlaceholder(\"Manufacturing\", 3),\n\t\t\"R&D / Engineering\": fnImagePlaceholder(\"RnDandEngineering\", 3),\n\t\tSales: fnImagePlaceholder(\"Sales\", 3),\n\t\t\"Sourcing and Procurement\": fnImagePlaceholder(\"SourcingandProcurement\", 3),\n\t\t\"Supply Chain\": fnImagePlaceholder(\"SupplyChain\", 3),\n\t\tdefault: [\"default.jpg\"]\n\t};\n\n/**\n *\n * Panel class for managing and storing News.\n *\n * @extends sap.cux.home.BaseNewsPanel\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n *\n * @internal\n * @experimental Since 1.121\n * @public\n *\n * @alias sap.cux.home.NewsPanel\n */\nexport default class NewsPanel extends BaseNewsPanel {\n\tprivate oNewsTile!: SlideTile;\n\tprivate oNewsModel!: XMLModel;\n\tprivate oManageMenuItem!: MenuItem;\n\tprivate image!: number;\n\tprivate customNewsFeedCache: Map<string, unknown>;\n\tprivate bNewsLoad!: boolean;\n\tprivate aFavNewsFeed!: { items: string[]; showAllPreparationRequired: boolean };\n\tprivate _eventBus!: EventBus;\n\n\tstatic readonly metadata: MetadataOptions = {\n\t\tlibrary: \"sap.cux.home\",\n\t\tproperties: {\n\t\t\t/**\n\t\t\t * The URL of the news item.\n\t\t\t *\n\t\t\t * @public\n\t\t\t */\n\t\t\turl: { type: \"string\", group: \"Misc\", defaultValue: \"\", visibility: \"public\" },\n\t\t\t/**\n\t\t\t * Type of the news item.\n\t\t\t *\n\t\t\t * @public\n\t\t\t */\n\t\t\ttype: {\n\t\t\t\ttype: \"sap.cux.home.NewsType\",\n\t\t\t\tgroup: \"Misc\",\n\t\t\t\tvisibility: \"public\",\n\t\t\t\tdefaultValue: NewsType.RSS\n\t\t\t},\n\t\t\t/**\n\t\t\t * The key of custom news feed.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tcustomFeedKey: { type: \"string\", group: \"Misc\", defaultValue: \"\", visibility: \"public\" },\n\t\t\t/**\n\t\t\t * The filename of custom news feed.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tcustomFileName: { type: \"string\", group: \"Misc\", defaultValue: \"\" },\n\t\t\t/**\n\t\t\t * The flag for custom news feed is checked or not.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tshowCustom: { type: \"boolean\", group: \"Misc\", defaultValue: false },\n\t\t\t/**\n\t\t\t * The flag to determine rss feed will load or not.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tnewsAvailable: { type: \"boolean\", group: \"Misc\", defaultValue: true, visibility: \"hidden\" },\n\t\t\t/**\n\t\t\t * Supported file formats for news.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tsupportedFileFormats: { type: \"FileFormat[]\", group: \"Misc\", defaultValue: [\"xlsx\"], visibility: \"hidden\" }\n\t\t},\n\t\taggregations: {\n\t\t\t/**\n\t\t\t * newsGroup aggregation for News\n\t\t\t */\n\t\t\tnewsGroup: { type: \"sap.cux.home.NewsGroup\", singularName: \"newsGroup\", multiple: true, visibility: \"hidden\" }\n\t\t}\n\t};\n\n\tconstructor(idOrSettings?: string | $BaseNewsPanelSettings);\n\tconstructor(id?: string, settings?: $BaseNewsPanelSettings);\n\t/**\n\t * Constructor for a new News Panel.\n\t *\n\t * @param {string} [id] ID for the new control, generated automatically if an ID is not provided\n\t * @param {object} [settings] Initial settings for the new control\n\t */\n\tpublic constructor(id?: string, settings?: $BaseNewsPanelSettings) {\n\t\tsuper(id, settings);\n\t\tthis.customNewsFeedCache = new Map();\n\t}\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\n\t\tthis.oNewsTile = new SlideTile(this.getId() + \"--idNewsSlide\", {\n\t\t\tdisplayTime: 20000,\n\t\t\twidth: \"100%\",\n\t\t\theight: \"17rem\",\n\t\t\ttiles: [\n\t\t\t\tnew GenericTile(this.getId() + \"--placeholder\", {\n\t\t\t\t\tstate: \"Loading\",\n\t\t\t\t\tmode: \"ArticleMode\",\n\t\t\t\t\tframeType: \"Stretch\" as FrameType\n\t\t\t\t})\n\t\t\t]\n\t\t}).addStyleClass(\"newsTileMaxWidth\");\n\t\taddFESRId(this.oNewsTile, \"newsSlidePress\");\n\t\tthis.getNewsWrapper().addContent(this.oNewsTile);\n\t\tthis.getNewsWrapper().addStyleClass(\"newsWrapper\");\n\t\tthis.setProperty(\"title\", this._i18nBundle.getText(\"newsTitle\"));\n\t\tthis._eventBus = EventBus.getInstance();\n\n\t\tthis.oManageMenuItem = new MenuItem(`${this.getId()}-manageNews`, {\n\t\t\ttitle: this._i18nBundle.getText(\"mngNews\"),\n\t\t\ticon: \"sap-icon://edit\",\n\t\t\tpress: this.handleEditNews.bind(this)\n\t\t});\n\t\tthis.addAggregation(\"menuItems\", this.oManageMenuItem);\n\t\taddFESRId(this.oManageMenuItem, \"manageNews\");\n\t}\n\n\t/**\n\t * Retrieves news data asynchronously.\n\t * If the news model is not initialized, it initializes the XML model and loads news feed data.\n\t * @private\n\t * @returns {Promise} A promise that resolves when the news data is retrieved.\n\t */\n\tpublic async getData() {\n\t\tconst sUrl: string = this.getUrl();\n\t\tif (sUrl && !this.getProperty(\"showCustom\")) {\n\t\t\tthis.oNewsModel = await this.initializeXmlModel(sUrl);\n\t\t\tthis.oNewsTile.setModel(this.oNewsModel);\n\t\t\tthis.oManageMenuItem.setVisible(false);\n\t\t} else if (this.getProperty(\"showCustom\")) {\n\t\t\tthis.bNewsLoad = this.bNewsLoad || false;\n\t\t\tthis.oManageMenuItem.setVisible(true);\n\t\t\tconst sCustomNewsFeedKey = this.getCustomFeedKey();\n\t\t\tif (sCustomNewsFeedKey) {\n\t\t\t\tawait this.setCustomNewsFeed(sCustomNewsFeedKey);\n\t\t\t} else {\n\t\t\t\tthis.handleFeedError();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.handleFeedError();\n\t\t}\n\t\tthis.fireEvent(\"loaded\");\n\t\tthis._adjustLayout();\n\t}\n\n\t/**\n\t * Returns the custom news feed key property of NewsPanel\n\t * @returns {string} custom news feed key\n\t */\n\tpublic getCustomFeedKey(): string {\n\t\treturn this.getProperty(\"customFeedKey\") as string;\n\t}\n\n\t/**\n\t * Returns the Url property of NewsPanel\n\t * @returns {any}\n\t */\n\tpublic getUrl(): string {\n\t\treturn this.getProperty(\"url\") as string;\n\t}\n\n\t/**\n\t * Initializes an XML model for managing news data.\n\t * This method returns a Promise that resolves to the initialized XML model.\n\t */\n\n\t/**\n\t * Initializes an XML model for managing news data.\n\t * This method returns a Promise that resolves to the initialized XML model.\n\t * @param {string} sUrl rss url to load the news feed\n\t * @returns {Promise<XMLModel>} XML Document containing the news feeds\n\t */\n\tprivate async initializeXmlModel(sUrl: string): Promise<XMLModel> {\n\t\tconst oParent = this.getParent() as NewsAndPagesContainer;\n\t\treturn new Promise((resolve) => {\n\t\t\tconst oNewsModel = new XMLModel(sUrl);\n\t\t\toNewsModel.setDefaultBindingMode(\"OneWay\");\n\t\t\toNewsModel.attachRequestCompleted((oEvent: Event) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tif (!this.bNewsLoad) {\n\t\t\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: true, count: DEFAULT_FEED_COUNT });\n\t\t\t\t\t\tthis.bNewsLoad = true;\n\t\t\t\t\t}\n\t\t\t\t\tconst oDocument = oEvent.getSource<XMLModel>().getData() as XMLDocument;\n\t\t\t\t\tawait this.loadNewsFeed(oDocument, 0);\n\t\t\t\t\tthis._eventBus.publish(\"KeyUserChanges\", \"newsFeedLoadFailed\", { showError: false, date: new Date() });\n\t\t\t\t\tresolve(oNewsModel);\n\t\t\t\t})();\n\t\t\t});\n\t\t\toNewsModel.attachRequestFailed(() => {\n\t\t\t\tthis.handleFeedError();\n\t\t\t\tif (!this.bNewsLoad) {\n\t\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: false, count: 0 });\n\t\t\t\t\tthis.bNewsLoad = true;\n\t\t\t\t}\n\t\t\t\tthis._eventBus.publish(\"KeyUserChanges\", \"newsFeedLoadFailed\", { showError: true, date: new Date() });\n\t\t\t\tresolve(oNewsModel);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Loads the news feed based on the provided document and number of feeds.\n\t * Determines the feed type (RSS, feed, custom) and binds the news tile accordingly.\n\t * @param {Document} oDocument - The document containing the news feed data.\n\t * @param {number} [noOfFeeds] - The number of feeds to be displayed. Defaults to a predefined value.\n\t */\n\tprivate async loadNewsFeed(oDocument: Document, noOfFeeds: number) {\n\t\tlet oBindingInfo: IBindingInfo;\n\t\tif (!oDocument?.querySelector(\"customFeed\")) {\n\t\t\tawait this.extractAllImageUrls(oDocument, noOfFeeds || DEFAULT_FEED_COUNT);\n\t\t}\n\n\t\tif (!!oDocument?.querySelector(\"rss\") && !!oDocument?.querySelector(\"item\")) {\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/channel/item/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else if (!!oDocument?.querySelector(\"atom\") && !!oDocument?.querySelector(\"entry\")) {\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/entry/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else if (!!oDocument?.querySelector(\"customFeed\") && !!oDocument?.querySelector(\"item\")) {\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/item/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else {\n\t\t\tthis.handleFeedError();\n\t\t\treturn;\n\t\t}\n\t\tthis.bindNewsTile(this.oNewsTile, oBindingInfo);\n\t}\n\n\t/**\n\t * Handles errors that occur during the loading of the news feed.\n\t * @returns {void}\n\t */\n\tpublic handleFeedError(): void {\n\t\tif (this.getProperty(\"showCustom\")) {\n\t\t\tthis.generateErrorMessage().setVisible(true);\n\t\t\tthis.oNewsTile.setVisible(false);\n\t\t} else {\n\t\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setVisible(false);\n\t\t\tthis.setProperty(\"newsAvailable\", false);\n\t\t\tthis.oManageMenuItem.setVisible(false);\n\t\t}\n\t}\n\n\tpublic async setURL(url: string) {\n\t\tthis.setProperty(\"showCustom\", false);\n\t\tthis.setProperty(\"newsAvailable\", true);\n\t\tthis.generateErrorMessage().setVisible(false);\n\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setVisible(true);\n\t\tthis.oNewsTile.setVisible(true);\n\t\tthis.setProperty(\"url\", url);\n\t\tawait this.getData();\n\t}\n\n\tprivate _adjustLayout() {\n\t\tif (this.getDeviceType() === DeviceType.Mobile) {\n\t\t\tthis.oNewsTile.setHeight(\"11rem\");\n\t\t\tthis.generateErrorMessage().setWidth(\"100%\");\n\t\t} else {\n\t\t\tthis.oNewsTile.setHeight(\"17rem\");\n\t\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setWidth(\"100%\");\n\t\t\tthis.oNewsTile.addStyleClass(\"sapUiSmallMarginTopBottom\");\n\t\t}\n\t}\n\n\t/**\n\t * Binds the news tile with the provided binding information.\n\t * @param {sap.m.SlideTile} oSlideTile - The SlideTile control to be bound.\n\t * @param {IBindingInfo} oBindingInfo - The binding information containing the path and length of the aggregation.\n\t */\n\tprivate bindNewsTile(oSlideTile: SlideTile, oBindingInfo: IBindingInfo): void {\n\t\tif (oBindingInfo) {\n\t\t\toSlideTile.bindAggregation(\"tiles\", {\n\t\t\t\tpath: oBindingInfo.path,\n\t\t\t\tlength: oBindingInfo.length,\n\t\t\t\ttemplateShareable: false,\n\t\t\t\tfactory: (sId: string, oContext: Context) => {\n\t\t\t\t\tconst newsInfo = oContext.getObject() as XMLDocument;\n\t\t\t\t\tlet oTile;\n\t\t\t\t\tif (newsInfo.getElementsByTagName(\"link\").length > 0) {\n\t\t\t\t\t\toTile = new NewsItem(\"\", {\n\t\t\t\t\t\t\turl: newsInfo.getElementsByTagName(\"link\")[0].textContent as string,\n\t\t\t\t\t\t\ttitle: newsInfo.getElementsByTagName(\"title\")[0].textContent as string,\n\t\t\t\t\t\t\tsubTitle: newsInfo.getElementsByTagName(\"description\")[0].textContent as string,\n\t\t\t\t\t\t\timageUrl: newsInfo.getElementsByTagName(\"imageUrl\")[0].textContent as string,\n\t\t\t\t\t\t\tfooter: this.formatDate(newsInfo.getElementsByTagName(\"pubDate\")[0].textContent as string)\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\toTile = new NewsGroup(\"\", {\n\t\t\t\t\t\t\ttitle: newsInfo.getElementsByTagName(\"title\")[0].textContent as string,\n\t\t\t\t\t\t\tsubTitle: this._i18nBundle.getText(\"newsFeedDescription\") as string,\n\t\t\t\t\t\t\timageUrl: newsInfo.getElementsByTagName(\"imageUrl\")[0].textContent as string,\n\t\t\t\t\t\t\tfooter: newsInfo.getElementsByTagName(\"footer\")[0].textContent as string\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.addAggregation(\"newsItems\", oTile, true);\n\t\t\t\t\treturn oTile.getTile();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Extracts images for all the news tiles\n\t * @param {Document} oDocument - The document containing the news feed data.\n\t * @param {number} [noOfFeeds] - The number of feeds to be displayed. Defaults to a predefined value.\n\t */\n\tprivate async extractAllImageUrls(oDocument: Document, noOfFeeds: number) {\n\t\tfor (let i = 0; i < noOfFeeds; i++) {\n\t\t\tconst oItemElement = oDocument?.getElementsByTagName(\"item\")[i];\n\t\t\tconst sUrl: string = await this.extractImage(oItemElement.getElementsByTagName(\"link\")[0].textContent as string);\n\t\t\tconst oImageUrl = oDocument.createElement(\"imageUrl\");\n\t\t\toImageUrl.textContent = sUrl;\n\t\t\toItemElement.appendChild(oImageUrl);\n\t\t}\n\t}\n\n\t/**\n\t * Converts the given date to a relative date-time format.\n\t * @param {string} timeStamp - The timestamp to be converted.\n\t * @returns {string} The date in relative date-time format.\n\t */\n\tprivate formatDate(timeStamp: string): string {\n\t\tconst relativeDateFormatter = DateFormat.getDateTimeInstance({\n\t\t\tstyle: \"medium\",\n\t\t\trelative: true,\n\t\t\trelativeStyle: \"short\"\n\t\t});\n\t\treturn relativeDateFormatter.format(new Date(timeStamp));\n\t}\n\n\t/**\n\t * Returns the favourite news feed for the custom news\n\t * @returns {any}\n\t */\n\tpublic getFavNewsFeed() {\n\t\treturn this.aFavNewsFeed;\n\t}\n\n\t/**\n\t * Extracts the image URL from the provided HREF link or link.\n\t * @param {string} sHrefLink - The HREF link containing the image URL.\n\t * @returns {Promise} A promise that resolves to the extracted image URL.\n\t */\n\tprivate extractImage(sHrefLink: string): Promise<string> {\n\t\tconst fnLoadPlaceholderImage = () => {\n\t\t\tconst sPrefix = sap.ui.require.toUrl(\"sap/cux/home/utils\");\n\t\t\tthis.image = this.image ? this.image + 1 : 1;\n\t\t\tthis.image = this.image < 9 ? this.image : 1;\n\t\t\treturn `${sPrefix}/imgNews/${this.image}.jpg`;\n\t\t};\n\n\t\treturn fetch(sHrefLink)\n\t\t\t.then((res) => res.text())\n\t\t\t.then((sHTML) => {\n\t\t\t\tconst aMatches = sHTML.match(/<meta[^>]*property=[\"']og:image[\"'][^>]*content=[\"']([^\"']+)[\"'][^>]*>/i);\n\t\t\t\treturn Array.isArray(aMatches) && aMatches[1] ? aMatches[1] : fnLoadPlaceholderImage();\n\t\t\t})\n\t\t\t.catch(fnLoadPlaceholderImage);\n\t}\n\n\t/**\n\t * This method retrieves the count and feeds of the custom news feed asynchronously.\n\t * If the count is not zero, it loads the custom news feed data and returns the feeds.\n\t * @param {string} sFeedId - The ID of the custom news feed to set.\n\t * @returns {Promise} A promise that resolves to an array of news feeds.\n\t */\n\tpublic async setCustomNewsFeed(sFeedId: string): Promise<void> {\n\t\ttry {\n\t\t\tthis.oNewsTile.setVisible(true);\n\t\t\tthis.generateErrorMessage().setVisible(false);\n\t\t\tconst personalizer = await this._getUserPersonalization();\n\t\t\tconst persData = await personalizer?.read();\n\t\t\tthis.aFavNewsFeed = persData?.favNewsFeed as { items: string[]; showAllPreparationRequired: boolean };\n\t\t\tlet [iFeedCount, aFeeds] = await Promise.all([\n\t\t\t\tthis.getCustomNewsFeedCount(sFeedId),\n\t\t\t\tthis.getCustomNewsFeed(sFeedId, this.aFavNewsFeed ? this.aFavNewsFeed.showAllPreparationRequired : true)\n\t\t\t]);\n\t\t\tif (aFeeds.length === 0 || iFeedCount === 0) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\t\t\t//filer selected feeds from all news feed\n\t\t\tif (this.aFavNewsFeed?.items?.length) {\n\t\t\t\taFeeds = aFeeds.filter((oNewsFeed) => {\n\t\t\t\t\treturn this.aFavNewsFeed?.items.includes(oNewsFeed.title as string);\n\t\t\t\t});\n\t\t\t} else if (this.aFavNewsFeed?.items?.length === 0) {\n\t\t\t\t(this.getParent() as NewsAndPagesContainer)?.panelLoadedFn(\"News\", { loaded: true, count: 0 });\n\t\t\t\tthrow new Error(\"Error: No news feed available\");\n\t\t\t}\n\t\t\t(this.getNewsWrapper()?.getParent() as FlexBox).addStyleClass(\"sapMNewsFlex\");\n\t\t\tthis.loadCustomNewsFeed(aFeeds);\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t\tthis.handleFeedError();\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the count of custom news feed items identified by the provided feed ID.\n\t * @param {string} sFeedId - The ID of the custom news feed.\n\t * @returns {Promise} A Promise that resolves to the count of custom news feed items.\n\t */\n\tpublic async getCustomNewsFeedCount(sFeedId: string): Promise<number> {\n\t\tlet sUrl = encodeURI(NEWS_FEED_COUNT_URL + \"?$filter=ChangeId\" + \" eq \" + \"'\" + sFeedId + \"'\");\n\t\tif (!this.customNewsFeedCache.has(sUrl)) {\n\t\t\tthis.customNewsFeedCache.set(sUrl, HttpHelper.GetJSON(sUrl));\n\t\t}\n\t\treturn this.customNewsFeedCache.get(sUrl) as Promise<number>;\n\t}\n\n\t/**\n\t * Retrieves custom news feed items identified by the provided feed ID and settings.\n\t * It processes the response data and returns an array of custom news feed items.\n\t * @param {string} sFeedId - The ID of the custom news feed.\n\t * @param {boolean} showAllPreparationRequired - Indicates whether to show all preparation required.\n\t * @returns {Promise} A Promise that resolves to an array of custom news feed items.\n\t */\n\tpublic async getCustomNewsFeed(sFeedId: string, showAllPreparationRequired: boolean): Promise<ICustomNewsFeed[]> {\n\t\ttry {\n\t\t\tconst newsDetailUrl = this.getNewsFeedDetailsUrl({ changeId: sFeedId, showAllPreparationRequired });\n\t\t\tif (!this.customNewsFeedCache.has(newsDetailUrl)) {\n\t\t\t\tthis.customNewsFeedCache.set(newsDetailUrl, this.getAuthNewsFeed(newsDetailUrl));\n\t\t\t}\n\t\t\tconst authorizedNewsFeeds = (await this.customNewsFeedCache.get(newsDetailUrl)) as ICustomNewsFeed[];\n\t\t\tconst oFeedDict: { [key: string]: string } = {};\n\t\t\tconst aFeeds: ICustomNewsFeed[] = [];\n\t\t\tif (authorizedNewsFeeds?.length > 0) {\n\t\t\t\tauthorizedNewsFeeds.forEach((oFeed: ICustomNewsFeed) => {\n\t\t\t\t\tconst title = oFeed[CUSTOM_NEWS_FEED.TITLE] as INewsLink;\n\t\t\t\t\tif (!oFeedDict[title.value]) {\n\t\t\t\t\t\taFeeds.push({\n\t\t\t\t\t\t\ttitle: title.value,\n\t\t\t\t\t\t\tfooter: (oFeed[CUSTOM_NEWS_FEED.VALIDITY] as INewsLink).value,\n\t\t\t\t\t\t\timageUrl: this.getCustomFeedImage(title.value)\n\t\t\t\t\t\t});\n\t\t\t\t\t\toFeedDict[title.value] = title.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn aFeeds;\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t\tthrow new Error(err as string);\n\t\t}\n\t}\n\n\t/**\n\t * Generates the URL for retrieving news feed details based on the provided news object.\n\t * The generated URL limits the number of results to 999.\n\t * @param {INewsItem} oNews - The news object containing properties such as changeId, title, and showAllPreparationRequired.\n\t * @returns {string} The URL for retrieving news feed details.\n\t */\n\tpublic getNewsFeedDetailsUrl(oNews: INewsItem) {\n\t\tlet sUrl = NEWS_FEED_READ_API + \"?$filter=ChangeId eq \" + \"'\" + oNews.changeId + \"'\";\n\t\tsUrl = oNews.title ? sUrl + \" and LineOfBusiness eq \" + \"'\" + encodeURI(oNews.title) + \"'\" : sUrl;\n\t\tsUrl = oNews.showAllPreparationRequired ? sUrl + \" and PreparationRequired eq true\" : sUrl;\n\t\treturn sUrl + \"&$top=999\";\n\t}\n\n\t/**\n\t * Retrieves the news feed from the specified URL after applying authorization filtering based on the available apps.\n\t * If the news feed contains impacted artifacts, it checks if the current user has access to any of the impacted apps.\n\t * If the user has access to at least one impacted app, the news feed is included in the returned array.\n\t * @param {string} sNewsUrl - The URL of the news feed.\n\t * @returns {Array} The filtered array of news feed items authorized for the user.\n\t */\n\tpublic async getAuthNewsFeed(sNewsUrl: string) {\n\t\ttry {\n\t\t\tconst [aAvailableApps, aNewsFeed] = await Promise.all([this.getAllAvailableApps(), this.getNewsFeedDetails(sNewsUrl)]);\n\t\t\tif (aAvailableApps.length === 0) {\n\t\t\t\treturn aNewsFeed;\n\t\t\t}\n\t\t\treturn this.arrangeNewsFeeds(aNewsFeed, aAvailableApps);\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t}\n\t}\n\n\t/**\n\t * If the news feed contains impacted artifacts, it checks if the current user has access to any of the impacted apps.\n\t * If the user has access to at least one impacted app, the news feed is included in the returned array.\n\t * @param {ICustomNewsFeed[]} aNewsFeed - array of news feed\n\t * @param {IAvailableApp[]} aAvailableApps - array of all availabel apps\n\t * @returns {Array} The filtered array of news feed items authorized for the user.\n\t */\n\tprivate arrangeNewsFeeds(aNewsFeed: ICustomNewsFeed[], aAvailableApps: IAvailableApp[]) {\n\t\tconst aAuthNewsFeed: ICustomNewsFeed[] = [];\n\n\t\taNewsFeed.forEach((oNewsFeed: ICustomNewsFeed) => {\n\t\t\tif ((oNewsFeed.Category as INewsLink).value !== \"App\" || !(oNewsFeed.ImpactedArtifacts as INewsLink).value) {\n\t\t\t\taAuthNewsFeed.push(oNewsFeed);\n\t\t\t} else {\n\t\t\t\tconst aImpactedArtifacts: string[] = (oNewsFeed.ImpactedArtifacts as INewsLink).value.split(\"\\n\");\n\t\t\t\tfor (let impactedArtifact of aImpactedArtifacts) {\n\t\t\t\t\tconst oImpactedArtifact = impactedArtifact;\n\t\t\t\t\tif (oImpactedArtifact && this.isAuthFeed(aAvailableApps, impactedArtifact)) {\n\t\t\t\t\t\taAuthNewsFeed.push(oNewsFeed);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn aAuthNewsFeed;\n\t}\n\n\t/**\n\t * takes all available apps list and the impacted atifact from the news and returns if it's valid\n\t * @param {IAvailableApp[]} aAvailableApps - Array of all available apps\n\t * @param {string} oImpactedArtifact - impacted artifact form the news\n\t * @returns {boolean} checks if the news is authenticated with the available apps list\n\t */\n\tprivate isAuthFeed(aAvailableApps: IAvailableApp[], oImpactedArtifact: string) {\n\t\tconst fioriIdSplitter = \"|\";\n\t\tif (oImpactedArtifact.includes(fioriIdSplitter)) {\n\t\t\tconst aTokens = oImpactedArtifact.split(fioriIdSplitter);\n\t\t\tconst sFioriId = (aTokens[aTokens.length - 1] || \"\").trim();\n\t\t\tif (sFioriId) {\n\t\t\t\tconst index = aAvailableApps.findIndex((oApp: IAvailableApp) => {\n\t\t\t\t\treturn sFioriId === oApp?.signature?.parameters[\"sap-fiori-id\"]?.defaultValue?.value;\n\t\t\t\t});\n\t\t\t\treturn index > -1;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Retrieves all available apps from the ClientSideTargetResolution service for authorization filtering.\n\t * @returns {Array} An array of available apps.\n\t */\n\tprivate async getAllAvailableApps(): Promise<IAvailableApp[]> {\n\t\ttry {\n\t\t\tconst oService = await Container.getServiceAsync<IAppConfiguration>(\"ClientSideTargetResolution\");\n\t\t\treturn oService?._oAdapter._aInbounds || [];\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tLog.error(err.message);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the news feed details from the specified URL, including translation and formatting of field labels.\n\t * @param {string} sUrl - The URL of the news feed details.\n\t * @returns {Array} The array of news feed items with translated and formatted field labels.\n\t */\n\tprivate async getNewsFeedDetails(sUrl: string): Promise<ICustomNewsFeed[]> {\n\t\tif (!this.customNewsFeedCache.has(sUrl)) {\n\t\t\tthis.customNewsFeedCache.set(sUrl, HttpHelper.GetJSON(sUrl) as Promise<{ value: ICustomNewsFeed[] }>);\n\t\t}\n\t\tconst fnFormattedLabel = (sLabel: string) => sLabel.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n\t\tconst [newsResponse, translationResponse] = await Promise.all([\n\t\t\tthis.customNewsFeedCache.get(sUrl),\n\t\t\tthis.getTranslatedText(this.getCustomFeedKey())\n\t\t]);\n\t\tconst aNews: ICustomNewsFeed[] = JSON.parse(JSON.stringify((newsResponse as INewsResponse).value || [])) as ICustomNewsFeed[];\n\t\tconst aTranslation = JSON.parse(JSON.stringify((translationResponse as INewsResponse).value || [])) as ITranslatedText[];\n\t\treturn aNews.map((oNews: ICustomNewsFeed) => {\n\t\t\tconst aFields = Object.keys(oNews);\n\t\t\tconst aExpandFields: INewsLink[] = [];\n\t\t\taFields.forEach((oField) => {\n\t\t\t\tconst oTranslatedField = aTranslation.find(\n\t\t\t\t\t(oTranslation: ITranslatedText) => oTranslation?.ColumnName?.toUpperCase() === oField.toUpperCase()\n\t\t\t\t);\n\t\t\t\tconst oTranslatedFieldName = (oTranslatedField?.TranslatedName as string) || fnFormattedLabel(oField);\n\t\t\t\toNews[oField] = { label: oTranslatedFieldName, value: oNews[oField] as string } as INewsLink;\n\t\t\t\tif (!CUSTOM_NEWS_FEED.EXCLUDE_FIELDS.includes(oField)) {\n\t\t\t\t\taExpandFields.push(oNews[oField]);\n\t\t\t\t}\n\t\t\t});\n\t\t\toNews.Link = {\n\t\t\t\tlabel: this._i18nBundle.getText(\"readMoreLink\") as string,\n\t\t\t\tvalue: oNews[CUSTOM_NEWS_FEED.LINK] as string,\n\t\t\t\ttext: \"Link\"\n\t\t\t};\n\t\t\toNews.expanded = aNews.length === 1;\n\t\t\toNews.expandFields = aExpandFields;\n\t\t\treturn oNews;\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves translated text for news feed fields based on the specified feed ID.\n\t * @param {string} sFeedId - The ID of the custom news feed\n\t * @returns {Promise} A promise resolving to the translated text for news feed fields.\n\t */\n\tprivate getTranslatedText(sFeedId: string) {\n\t\ttry {\n\t\t\tconst sUrl = NEWS_FEED_TRANSLATION_API + \"?$filter=Changeid eq '\" + sFeedId + \"'\";\n\t\t\tif (!this.customNewsFeedCache.has(sUrl)) {\n\t\t\t\tthis.customNewsFeedCache.set(sUrl, HttpHelper.GetJSON(sUrl) as Promise<ICustomNewsFeed[]>);\n\t\t\t}\n\t\t\treturn this.customNewsFeedCache.get(sUrl);\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tLog.error(err.message);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Loads custom news feed into the news panel after parsing JSON feed data to XML format.\n\t * @param {Array} feeds - The array of custom news feed items.\n\t */\n\tprivate loadCustomNewsFeed(feeds: ICustomNewsFeed[]) {\n\t\tconst oXMLResponse = this.parseJsonToXml(JSON.parse(JSON.stringify(feeds)) as JSON[]);\n\t\tconst oParent = this.getParent() as NewsAndPagesContainer;\n\t\tif (!this.oNewsModel) {\n\t\t\tthis.oNewsModel = new XMLModel(oXMLResponse);\n\t\t\tif (!this.bNewsLoad) {\n\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: true, count: DEFAULT_FEED_COUNT });\n\t\t\t\tthis.bNewsLoad = true;\n\t\t\t}\n\t\t\tthis.oNewsTile.setModel(this.oNewsModel);\n\t\t} else {\n\t\t\tthis.oNewsModel.setData(oXMLResponse);\n\t\t}\n\t\tvoid this.loadNewsFeed(oXMLResponse, feeds.length);\n\t}\n\n\t/**\n\t * Parses JSON data into XML format.\n\t * @param {JSON[]} json - The JSON data to be parsed into XML.\n\t * @returns {XMLDocument} The XML document representing the parsed JSON data.\n\t */\n\tprivate parseJsonToXml(json: JSON[]): XMLDocument {\n\t\tconst _transformJsonForXml = (aData: JSON[]) => aData.map((data: JSON) => ({ item: data }));\n\t\tconst _jsonToXml = (json: JSON) => {\n\t\t\tlet xml = \"\";\n\t\t\tlet key: string;\n\t\t\tfor (key in json) {\n\t\t\t\tconst value = json[key as keyof typeof json];\n\t\t\t\tif (value) {\n\t\t\t\t\tif (typeof value === \"object\") {\n\t\t\t\t\t\txml += `<${key}>${_jsonToXml(value)}</${key}>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txml += `<${key}>${value as string}</${key}>`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn xml.replace(/<\\/?\\d+>/g, \"\");\n\t\t};\n\t\tconst transformedJson: JSON = JSON.parse(JSON.stringify(_transformJsonForXml(json))) as JSON;\n\t\tlet xml = \"<?xml version='1.0' encoding='UTF-8'?>\";\n\t\tconst rootToken = \"customFeed\";\n\t\txml += `<${rootToken}>`;\n\t\txml += _jsonToXml(transformedJson);\n\t\txml += `</${rootToken}>`;\n\t\txml = xml.replaceAll(\"&\", \"&amp;\");\n\t\tconst parser = new DOMParser();\n\t\treturn parser.parseFromString(xml, \"text/xml\");\n\t}\n\n\t/**\n\t * Randomly selects an image from the available images for the feed item.\n\t * @param {string} sFileName - The file name of the custom news feed item.\n\t * @returns {string} The URL of the image for the feed item.\n\t */\n\tpublic getCustomFeedImage(sFileName: string) {\n\t\tconst sFileBasePath = sap.ui.require.toUrl(CUSTOM_NEWS_FEED.IMAGE_URL);\n\t\tlet sFilePath = sFileBasePath + CUSTOM_IMAGES.default[0];\n\t\tconst files = CUSTOM_IMAGES[sFileName] || [];\n\t\tlet randomIndex = 0;\n\t\tif (files.length > 0) {\n\t\t\tconst randomArray = new window.Uint32Array(1);\n\t\t\twindow.crypto.getRandomValues(randomArray);\n\t\t\trandomIndex = randomArray[0] % 3;\n\t\t\tsFilePath = sFileBasePath + files[randomIndex];\n\t\t}\n\t\treturn sFilePath;\n\t}\n\n\tprivate _getUserPersonalization() {\n\t\tconst persContainerId = PersonalisationUtils.getPersContainerId(this);\n\t\tconst ownerComponent = PersonalisationUtils.getOwnerComponent(this) as Component;\n\t\treturn UshellPersonalizer.getInstance(persContainerId, ownerComponent);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NewsPanel.js","names":["sap","ui","define","Log","GenericTile","SlideTile","EventBus","DateFormat","XMLModel","Container","__BaseNewsPanel","__MenuItem","__NewsGroup","__NewsItem","___library","___utils_Constants","___utils_DataFormatUtils","___utils_Device","___utils_FESRUtil","__HttpHelper","__PersonalisationUtils","__UshellPersonalizer","_interopRequireDefault","obj","__esModule","default","_settle","pact","state","value","s","_Pact","v","o","bind","then","observer","BaseNewsPanel","prototype","onFulfilled","onRejected","result","this","callback","e","_this","_isSettledPact","thenable","_for","test","update","body","stage","shouldContinue","updateValue","reject","_resumeAfterTest","_resumeAfterBody","_resumeAfterUpdate","MenuItem","_catch","recover","NewsGroup","NewsItem","NewsType","DEFAULT_NEWS_URL","recycleId","DeviceType","addFESRId","HttpHelper","PersonalisationUtils","UshellPersonalizer","BASE_URL","NEWS_FEED_READ_API","NEWS_FEED_TRANSLATION_API","DEFAULT_FEED_COUNT","fnImagePlaceholder","sPath","N","Array","from","length","i","CUSTOM_NEWS_FEED","TITLE","LINK","VALIDITY","PREPARATION_REQUIRED","EXCLUDE_FIELDS","IMAGE_URL","FESR_STEP_NAME","EMPTY_DATA_ERROR_CODE","CUSTOM_IMAGES","Finance","Manufacturing","Sales","NewsPanel","extend","metadata","library","properties","url","type","group","defaultValue","visibility","RSS","customFeedKey","customFileName","showCustom","newsAvailable","supportedFileFormats","aggregations","newsGroup","singularName","multiple","constructor","_constructor","id","settings","BaseNewsPanel.prototype.constructor.call","_defaultNewsPromise","customNewsFeedCache","Map","init","_init","BaseNewsPanel.prototype.init.call","oNewsTile","getId","displayTime","width","height","tiles","mode","frameType","addStyleClass","getNewsWrapper","addContent","setProperty","_i18nBundle","getText","_eventBus","getInstance","oManageMenuItem","title","icon","press","handleEditNews","addAggregation","defaultNewsEnabled","isURLParamEnabled","setUrl","_isURLParamEnabled","paramName","urlParams","URLSearchParams","window","location","search","get","toUpperCase","getData","_getData","_temp7","_temp5","fireEvent","adjustLayout","_temp4","sUrl","getProperty","Promise","resolve","initializeXmlModel","_this$initializeXmlMo","oNewsModel","setModel","setVisible","_temp3","bNewsLoad","setCustomNewsFeed","_temp2","sCustomNewsFeedKey","getCustomFeedKey","_temp","handleFeedError","getUrl","mandatoryNewsFeed","_temp6","favNewsFeed","setFavNewsFeed","getCurrentNewsGroup","_getCurrentNewsGroup","aValues","_defaultNews","aGroupId","split","groupId","currentGroup","find","oGroup","group_id","_getCustomFeedKey","_getUrl","_initializeXmlModel","_this2","oParent","getParent","setDefaultBindingMode","attachRequestCompleted","oEvent","panelLoadedFn","loaded","count","oDocument","getSource","loadNewsFeed","publish","showError","date","Date","attachRequestFailed","_loadNewsFeed","noOfFeeds","_this3","_temp9","querySelector","oBindingInfo","path","destroyAggregation","bindNewsTile","_temp8","extractAllImageUrls","_handleFeedError","generateErrorMessage","setURL","_setURL","_this4","_adjustLayout","getDeviceType","Mobile","setHeight","setWidth","removeStyleClass","_bindNewsTile","oSlideTile","getBinding","bindAggregation","templateShareable","factory","sId","oContext","newsInfo","getObject","oTile","getElementsByTagName","textContent","subTitle","imageUrl","footer","formatDate","sGroupId","newsId","subTitleNews","getTile","_extractAllImageUrls","_this5","_temp10","oItemElement","extractImage","oImageUrl","createElement","appendChild","_formatDate","timeStamp","relativeDateFormatter","getDateTimeInstance","style","relative","relativeStyle","format","getFavNewsFeed","_getFavNewsFeed","_extractImage","sHrefLink","fnLoadPlaceholderImage","sPrefix","require","toUrl","image","fetch","res","text","sHTML","aMatches","match","isArray","catch","isCSVFileFormat","_isCSVFileFormat","fileName","pop","toLowerCase","_setFavNewsFeed","defaultFeed","_this6","_getUserPersonalization","personalizer","read","persData","defaultNewsFeed","_setCustomNewsFeed","sFeedId","_this7","_temp12","aFeeds","Error","items","filter","oNewsFeed","includes","loadCustomNewsFeed","showAllPrepRequired","showAllPreparationRequired","push","_temp11","getCustomNewsFeed","_this7$getCustomNewsF","_this7$getCustomNewsF2","err","error","filterMandatoryNews","_filterMandatoryNews","newsGroups","isTopLevelMandatory","mandatory_text","isAnyArticleMandatory","_group_to_article","some","article","getDefaultNewsFeedDetails","_getDefaultNewsFeedDetails","newsResponse","aNews","JSON","parse","stringify","aDefaultNews","oDefaultFeedDict","map","oFeed","description","footer_text","getDefaultFeedImage","getMandatoryDefaultNewsFeed","_getMandatoryDefaultNewsFeed","getDefaultNewsResponse","_getDefaultNewsResponse","fetchDefaultNews","_fetchDefaultNews","_this8","response","ok","status","json","_response$json","_getCustomNewsFeed","_this9","aDefaultgroups","getCustomFeedData","_getCustomFeedData","_this10","newsDetailUrl","getNewsFeedDetailsUrl","changeId","has","set","getAuthNewsFeed","_this10$customNewsFee","authorizedNewsFeeds","oFeedDict","forEach","getCustomFeedImage","_getNewsFeedDetailsUrl","oNews","_getAuthNewsFeed","sNewsUrl","newsTitle","_this11","all","getAllAvailableApps","getNewsFeedDetails","_ref","aAvailableApps","aNewsFeed","arrangeNewsFeeds","_arrangeNewsFeeds","aAuthNewsFeed","Category","ImpactedArtifacts","aImpactedArtifacts","impactedArtifact","oImpactedArtifact","isAuthFeed","_isAuthFeed","fioriIdSplitter","aTokens","sFioriId","trim","index","findIndex","oApp","signature","parameters","_getAllAvailableApps","getServiceAsync","oService","_oAdapter","_aInbounds","message","_getNewsFeedDetails","_exit","_this12","_temp14","_result3","fnFormattedLabel","sLabel","replace","GetJSON","getTranslatedText","_ref2","translationResponse","aTranslation","filterNewsOnTitle","aFields","Object","keys","aExpandFields","oField","oTranslatedField","oTranslation","ColumnName","oTranslatedFieldName","TranslatedName","label","Link","expanded","expandFields","_temp13","newsFeedDetails","_this12$filterNewsOnT","_filterNewsOnTitle","newsDetail","LineOfBusiness","_getTranslatedText","_loadCustomNewsFeed","feeds","feedType","_this13","oXMLResponse","parseJsonToXml","unbindAggregation","setData","_parseJsonToXml","_transformJsonForXml","aData","data","item","_jsonToXml","xml","key","transformedJson","rootToken","replaceAll","parser","DOMParser","parseFromString","_getCustomFeedImage","sFileName","sFileBasePath","sFilePath","files","randomIndex","randomArray","Uint32Array","crypto","getRandomValues","_getDefaultFeedImage","imgId","bg_image_id","groupImg","_group_to_image","image_id","mimeType","mime_type","groupBgImg","bg_image","isValidBase64","base64Data","base64UrlToBase64","_base64UrlToBase","base64Url","base64","_isValidBase","input","base64Regex","paddingIndex","indexOf","lastPaddingIndex","lastIndexOf","persContainerId","getPersContainerId","ownerComponent","getOwnerComponent"],"sources":["NewsPanel.ts"],"sourcesContent":["/*!\n * SAP UI development toolkit for HTML5 (SAPUI5)\n * * (c) Copyright 2009-2025 SAP SE. All rights reserved\n */\nimport Log from \"sap/base/Log\";\nimport FlexBox from \"sap/m/FlexBox\";\nimport GenericTile from \"sap/m/GenericTile\";\nimport SlideTile from \"sap/m/SlideTile\";\nimport { FrameType } from \"sap/m/library\";\nimport Event from \"sap/ui/base/Event\";\nimport Component from \"sap/ui/core/Component\";\nimport type { MetadataOptions } from \"sap/ui/core/Element\";\nimport EventBus from \"sap/ui/core/EventBus\";\nimport DateFormat from \"sap/ui/core/format/DateFormat\";\nimport Context from \"sap/ui/model/Context\";\nimport XMLModel from \"sap/ui/model/xml/XMLModel\";\nimport Container from \"sap/ushell/Container\";\nimport type { $BaseNewsPanelSettings } from \"./BaseNewsPanel\";\nimport BaseNewsPanel from \"./BaseNewsPanel\";\nimport MenuItem from \"./MenuItem\";\nimport NewsAndPagesContainer from \"./NewsAndPagesContainer\";\nimport NewsGroup from \"./NewsGroup\";\nimport NewsItem from \"./NewsItem\";\nimport { NewsType } from \"./library\";\nimport { DEFAULT_NEWS_URL } from \"./utils/Constants\";\nimport { recycleId } from \"./utils/DataFormatUtils\";\nimport { DeviceType } from \"./utils/Device\";\nimport { addFESRId } from \"./utils/FESRUtil\";\nimport HttpHelper from \"./utils/HttpHelper\";\nimport PersonalisationUtils from \"./utils/PersonalisationUtils\";\nimport UshellPersonalizer from \"./utils/UshellPersonalizer\";\n\ninterface IBindingInfo {\n\tpath: string;\n\tlength: number;\n}\n\ninterface INewsResponse {\n\tvalue: ICustomNewsFeed[];\n}\n\nexport interface ICustomNewsFeed {\n\ttitle: string;\n\tsubTitle?: string;\n\tdescription?: string;\n\tfooter_text?: Record<string, string>;\n\tmandatory_text?: string;\n\t_group_to_image?: Record<string, string>;\n\t_group_to_article?: ICustomNewsFeed[];\n\t[key: string]: unknown;\n}\n\nexport interface INewsItem {\n\tchangeId: string;\n\ttitle?: string;\n\tshowAllPreparationRequired?: boolean;\n}\n\ninterface ITranslatedText {\n\tColumnName?: string;\n\tTranslatedName?: string;\n}\n\ninterface IAppConfiguration {\n\t_oAdapter: {\n\t\t_aInbounds: IAvailableApp[];\n\t};\n}\n\ninterface ODataResponse {\n\t\"@odata.context\": string;\n\t\"@odata.metadataEtag\": string;\n\tvalue: ICustomNewsFeed[];\n}\n\ninterface IAvailableApp {\n\tsemanticObject?: string;\n\taction?: string;\n\tid?: string;\n\ttitle?: string;\n\tpermanentKey?: string;\n\tcontentProviderId?: string;\n\tresolutionResult?: {\n\t\t[key: string]: string;\n\t};\n\tdeviceTypes?: {\n\t\t[key: string]: boolean;\n\t};\n\tsignature: {\n\t\tparameters: {\n\t\t\t[key: string]: IAppParameter;\n\t\t};\n\t\tadditionalParameters?: string;\n\t};\n}\n\ninterface IAppParameter {\n\tdefaultValue?: {\n\t\tvalue: string;\n\t\tformat: string;\n\t};\n\trequired: boolean;\n}\ninterface IFavNewsFeed {\n\titems: string[];\n\tshowAllPreparationRequired?: boolean;\n}\nexport interface INewsLink {\n\t[key: string]: string;\n}\n\nexport interface INewsParam {\n\t[key: string]: { [key: string]: string };\n}\n\nexport type FileFormat = \"xlsx\" | \"csv\";\n\nconst BASE_URL = \"/sap/opu/odata4/ui2/insights_srv/srvd/ui2/\",\n\tNEWS_FEED_READ_API = BASE_URL + \"insights_read_srv/0001/\" + \"NEWS_FEED\",\n\tNEWS_FEED_TRANSLATION_API = BASE_URL + \"insights_read_srv/0001/\" + \"NewsFeedColumnTranslation\",\n\tDEFAULT_FEED_COUNT = 7,\n\tfnImagePlaceholder = function (sPath: string, N: number) {\n\t\treturn Array.from({ length: N }, function (v, i) {\n\t\t\treturn sPath + \"/\" + (i + 1) + \".jpg\";\n\t\t});\n\t};\n\nconst CUSTOM_NEWS_FEED = {\n\t\tTITLE: \"LineOfBusiness\",\n\t\tLINK: \"WhatsNewDocument\",\n\t\tVALIDITY: \"ValidAsOf\",\n\t\tPREPARATION_REQUIRED: \"PreparationRequired\",\n\t\tEXCLUDE_FIELDS: [\n\t\t\t\"ChangeId\",\n\t\t\t\"LineNumber\",\n\t\t\t\"LineOfBusiness\",\n\t\t\t\"SolutionArea\",\n\t\t\t\"Title\",\n\t\t\t\"Description\",\n\t\t\t\"Type\",\n\t\t\t\"ValidAsOf\",\n\t\t\t\"WhatsNewDocument\",\n\t\t\t\"Link\"\n\t\t],\n\t\tIMAGE_URL: \"sap/cux/home/img/CustomNewsFeed/\",\n\t\tFESR_STEP_NAME: \"custNewsSlide-press\",\n\t\tEMPTY_DATA_ERROR_CODE: \"NODATA\"\n\t},\n\tCUSTOM_IMAGES: { [key: string]: string[] } = {\n\t\t\"Application Platform and Infrastructure\": fnImagePlaceholder(\"ApplicationPlatformandInfrastructure\", 3),\n\t\t\"Asset Management\": fnImagePlaceholder(\"AssetManagement\", 3),\n\t\t\"Cross Applications\": fnImagePlaceholder(\"CrossApplications\", 3),\n\t\tFinance: fnImagePlaceholder(\"Finance\", 3),\n\t\tManufacturing: fnImagePlaceholder(\"Manufacturing\", 3),\n\t\t\"R&D / Engineering\": fnImagePlaceholder(\"RnDandEngineering\", 3),\n\t\tSales: fnImagePlaceholder(\"Sales\", 3),\n\t\t\"Sourcing and Procurement\": fnImagePlaceholder(\"SourcingandProcurement\", 3),\n\t\t\"Supply Chain\": fnImagePlaceholder(\"SupplyChain\", 3),\n\t\tdefault: [\"default.jpg\"]\n\t};\n\n/**\n *\n * Panel class for managing and storing News.\n *\n * @extends sap.cux.home.BaseNewsPanel\n *\n * @author SAP SE\n * @version 0.0.1\n * @since 1.121\n *\n * @internal\n * @experimental Since 1.121\n * @public\n *\n * @alias sap.cux.home.NewsPanel\n */\nexport default class NewsPanel extends BaseNewsPanel {\n\tprivate oNewsTile!: SlideTile;\n\tprivate oNewsModel!: XMLModel;\n\tprivate oManageMenuItem!: MenuItem;\n\tprivate image!: number;\n\tprivate customNewsFeedCache: Map<string, unknown>;\n\tprivate bNewsLoad!: boolean;\n\tprivate favNewsFeed!: IFavNewsFeed;\n\tprivate _eventBus!: EventBus;\n\tprivate _defaultNews!: ODataResponse;\n\tprivate mandatoryNewsFeed!: string[];\n\tprivate _defaultNewsPromise: Promise<ODataResponse> | null = null;\n\n\tstatic readonly metadata: MetadataOptions = {\n\t\tlibrary: \"sap.cux.home\",\n\t\tproperties: {\n\t\t\t/**\n\t\t\t * The URL of the news item.\n\t\t\t *\n\t\t\t * @public\n\t\t\t */\n\t\t\turl: { type: \"string\", group: \"Misc\", defaultValue: \"\", visibility: \"public\" },\n\t\t\t/**\n\t\t\t * Type of the news item.\n\t\t\t *\n\t\t\t * @public\n\t\t\t */\n\t\t\ttype: {\n\t\t\t\ttype: \"sap.cux.home.NewsType\",\n\t\t\t\tgroup: \"Misc\",\n\t\t\t\tvisibility: \"public\",\n\t\t\t\tdefaultValue: NewsType.RSS\n\t\t\t},\n\t\t\t/**\n\t\t\t * The key of custom news feed.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tcustomFeedKey: { type: \"string\", group: \"Misc\", defaultValue: \"\", visibility: \"public\" },\n\t\t\t/**\n\t\t\t * The filename of custom news feed.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tcustomFileName: { type: \"string\", group: \"Misc\", defaultValue: \"\" },\n\t\t\t/**\n\t\t\t * The flag for custom news feed is checked or not.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tshowCustom: { type: \"boolean\", group: \"Misc\", defaultValue: false },\n\t\t\t/**\n\t\t\t * The flag to determine rss feed will load or not.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tnewsAvailable: { type: \"boolean\", group: \"Misc\", defaultValue: true, visibility: \"hidden\" },\n\t\t\t/**\n\t\t\t * Supported file formats for news.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\tsupportedFileFormats: { type: \"FileFormat[]\", group: \"Misc\", defaultValue: [\"xlsx\"], visibility: \"hidden\" }\n\t\t},\n\t\taggregations: {\n\t\t\t/**\n\t\t\t * newsGroup aggregation for News\n\t\t\t */\n\t\t\tnewsGroup: { type: \"sap.cux.home.NewsGroup\", singularName: \"newsGroup\", multiple: true, visibility: \"hidden\" }\n\t\t}\n\t};\n\n\tconstructor(idOrSettings?: string | $BaseNewsPanelSettings);\n\tconstructor(id?: string, settings?: $BaseNewsPanelSettings);\n\t/**\n\t * Constructor for a new News Panel.\n\t *\n\t * @param {string} [id] ID for the new control, generated automatically if an ID is not provided\n\t * @param {object} [settings] Initial settings for the new control\n\t */\n\tpublic constructor(id?: string, settings?: $BaseNewsPanelSettings) {\n\t\tsuper(id, settings);\n\t\tthis.customNewsFeedCache = new Map();\n\t}\n\n\t/**\n\t * Init lifecycle method\n\t *\n\t * @private\n\t * @override\n\t */\n\tpublic init(): void {\n\t\tsuper.init();\n\n\t\tthis.oNewsTile = new SlideTile(this.getId() + \"--idNewsSlide\", {\n\t\t\tdisplayTime: 20000,\n\t\t\twidth: \"100%\",\n\t\t\theight: \"17rem\",\n\t\t\ttiles: [\n\t\t\t\tnew GenericTile(this.getId() + \"--placeholder\", {\n\t\t\t\t\tstate: \"Loading\",\n\t\t\t\t\tmode: \"ArticleMode\",\n\t\t\t\t\tframeType: \"Stretch\" as FrameType\n\t\t\t\t})\n\t\t\t]\n\t\t}).addStyleClass(\"newsTileMaxWidth sapUiSmallMarginTop\");\n\t\taddFESRId(this.oNewsTile, \"newsSlidePress\");\n\t\tthis.getNewsWrapper().addContent(this.oNewsTile);\n\t\tthis.getNewsWrapper().addStyleClass(\"newsWrapper\");\n\t\tthis.setProperty(\"title\", this._i18nBundle.getText(\"newsTitle\"));\n\t\tthis._eventBus = EventBus.getInstance();\n\n\t\tthis.oManageMenuItem = new MenuItem(`${this.getId()}-manageNews`, {\n\t\t\ttitle: this._i18nBundle.getText(\"mngNews\"),\n\t\t\ticon: \"sap-icon://edit\",\n\t\t\tpress: this.handleEditNews.bind(this)\n\t\t});\n\t\tthis.addAggregation(\"menuItems\", this.oManageMenuItem);\n\t\taddFESRId(this.oManageMenuItem, \"manageNews\");\n\t\tlet defaultNewsEnabled = this.isURLParamEnabled(\"default-News\");\n\t\t// if Default News url param is enabled, show default news only\n\t\tif (defaultNewsEnabled) {\n\t\t\tthis.setUrl(DEFAULT_NEWS_URL);\n\t\t\tthis.setProperty(\"showCustom\", false);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param paramName name of parameter\n\t * This method checks if the URL parameter is enabled.\n\t * @returns {boolean} True if the parameter is enabled, false otherwise.\n\t * @private\n\t */\n\tpublic isURLParamEnabled(paramName: string): boolean {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\treturn urlParams.get(paramName)?.toUpperCase() === \"TRUE\";\n\t}\n\n\t/**\n\t * Retrieves news data asynchronously.\n\t * If the news model is not initialized, it initializes the XML model and loads news feed data.\n\t * @private\n\t * @returns {Promise} A promise that resolves when the news data is retrieved.\n\t */\n\tpublic async getData() {\n\t\tlet sUrl: string = this.getUrl();\n\t\tlet defaultNewsEnabled = this.isURLParamEnabled(\"default-News\");\n\t\tthis.mandatoryNewsFeed = [];\n\t\tif (!this.favNewsFeed) {\n\t\t\tawait this.setFavNewsFeed(defaultNewsEnabled);\n\t\t}\n\n\t\tif (sUrl && sUrl !== DEFAULT_NEWS_URL && !this.getProperty(\"showCustom\")) {\n\t\t\t//rss feed scenario\n\t\t\tthis.oNewsModel = await this.initializeXmlModel(sUrl);\n\t\t\tthis.oNewsTile.setModel(this.oNewsModel);\n\t\t\tthis.oManageMenuItem.setVisible(false);\n\t\t} else if (sUrl == DEFAULT_NEWS_URL && !this.getProperty(\"showCustom\")) {\n\t\t\t// default news scenario\n\t\t\tthis.bNewsLoad = this.bNewsLoad || false;\n\t\t\tthis.oManageMenuItem.setVisible(true);\n\t\t\tvoid this.setCustomNewsFeed(\"\");\n\t\t} else if (this.getProperty(\"showCustom\")) {\n\t\t\t//custom news scenario\n\t\t\tthis.bNewsLoad = this.bNewsLoad || false;\n\t\t\tthis.oManageMenuItem.setVisible(true);\n\t\t\tconst sCustomNewsFeedKey = this.getCustomFeedKey();\n\t\t\tif (sCustomNewsFeedKey) {\n\t\t\t\tawait this.setCustomNewsFeed(sCustomNewsFeedKey);\n\t\t\t} else {\n\t\t\t\tthis.handleFeedError();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.handleFeedError();\n\t\t}\n\t\tthis.fireEvent(\"loaded\");\n\t\tthis.adjustLayout();\n\t}\n\n\t/**\n\t * Retrieves the current news group data based on the provided id.\n\t *\n\t * @param id - The group ID\n\t * @returns The news group object that matches the extracted group ID, or `undefined`\n\t * if no matching group is found.\n\t * @private\n\t */\n\tpublic getCurrentNewsGroup(id: string) {\n\t\tlet aValues = this._defaultNews.value;\n\t\tlet aGroupId = id.split(\"-\");\n\t\t// find the groupid from the sId\n\t\tlet groupId = aGroupId?.[aGroupId.length - 1];\n\t\tlet currentGroup = aValues.find((oGroup) => oGroup.group_id === groupId);\n\t\treturn currentGroup;\n\t}\n\n\t/**\n\t * Returns the custom news feed key property of NewsPanel\n\t * @returns {string} custom news feed key\n\t */\n\tpublic getCustomFeedKey(): string {\n\t\treturn this.getProperty(\"customFeedKey\") as string;\n\t}\n\n\t/**\n\t * Returns the Url property of NewsPanel\n\t * @returns {any}\n\t */\n\tpublic getUrl(): string {\n\t\treturn this.getProperty(\"url\") as string;\n\t}\n\n\t/**\n\t * Initializes an XML model for managing news data.\n\t * This method returns a Promise that resolves to the initialized XML model.\n\t */\n\n\t/**\n\t * Initializes an XML model for managing news data.\n\t * This method returns a Promise that resolves to the initialized XML model.\n\t * @param {string} sUrl rss url to load the news feed\n\t * @returns {Promise<XMLModel>} XML Document containing the news feeds\n\t */\n\tprivate async initializeXmlModel(sUrl: string): Promise<XMLModel> {\n\t\tconst oParent = this.getParent() as NewsAndPagesContainer;\n\t\treturn new Promise((resolve) => {\n\t\t\tconst oNewsModel = new XMLModel(sUrl);\n\t\t\toNewsModel.setDefaultBindingMode(\"OneWay\");\n\t\t\toNewsModel.attachRequestCompleted((oEvent: Event) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tif (!this.bNewsLoad) {\n\t\t\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: true, count: DEFAULT_FEED_COUNT });\n\t\t\t\t\t\tthis.bNewsLoad = true;\n\t\t\t\t\t}\n\t\t\t\t\tconst oDocument = oEvent.getSource<XMLModel>().getData() as XMLDocument;\n\t\t\t\t\tawait this.loadNewsFeed(oDocument, 0);\n\t\t\t\t\tthis._eventBus.publish(\"KeyUserChanges\", \"newsFeedLoadFailed\", { showError: false, date: new Date() });\n\t\t\t\t\tresolve(oNewsModel);\n\t\t\t\t})();\n\t\t\t});\n\t\t\toNewsModel.attachRequestFailed(() => {\n\t\t\t\tthis.handleFeedError();\n\t\t\t\tif (!this.bNewsLoad) {\n\t\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: false, count: 0 });\n\t\t\t\t\tthis.bNewsLoad = true;\n\t\t\t\t}\n\t\t\t\tthis._eventBus.publish(\"KeyUserChanges\", \"newsFeedLoadFailed\", { showError: true, date: new Date() });\n\t\t\t\tresolve(oNewsModel);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Loads the news feed based on the provided document and number of feeds.\n\t * Determines the feed type (RSS, feed, custom) and binds the news tile accordingly.\n\t * @param {Document} oDocument - The document containing the news feed data.\n\t * @param {number} [noOfFeeds] - The number of feeds to be displayed. Defaults to a predefined value.\n\t */\n\tprivate async loadNewsFeed(oDocument: Document, noOfFeeds: number) {\n\t\tlet oBindingInfo: IBindingInfo;\n\t\tif (!oDocument?.querySelector(\"customFeed\") && !oDocument?.querySelector(\"defaultFeed\")) {\n\t\t\tawait this.extractAllImageUrls(oDocument, noOfFeeds || DEFAULT_FEED_COUNT);\n\t\t}\n\n\t\tif (!!oDocument?.querySelector(\"rss\") && !!oDocument?.querySelector(\"item\")) {\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/channel/item/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else if (!!oDocument?.querySelector(\"atom\") && !!oDocument?.querySelector(\"entry\")) {\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/entry/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else if (\n\t\t\t(!!oDocument?.querySelector(\"customFeed\") || !!oDocument?.querySelector(\"defaultFeed\")) &&\n\t\t\t!!oDocument?.querySelector(\"item\")\n\t\t) {\n\t\t\tthis.destroyAggregation(\"newsItems\");\n\t\t\toBindingInfo = {\n\t\t\t\tpath: \"/item/\",\n\t\t\t\tlength: noOfFeeds || DEFAULT_FEED_COUNT\n\t\t\t};\n\t\t} else {\n\t\t\tthis.handleFeedError();\n\t\t\treturn;\n\t\t}\n\t\tthis.bindNewsTile(this.oNewsTile, oBindingInfo);\n\t}\n\n\t/**\n\t * Handles errors that occur during the loading of the news feed.\n\t * @returns {void}\n\t */\n\tpublic handleFeedError(): void {\n\t\tif (this.getProperty(\"showCustom\") || this.getUrl() === DEFAULT_NEWS_URL) {\n\t\t\tthis.generateErrorMessage().setVisible(true);\n\t\t\tthis.oNewsTile.setVisible(false);\n\t\t} else {\n\t\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setVisible(false);\n\t\t\tthis.setProperty(\"newsAvailable\", false);\n\t\t\tthis.oManageMenuItem.setVisible(false);\n\t\t}\n\t}\n\n\tpublic async setURL(url: string) {\n\t\tthis.setProperty(\"showCustom\", false);\n\t\tthis.setProperty(\"newsAvailable\", true);\n\t\tthis.generateErrorMessage().setVisible(false);\n\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setVisible(true);\n\t\tthis.oNewsTile.setVisible(true);\n\t\tthis.setProperty(\"url\", url);\n\t\tawait this.getData();\n\t}\n\n\t/**\n\t * Adjust layout based on the device type\n\t *\n\t * @private\n\t */\n\tpublic adjustLayout() {\n\t\tif (this.getDeviceType() === DeviceType.Mobile) {\n\t\t\tthis.oNewsTile.setHeight(\"11rem\");\n\t\t\tthis.generateErrorMessage().setWidth(\"100%\");\n\t\t\tthis.oNewsTile.removeStyleClass(\"sapUiSmallMarginTop\");\n\t\t} else {\n\t\t\tthis.oNewsTile.setHeight(\"17rem\");\n\t\t\t(this.getNewsWrapper()?.getParent() as FlexBox).setWidth(\"100%\");\n\t\t}\n\t}\n\n\t/**\n\t * Binds the news tile with the provided binding information.\n\t * @param {sap.m.SlideTile} oSlideTile - The SlideTile control to be bound.\n\t * @param {IBindingInfo} oBindingInfo - The binding information containing the path and length of the aggregation.\n\t */\n\tprivate bindNewsTile(oSlideTile: SlideTile, oBindingInfo: IBindingInfo): void {\n\t\tif (oBindingInfo) {\n\t\t\tif (!oSlideTile.getBinding(\"tiles\")) {\n\t\t\t\toSlideTile.bindAggregation(\"tiles\", {\n\t\t\t\t\tpath: oBindingInfo.path,\n\t\t\t\t\tlength: oBindingInfo.length,\n\t\t\t\t\ttemplateShareable: false,\n\t\t\t\t\tfactory: (sId: string, oContext: Context) => {\n\t\t\t\t\t\tconst newsInfo = oContext.getObject() as XMLDocument;\n\t\t\t\t\t\tlet oTile;\n\t\t\t\t\t\tif (newsInfo.getElementsByTagName(\"link\").length > 0) {\n\t\t\t\t\t\t\toTile = new NewsItem(recycleId(`${sId}-news-item`), {\n\t\t\t\t\t\t\t\turl: newsInfo.getElementsByTagName(\"link\")[0].textContent as string,\n\t\t\t\t\t\t\t\ttitle: newsInfo.getElementsByTagName(\"title\")[0].textContent as string,\n\t\t\t\t\t\t\t\tsubTitle: newsInfo.getElementsByTagName(\"description\")[0].textContent as string,\n\t\t\t\t\t\t\t\timageUrl: newsInfo.getElementsByTagName(\"imageUrl\")[0].textContent as string,\n\t\t\t\t\t\t\t\tfooter: this.formatDate(newsInfo.getElementsByTagName(\"pubDate\")[0].textContent as string)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet sGroupId = (newsInfo.getElementsByTagName(\"id\")?.[0]?.textContent as string) ?? \"\";\n\t\t\t\t\t\t\tlet newsId = sGroupId ? sId + \"-newsgroup-\" + sGroupId : sId + \"-newsgroup\";\n\t\t\t\t\t\t\tlet subTitleNews = newsInfo.getElementsByTagName(\"subTitle\")?.[0]?.textContent ?? \"\";\n\t\t\t\t\t\t\toTile = new NewsGroup(recycleId(newsId), {\n\t\t\t\t\t\t\t\ttitle: newsInfo.getElementsByTagName(\"title\")[0].textContent as string,\n\t\t\t\t\t\t\t\tsubTitle: subTitleNews || (this._i18nBundle.getText(\"newsFeedDescription\") as string),\n\t\t\t\t\t\t\t\timageUrl: newsInfo.getElementsByTagName(\"imageUrl\")?.[0]?.textContent as string,\n\t\t\t\t\t\t\t\tfooter: newsInfo.getElementsByTagName(\"footer\")?.[0]?.textContent as string\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.addAggregation(\"newsItems\", oTile, true);\n\t\t\t\t\t\treturn oTile.getTile();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Extracts images for all the news tiles\n\t * @param {Document} oDocument - The document containing the news feed data.\n\t * @param {number} [noOfFeeds] - The number of feeds to be displayed. Defaults to a predefined value.\n\t */\n\tprivate async extractAllImageUrls(oDocument: Document, noOfFeeds: number) {\n\t\tfor (let i = 0; i < noOfFeeds; i++) {\n\t\t\tconst oItemElement = oDocument?.getElementsByTagName(\"item\")[i];\n\t\t\tconst sUrl: string = await this.extractImage(oItemElement.getElementsByTagName(\"link\")[0].textContent as string);\n\t\t\tconst oImageUrl = oDocument.createElement(\"imageUrl\");\n\t\t\toImageUrl.textContent = sUrl;\n\t\t\toItemElement.appendChild(oImageUrl);\n\t\t}\n\t}\n\n\t/**\n\t * Converts the given date to a relative date-time format.\n\t * @param {string} timeStamp - The timestamp to be converted.\n\t * @returns {string} The date in relative date-time format.\n\t */\n\tprivate formatDate(timeStamp: string): string {\n\t\tconst relativeDateFormatter = DateFormat.getDateTimeInstance({\n\t\t\tstyle: \"medium\",\n\t\t\trelative: true,\n\t\t\trelativeStyle: \"short\"\n\t\t});\n\t\treturn relativeDateFormatter.format(new Date(timeStamp));\n\t}\n\n\t/**\n\t * Returns the favourite news feed for the custom news\n\t * @returns {IFavNewsFeed}\n\t * @private\n\t */\n\tpublic getFavNewsFeed() {\n\t\treturn this.favNewsFeed;\n\t}\n\n\t/**\n\t * Extracts the image URL from the provided HREF link or link.\n\t * @param {string} sHrefLink - The HREF link containing the image URL.\n\t * @returns {Promise} A promise that resolves to the extracted image URL.\n\t */\n\tprivate extractImage(sHrefLink: string): Promise<string> {\n\t\tconst fnLoadPlaceholderImage = () => {\n\t\t\tconst sPrefix = sap.ui.require.toUrl(\"sap/cux/home/utils\");\n\t\t\tthis.image = this.image ? this.image + 1 : 1;\n\t\t\tthis.image = this.image < 9 ? this.image : 1;\n\t\t\treturn `${sPrefix}/imgNews/${this.image}.jpg`;\n\t\t};\n\n\t\treturn fetch(sHrefLink)\n\t\t\t.then((res) => res.text())\n\t\t\t.then((sHTML) => {\n\t\t\t\tconst aMatches = sHTML.match(/<meta[^>]*property=[\"']og:image[\"'][^>]*content=[\"']([^\"']+)[\"'][^>]*>/i);\n\t\t\t\treturn Array.isArray(aMatches) && aMatches[1] ? aMatches[1] : fnLoadPlaceholderImage();\n\t\t\t})\n\t\t\t.catch(fnLoadPlaceholderImage);\n\t}\n\n\t/**\n\t * Checks if the custom file format is CSV based on the custom file name.\n\t *\n\t * @param {string} fileName - The custom file name.\n\t * @returns {boolean} True if the file format is CSV, otherwise false.\n\t */\n\tprivate isCSVFileFormat(fileName: string): boolean {\n\t\treturn fileName.split(\".\").pop()?.toLowerCase() === (\"csv\" as string);\n\t}\n\t/**\n\t * Sets the favorite news feed for the user by retrieving personalization data.\n\t *\n\t * This method asynchronously fetches the user's personalization data and updates\n\t * the `favNewsFeed` property with the favorite news feed information.\n\t *\n\t * @returns {Promise<void>} A promise that resolves when the favorite news feed is set.\n\t * @private\n\t */\n\tprivate async setFavNewsFeed(defaultFeed?: boolean): Promise<void> {\n\t\tconst personalizer = await this._getUserPersonalization();\n\t\tconst persData = await personalizer?.read();\n\t\tthis.favNewsFeed = (defaultFeed ? persData?.defaultNewsFeed : persData?.favNewsFeed) as IFavNewsFeed;\n\t}\n\n\t/**\n\t * This method retrieves the count and feeds of the custom news feed asynchronously.\n\t * If the count is not zero, it loads the custom news feed data and returns the feeds.\n\t * @param {string} sFeedId - The ID of the custom news feed to set.\n\t * @returns {Promise} A promise that resolves to an array of news feeds.\n\t * @private\n\t */\n\tpublic async setCustomNewsFeed(sFeedId: string): Promise<void> {\n\t\ttry {\n\t\t\tthis.oNewsTile.setVisible(true);\n\t\t\tthis.generateErrorMessage().setVisible(false);\n\t\t\tawait this.setFavNewsFeed(!sFeedId);\n\t\t\tconst customFileName = this.getProperty(\"customFileName\") as string;\n\t\t\tconst showAllPrepRequired = this.isCSVFileFormat(customFileName)\n\t\t\t\t? false\n\t\t\t\t: (this.favNewsFeed?.showAllPreparationRequired ?? true);\n\n\t\t\tif (this.isCSVFileFormat(customFileName)) {\n\t\t\t\tCUSTOM_NEWS_FEED.EXCLUDE_FIELDS.push(\"PreparationRequired\");\n\t\t\t}\n\t\t\tlet aFeeds;\n\t\t\tif (sFeedId) {\n\t\t\t\taFeeds = await this.getCustomNewsFeed(sFeedId, showAllPrepRequired);\n\t\t\t} else {\n\t\t\t\taFeeds = await this.getCustomNewsFeed(\"\", true);\n\t\t\t}\n\n\t\t\tif (aFeeds.length === 0) {\n\t\t\t\tthrow new Error(\"Error: No news feed available\");\n\t\t\t}\n\t\t\t//filer selected feeds from all news feed\n\t\t\tif (this.favNewsFeed?.items?.length) {\n\t\t\t\taFeeds = aFeeds.filter((oNewsFeed) => {\n\t\t\t\t\t//return this.favNewsFeed?.items.includes(oNewsFeed.title) || this.mandatoryNewsFeed.includes(oNewsFeed.title);\n\t\t\t\t\treturn this.favNewsFeed?.items.includes(oNewsFeed.title);\n\t\t\t\t});\n\t\t\t} else if (this.favNewsFeed?.items?.length === 0) {\n\t\t\t\t(this.getParent() as NewsAndPagesContainer)?.panelLoadedFn(\"News\", { loaded: true, count: 0 });\n\t\t\t\tthrow new Error(\"Error: No fav news feed available\");\n\t\t\t}\n\t\t\tawait this.loadCustomNewsFeed(aFeeds, sFeedId ? \"customFeed\" : \"defaultFeed\");\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t\tthis.handleFeedError();\n\t\t}\n\t}\n\n\t/**\n\t * Filters the provided list of news groups to include only those that are marked as mandatory.\n\t *\n\t * A news group is considered mandatory if:\n\t * - Its `mandatory_text` property (at the top level) is set to \"TRUE\" (case-insensitive).\n\t * - Any of its associated articles (in the `_group_to_article` array) has a `mandatory_text` property set to \"TRUE\" (case-insensitive).\n\t *\n\t * If any article within a group is marked as mandatory, the group's `mandatory_text` property\n\t * is updated to \"TRUE\".\n\t *\n\t * @param newsGroups - An array of news groups to filter. Each group is expected to implement the `ICustomNewsFeed` interface.\n\t * @returns An array of news groups that are marked as mandatory.\n\t * @private\n\t */\n\tprivate filterMandatoryNews(newsGroups: ICustomNewsFeed[]) {\n\t\treturn newsGroups.filter((group) => {\n\t\t\t// Check top-level mandatory_text\n\t\t\tconst isTopLevelMandatory = group.mandatory_text?.toUpperCase() === \"TRUE\";\n\n\t\t\t// Check if any inner _group_to_article has mandatory_text true\n\t\t\tconst isAnyArticleMandatory = group._group_to_article?.some(function (article) {\n\t\t\t\t//make mandatory_test true at group level if any article is mandatory\n\t\t\t\tif (article.mandatory_text?.toUpperCase() === \"TRUE\") {\n\t\t\t\t\tgroup.mandatory_text = \"TRUE\";\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn isTopLevelMandatory || isAnyArticleMandatory;\n\t\t});\n\t}\n\n\t/**\n\t * Retrieves the default news feed details from the given OData response.\n\t *\n\t * @param newsResponse - The OData response containing the news feed data.\n\t * @param showAllPreparationRequired - A boolean flag indicating whether to filter news items that require preparation.\n\t * @returns An array of default news feed items.\n\t * @private\n\t */\n\tprivate getDefaultNewsFeedDetails(newsResponse: ODataResponse) {\n\t\tlet aNews: ICustomNewsFeed[] = JSON.parse(JSON.stringify(newsResponse.value || [])) as ICustomNewsFeed[];\n\t\tconst aDefaultNews: ICustomNewsFeed[] = [];\n\t\tconst oDefaultFeedDict = {} as Record<string, string>;\n\t\tthis.mandatoryNewsFeed = [];\n\t\tif (aNews?.length > 0) {\n\t\t\tthis.mandatoryNewsFeed = this.filterMandatoryNews(aNews).map((oFeed) => oFeed.title);\n\n\t\t\tfor (const oFeed of aNews) {\n\t\t\t\tconst title = oFeed.title;\n\t\t\t\tlet subTitle = \"\";\n\t\t\t\tif (!oDefaultFeedDict[title]) {\n\t\t\t\t\tsubTitle = oFeed.subTitle || oFeed.description || \"\";\n\t\t\t\t\taDefaultNews.push({\n\t\t\t\t\t\ttitle: title,\n\t\t\t\t\t\tfooter: oFeed.footer_text,\n\t\t\t\t\t\timageUrl: this.getDefaultFeedImage(oFeed),\n\t\t\t\t\t\tid: oFeed.group_id,\n\t\t\t\t\t\tsubTitle: subTitle || \"\"\n\t\t\t\t\t});\n\t\t\t\t\toDefaultFeedDict[title] = title;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aDefaultNews;\n\t}\n\n\t/**\n\t * Returns the mandatory news feed details\n\t * If the mandatory news feed is not set, it returns an empty array.\n\t *\n\t * @returns {ICustomNewsFeed[]} The mandatory news feed details.\n\t * @private\n\t */\n\tpublic getMandatoryDefaultNewsFeed() {\n\t\treturn this.mandatoryNewsFeed || [];\n\t}\n\n\t/**\n\t * Retrieves the default news response, either from cache or by fetching it.\n\t * @returns {Promise<ODataResponse>} A promise that resolves to the default news data\n\t * @private\n\t */\n\tprivate getDefaultNewsResponse(): Promise<ODataResponse> {\n\t\t// Return cached data if available\n\t\tif (this._defaultNews) {\n\t\t\treturn Promise.resolve(this._defaultNews);\n\t\t}\n\n\t\tif (!this._defaultNewsPromise) {\n\t\t\tthis._defaultNewsPromise = this.fetchDefaultNews();\n\t\t}\n\n\t\treturn this._defaultNewsPromise;\n\t}\n\n\t/**\n\t * Fetches the default news data from the server.\n\t * @returns {Promise<ODataResponse>} A promise that resolves to the fetched news data\n\t * @throws {Error} If the network request fails or returns a non-OK status\n\t * @private\n\t */\n\tprivate async fetchDefaultNews(): Promise<ODataResponse> {\n\t\ttry {\n\t\t\tconst response = await fetch(DEFAULT_NEWS_URL);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`HTTP error! status: ${response.status}`);\n\t\t\t}\n\n\t\t\tthis._defaultNews = (await response.json()) as ODataResponse;\n\t\t\treturn this._defaultNews;\n\t\t} catch (error) {\n\t\t\tthis._defaultNewsPromise = null;\n\t\t\tLog.error(error as string);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves a custom news feed based on the provided feed ID.\n\t * If no feed ID is provided, it returns the default news feed.\n\t *\n\t * @param {string} sFeedId - The ID of the custom news feed to retrieve. If not provided, the default news feed is returned.\n\t * @param {boolean} showAllPreparationRequired - A flag indicating whether to show all preparation required.\n\t * @returns {Promise<ICustomNewsFeed[]>} A promise that resolves to an array of custom news feed items.\n\t * @private\n\t */\n\tpublic async getCustomNewsFeed(sFeedId: string, showAllPreparationRequired: boolean): Promise<ICustomNewsFeed[]> {\n\t\tif (!sFeedId) {\n\t\t\tawait this.getDefaultNewsResponse();\n\t\t\tlet aDefaultgroups = this.getDefaultNewsFeedDetails(this._defaultNews);\n\t\t\treturn aDefaultgroups;\n\t\t} else {\n\t\t\treturn this.getCustomFeedData(sFeedId, showAllPreparationRequired);\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves custom news feed items identified by the provided feed ID and settings.\n\t * It processes the response data and returns an array of custom news feed items.\n\t * @param {string} sFeedId - The ID of the custom news feed.\n\t * @param {boolean} showAllPreparationRequired - Indicates whether to show all preparation required.\n\t * @returns {Promise} A Promise that resolves to an array of custom news feed items.\n\t * @private\n\t */\n\tprivate async getCustomFeedData(sFeedId: string, showAllPreparationRequired: boolean): Promise<ICustomNewsFeed[]> {\n\t\ttry {\n\t\t\tconst newsDetailUrl = this.getNewsFeedDetailsUrl({ changeId: sFeedId, showAllPreparationRequired });\n\t\t\tif (!this.customNewsFeedCache.has(newsDetailUrl)) {\n\t\t\t\tthis.customNewsFeedCache.set(newsDetailUrl, this.getAuthNewsFeed(newsDetailUrl));\n\t\t\t}\n\t\t\tconst authorizedNewsFeeds = (await this.customNewsFeedCache.get(newsDetailUrl)) as ICustomNewsFeed[];\n\t\t\tconst oFeedDict: { [key: string]: string } = {};\n\t\t\tconst aFeeds: ICustomNewsFeed[] = [];\n\t\t\tif (authorizedNewsFeeds?.length > 0) {\n\t\t\t\tauthorizedNewsFeeds.forEach((oFeed: ICustomNewsFeed) => {\n\t\t\t\t\tconst title = oFeed[CUSTOM_NEWS_FEED.TITLE] as INewsLink;\n\t\t\t\t\tif (!oFeedDict[title.value]) {\n\t\t\t\t\t\taFeeds.push({\n\t\t\t\t\t\t\ttitle: title.value,\n\t\t\t\t\t\t\tfooter: (oFeed[CUSTOM_NEWS_FEED.VALIDITY] as INewsLink).value,\n\t\t\t\t\t\t\timageUrl: this.getCustomFeedImage(title.value)\n\t\t\t\t\t\t});\n\t\t\t\t\t\toFeedDict[title.value] = title.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn aFeeds; // group details\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t\tthrow new Error(err as string);\n\t\t}\n\t}\n\n\t/**\n\t * Generates the URL for retrieving news feed details based on the provided news object.\n\t * The generated URL limits the number of results to 999.\n\t * @param {INewsItem} oNews - The news object containing properties such as changeId, title, and showAllPreparationRequired.\n\t * @returns {string} The URL for retrieving news feed details.\n\t */\n\tpublic getNewsFeedDetailsUrl(oNews: INewsItem) {\n\t\tlet sUrl = NEWS_FEED_READ_API + \"?$filter=ChangeId eq \" + \"'\" + oNews.changeId + \"'\";\n\t\tconst customFileName = this.getProperty(\"customFileName\") as string;\n\t\tif (!this.isCSVFileFormat(customFileName) && oNews.showAllPreparationRequired) {\n\t\t\tsUrl = sUrl + \" and PreparationRequired eq true\";\n\t\t}\n\t\treturn sUrl + \"&$top=999\";\n\t}\n\n\t/**\n\t * Retrieves the news feed from the specified URL after applying authorization filtering based on the available apps.\n\t * If the news feed contains impacted artifacts, it checks if the current user has access to any of the impacted apps.\n\t * If the user has access to at least one impacted app, the news feed is included in the returned array.\n\t * @param {string} sNewsUrl - The URL of the news feed.\n\t * @returns {Array} The filtered array of news feed items authorized for the user.\n\t */\n\tpublic async getAuthNewsFeed(sNewsUrl: string, newsTitle?: string) {\n\t\ttry {\n\t\t\tconst [aAvailableApps, aNewsFeed] = await Promise.all([\n\t\t\t\tthis.getAllAvailableApps(),\n\t\t\t\tthis.getNewsFeedDetails(sNewsUrl, newsTitle)\n\t\t\t]);\n\t\t\tif (aAvailableApps.length === 0) {\n\t\t\t\treturn aNewsFeed;\n\t\t\t}\n\t\t\treturn this.arrangeNewsFeeds(aNewsFeed, aAvailableApps);\n\t\t} catch (err) {\n\t\t\tLog.error(err as string);\n\t\t}\n\t}\n\n\t/**\n\t * If the news feed contains impacted artifacts, it checks if the current user has access to any of the impacted apps.\n\t * If the user has access to at least one impacted app, the news feed is included in the returned array.\n\t * @param {ICustomNewsFeed[]} aNewsFeed - array of news feed\n\t * @param {IAvailableApp[]} aAvailableApps - array of all availabel apps\n\t * @returns {Array} The filtered array of news feed items authorized for the user.\n\t */\n\tprivate arrangeNewsFeeds(aNewsFeed: ICustomNewsFeed[], aAvailableApps: IAvailableApp[]) {\n\t\tconst aAuthNewsFeed: ICustomNewsFeed[] = [];\n\n\t\taNewsFeed.forEach((oNewsFeed: ICustomNewsFeed) => {\n\t\t\tif ((oNewsFeed.Category as INewsLink).value !== \"App\" || !(oNewsFeed.ImpactedArtifacts as INewsLink).value) {\n\t\t\t\taAuthNewsFeed.push(oNewsFeed);\n\t\t\t} else {\n\t\t\t\tconst aImpactedArtifacts: string[] = (oNewsFeed.ImpactedArtifacts as INewsLink).value.split(\"\\n\");\n\t\t\t\tfor (let impactedArtifact of aImpactedArtifacts) {\n\t\t\t\t\tconst oImpactedArtifact = impactedArtifact;\n\t\t\t\t\tif (oImpactedArtifact && this.isAuthFeed(aAvailableApps, impactedArtifact)) {\n\t\t\t\t\t\taAuthNewsFeed.push(oNewsFeed);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn aAuthNewsFeed;\n\t}\n\n\t/**\n\t * takes all available apps list and the impacted atifact from the news and returns if it's valid\n\t * @param {IAvailableApp[]} aAvailableApps - Array of all available apps\n\t * @param {string} oImpactedArtifact - impacted artifact form the news\n\t * @returns {boolean} checks if the news is authenticated with the available apps list\n\t */\n\tprivate isAuthFeed(aAvailableApps: IAvailableApp[], oImpactedArtifact: string) {\n\t\tconst fioriIdSplitter = \"|\";\n\t\tif (oImpactedArtifact.includes(fioriIdSplitter)) {\n\t\t\tconst aTokens = oImpactedArtifact.split(fioriIdSplitter);\n\t\t\tconst sFioriId = (aTokens[aTokens.length - 1] || \"\").trim();\n\t\t\tif (sFioriId) {\n\t\t\t\tconst index = aAvailableApps.findIndex((oApp: IAvailableApp) => {\n\t\t\t\t\treturn sFioriId === oApp?.signature?.parameters[\"sap-fiori-id\"]?.defaultValue?.value;\n\t\t\t\t});\n\t\t\t\treturn index > -1;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Retrieves all available apps from the ClientSideTargetResolution service for authorization filtering.\n\t * @returns {Array} An array of available apps.\n\t */\n\tprivate async getAllAvailableApps(): Promise<IAvailableApp[]> {\n\t\ttry {\n\t\t\tconst oService = await Container.getServiceAsync<IAppConfiguration>(\"ClientSideTargetResolution\");\n\t\t\treturn oService?._oAdapter._aInbounds || [];\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tLog.error(err.message);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the news feed details from the specified URL, including translation and formatting of field labels.\n\t * @param {string} sUrl - The URL of the news feed details.\n\t * @returns {Array} The array of news feed items with translated and formatted field labels.\n\t */\n\tprivate async getNewsFeedDetails(sUrl: string, newsTitle?: string): Promise<ICustomNewsFeed[]> {\n\t\tif (this.customNewsFeedCache.has(sUrl)) {\n\t\t\tconst newsFeedDetails = await this.customNewsFeedCache.get(sUrl);\n\t\t\treturn this.filterNewsOnTitle(newsFeedDetails as ICustomNewsFeed[], newsTitle);\n\t\t}\n\n\t\tconst fnFormattedLabel = (sLabel: string) => sLabel.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n\t\tconst [newsResponse, translationResponse] = await Promise.all([\n\t\t\tHttpHelper.GetJSON(sUrl) as Promise<{ value: ICustomNewsFeed[] }>,\n\t\t\tthis.getTranslatedText(this.getCustomFeedKey())\n\t\t]);\n\t\tlet aNews: ICustomNewsFeed[] = JSON.parse(JSON.stringify((newsResponse as INewsResponse).value || [])) as ICustomNewsFeed[];\n\t\tconst aTranslation = JSON.parse(JSON.stringify((translationResponse as INewsResponse).value || [])) as ITranslatedText[];\n\t\taNews = this.filterNewsOnTitle(aNews, newsTitle);\n\t\treturn aNews.map((oNews: ICustomNewsFeed) => {\n\t\t\tconst aFields = Object.keys(oNews);\n\t\t\tconst aExpandFields: INewsLink[] = [];\n\t\t\taFields.forEach((oField) => {\n\t\t\t\tconst oTranslatedField = aTranslation.find(\n\t\t\t\t\t(oTranslation: ITranslatedText) => oTranslation?.ColumnName?.toUpperCase() === oField.toUpperCase()\n\t\t\t\t);\n\t\t\t\tconst oTranslatedFieldName = (oTranslatedField?.TranslatedName as string) || fnFormattedLabel(oField);\n\t\t\t\toNews[oField] = { label: oTranslatedFieldName, value: oNews[oField] as string } as INewsLink;\n\t\t\t\tif (!CUSTOM_NEWS_FEED.EXCLUDE_FIELDS.includes(oField)) {\n\t\t\t\t\taExpandFields.push(oNews[oField] as INewsLink);\n\t\t\t\t}\n\t\t\t});\n\t\t\toNews.Link = {\n\t\t\t\tlabel: this._i18nBundle.getText(\"readMoreLink\") as string,\n\t\t\t\tvalue: oNews[CUSTOM_NEWS_FEED.LINK] as string,\n\t\t\t\ttext: \"Link\"\n\t\t\t};\n\t\t\toNews.expanded = aNews.length === 1;\n\t\t\toNews.expandFields = aExpandFields;\n\t\t\treturn oNews;\n\t\t});\n\t}\n\n\t/**\n\t * Filters the news feed data based on the LOB title for the news detail dialog\n\t *\n\t * @private\n\t * @param {ICustomNewsFeed[]} aNews complete news feed data\n\t * @param {?string} [newsTitle] title of the line of business to be filtered on\n\t * @returns {ICustomNewsFeed[]} filtered news feed for provided LOB title\n\t */\n\tprivate filterNewsOnTitle(aNews: ICustomNewsFeed[], newsTitle?: string): ICustomNewsFeed[] {\n\t\tif (newsTitle) {\n\t\t\treturn aNews.filter((newsDetail: ICustomNewsFeed) => {\n\t\t\t\treturn (newsDetail.LineOfBusiness as INewsLink).value === newsTitle;\n\t\t\t});\n\t\t}\n\t\treturn aNews;\n\t}\n\n\t/**\n\t * Retrieves translated text for news feed fields based on the specified feed ID.\n\t * @param {string} sFeedId - The ID of the custom news feed\n\t * @returns {Promise} A promise resolving to the translated text for news feed fields.\n\t */\n\tprivate getTranslatedText(sFeedId: string) {\n\t\ttry {\n\t\t\tconst sUrl = NEWS_FEED_TRANSLATION_API + \"?$filter=Changeid eq '\" + sFeedId + \"'\";\n\t\t\tif (!this.customNewsFeedCache.has(sUrl)) {\n\t\t\t\tthis.customNewsFeedCache.set(sUrl, HttpHelper.GetJSON(sUrl) as Promise<ICustomNewsFeed[]>);\n\t\t\t}\n\t\t\treturn this.customNewsFeedCache.get(sUrl);\n\t\t} catch (err) {\n\t\t\tif (err instanceof Error) {\n\t\t\t\tLog.error(err.message);\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Loads custom news feed into the news panel after parsing JSON feed data to XML format.\n\t * @param {Array} feeds - The array of custom news feed items.\n\t */\n\tprivate async loadCustomNewsFeed(feeds: ICustomNewsFeed[], feedType: string) {\n\t\tconst oXMLResponse = this.parseJsonToXml(JSON.parse(JSON.stringify(feeds)) as JSON[], feedType);\n\t\tconst oParent = this.getParent() as NewsAndPagesContainer;\n\t\tif (!this.oNewsModel) {\n\t\t\tthis.oNewsModel = new XMLModel(oXMLResponse);\n\t\t\tif (!this.bNewsLoad) {\n\t\t\t\toParent?.panelLoadedFn(\"News\", { loaded: true, count: DEFAULT_FEED_COUNT });\n\t\t\t\tthis.bNewsLoad = true;\n\t\t\t}\n\t\t\tthis.oNewsTile.setModel(this.oNewsModel);\n\t\t} else {\n\t\t\tthis.oNewsTile.unbindAggregation(\"tiles\", false); // Unbind the bound aggregation\n\t\t\tthis.oNewsTile.destroyAggregation(\"tiles\"); // Removes old tiles\n\t\t\tthis.oNewsModel.setData(oXMLResponse);\n\t\t}\n\t\tawait this.loadNewsFeed(oXMLResponse, feeds.length);\n\t}\n\n\t/**\n\t * Parses JSON data into XML format.\n\t * @param {JSON[]} json - The JSON data to be parsed into XML.\n\t * @returns {XMLDocument} The XML document representing the parsed JSON data.\n\t */\n\tprivate parseJsonToXml(json: JSON[], feedType: string): XMLDocument {\n\t\tconst _transformJsonForXml = (aData: JSON[]) => aData.map((data: JSON) => ({ item: data }));\n\t\tconst _jsonToXml = (json: JSON) => {\n\t\t\tlet xml = \"\";\n\t\t\tlet key: string;\n\t\t\tfor (key in json) {\n\t\t\t\tconst value = json[key as keyof typeof json];\n\t\t\t\tif (value) {\n\t\t\t\t\tif (typeof value === \"object\") {\n\t\t\t\t\t\txml += `<${key}>${_jsonToXml(value)}</${key}>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txml += `<${key}>${value as string}</${key}>`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn xml.replace(/<\\/?\\d+>/g, \"\");\n\t\t};\n\t\tconst transformedJson: JSON = JSON.parse(JSON.stringify(_transformJsonForXml(json))) as JSON;\n\t\tlet xml = \"<?xml version='1.0' encoding='UTF-8'?>\";\n\t\tconst rootToken = feedType;\n\t\txml += `<${rootToken}>`;\n\t\txml += _jsonToXml(transformedJson);\n\t\txml += `</${rootToken}>`;\n\t\txml = xml.replaceAll(\"&\", \"&amp;\");\n\t\tconst parser = new DOMParser();\n\t\treturn parser.parseFromString(xml, \"text/xml\");\n\t}\n\n\t/**\n\t * Randomly selects an image from the available images for the feed item.\n\t * @param {string} sFileName - The file name of the custom news feed item.\n\t * @returns {string} The URL of the image for the feed item.\n\t * @private\n\t */\n\tprivate getCustomFeedImage(sFileName: string) {\n\t\tconst sFileBasePath = sap.ui.require.toUrl(CUSTOM_NEWS_FEED.IMAGE_URL);\n\t\tlet sFilePath = sFileBasePath + CUSTOM_IMAGES.default[0];\n\t\tconst files = CUSTOM_IMAGES[sFileName] || [];\n\t\tlet randomIndex = 0;\n\t\tif (files.length > 0) {\n\t\t\tconst randomArray = new window.Uint32Array(1);\n\t\t\twindow.crypto.getRandomValues(randomArray);\n\t\t\trandomIndex = randomArray[0] % 3;\n\t\t\tsFilePath = sFileBasePath + files[randomIndex];\n\t\t}\n\t\treturn sFilePath;\n\t}\n\n\t/**\n\t * Retrieves the default feed image for a given news feed.\n\t *\n\t * @param {ICustomNewsFeed} oFeed - The custom news feed object.\n\t * @returns {string} The base64 encoded image string with the appropriate MIME type, or an empty string if no valid image is found.\n\t * @private\n\t */\n\tprivate getDefaultFeedImage(oFeed: ICustomNewsFeed): string {\n\t\tconst imgId = oFeed?.bg_image_id;\n\t\tconst groupImg = oFeed?._group_to_image;\n\n\t\tif (!groupImg || groupImg.image_id !== imgId) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tlet mimeType = groupImg.mime_type;\n\t\tconst groupBgImg = groupImg.bg_image;\n\n\t\tif (!groupBgImg) {\n\t\t\treturn \"\";\n\t\t}\n\t\tif (mimeType === \"application/octet-stream\") {\n\t\t\tmimeType = \"image/jpeg\";\n\t\t}\n\t\tif (!this.isValidBase64(groupBgImg)) {\n\t\t\tconst base64Data = this.base64UrlToBase64(groupBgImg);\n\t\t\treturn `data:${mimeType};base64,${base64Data}`;\n\t\t}\n\t\treturn `data:${mimeType};base64,${groupBgImg}`;\n\t}\n\n\t/**\n\t * Converts a base64 URL string to a standard base64 string.\n\t *\n\t * @param {string} base64Url - The base64 URL string to convert.\n\t * @returns {string} The converted base64 string.\n\t * @private\n\t */\n\tprivate base64UrlToBase64(base64Url: string) {\n\t\tlet base64 = base64Url?.replace(/_/g, \"/\").replace(/-/g, \"+\");\n\n\t\t// Add padding if missing (Base64 should be a multiple of 4)\n\t\twhile (base64.length % 4 !== 0) {\n\t\t\tbase64 += \"=\";\n\t\t}\n\t\treturn base64;\n\t}\n\n\t/**\n\t * Checks if a string is a valid base64 encoded string.\n\t * @param input The string to validate\n\t * @returns boolean indicating if the string is valid base64\n\t * @private\n\t */\n\tprivate isValidBase64(input: string): boolean {\n\t\t// Check if the string exists and isn't empty\n\t\tif (!input || input.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Canonical base64 strings use these characters\n\t\t// A-Z, a-z, 0-9, +, /, and = for padding\n\t\tconst base64Regex = /^[A-Za-z0-9+/]*={0,2}$/;\n\n\t\t// Check if the string matches the base64 character set\n\t\tif (!base64Regex.test(input)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if the length is valid\n\t\t// Base64 strings have a length that is a multiple of 4\n\t\tif (input.length % 4 !== 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check padding rules\n\t\tif (input.includes(\"=\")) {\n\t\t\t// If there is padding, it must be at the end\n\t\t\tconst paddingIndex = input.indexOf(\"=\");\n\t\t\tconst lastPaddingIndex = input.lastIndexOf(\"=\");\n\t\t\t// Padding should only occur at the end\n\t\t\tif (paddingIndex !== input.length - (input.length - paddingIndex)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Can only have 1 or 2 padding characters\n\t\t\tif (input.length - paddingIndex > 2) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Make sure all padding is at the end\n\t\t\tif (paddingIndex !== lastPaddingIndex && lastPaddingIndex !== paddingIndex + 1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate _getUserPersonalization() {\n\t\tconst persContainerId = PersonalisationUtils.getPersContainerId(this);\n\t\tconst ownerComponent = PersonalisationUtils.getOwnerComponent(this) as Component;\n\t\treturn UshellPersonalizer.getInstance(persContainerId, ownerComponent);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}