@sapui5/sap.fe.core 1.102.2 → 1.104.1

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 (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,78 +1,63 @@
1
- import { EntityType, Property, TypeDefinition } from "@sap-ux/annotation-converter";
2
- import {
1
+ import type { EntityType, EnumValue, PathAnnotationExpression, Property, PropertyPath, TypeDefinition } from "@sap-ux/vocabularies-types";
2
+ import type { FilterFunctions } from "@sap-ux/vocabularies-types/vocabularies/Capabilities";
3
+ import type { SemanticKey } from "@sap-ux/vocabularies-types/vocabularies/Common";
4
+ import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Common";
5
+ import type {
3
6
  CriticalityType,
4
7
  DataField,
5
8
  DataFieldAbstractTypes,
6
9
  DataFieldForAction,
7
- DataFieldForAnnotation,
8
10
  DataFieldForIntentBasedNavigation,
9
11
  DataFieldTypes,
10
12
  DataPoint,
11
13
  DataPointTypeTypes,
12
- EnumValue,
13
14
  FieldGroupType,
14
15
  LineItem,
15
- PathAnnotationExpression,
16
- PresentationVariantTypeTypes,
17
- PropertyPath,
16
+ PresentationVariantType,
18
17
  SelectionVariantType,
19
- SelectOptionType,
20
- UIAnnotationTypes
21
- } from "@sap-ux/vocabularies-types";
22
- import { FilterFunctions } from "@sap-ux/vocabularies-types/dist/generated/Capabilities";
23
- import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Common";
24
- import { SemanticKey } from "@sap-ux/vocabularies-types/types/generated/Common";
18
+ SelectOptionType
19
+ } from "@sap-ux/vocabularies-types/vocabularies/UI";
20
+ import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
21
+ import type { ComplexPropertyInfo } from "sap/fe/core/converters/annotations/DataField";
25
22
  import {
26
23
  collectRelatedProperties,
27
24
  collectRelatedPropertiesRecursively,
28
- ComplexPropertyInfo,
29
25
  getDataFieldDataType,
30
26
  getSemanticObjectPath,
31
27
  isDataFieldAlwaysHidden,
32
28
  isDataFieldForActionAbstract,
33
29
  isDataFieldTypes
34
30
  } from "sap/fe/core/converters/annotations/DataField";
35
- import {
36
- AnnotationAction,
37
- BaseAction,
38
- CustomAction,
39
- getActionsFromManifest,
40
- isActionNavigable,
41
- removeDuplicateActions
42
- } from "sap/fe/core/converters/controls/Common/Action";
31
+ import type { AnnotationAction, BaseAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
32
+ import { getActionsFromManifest, isActionNavigable, removeDuplicateActions } from "sap/fe/core/converters/controls/Common/Action";
43
33
  import { bindingContextPathVisitor, Entity, UI } from "sap/fe/core/converters/helpers/BindingHelper";
44
- import { ConfigurableObject, CustomElement, insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
34
+ import type { ConfigurableObject, CustomElement } from "sap/fe/core/converters/helpers/ConfigurableObject";
35
+ import { insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
45
36
  import { IssueCategory, IssueCategoryType, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
46
37
  import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
47
38
  import tableFormatters from "sap/fe/core/formatters/TableFormatter";
48
39
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
40
+ import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
49
41
  import {
50
42
  and,
51
- annotationExpression,
52
- BindingExpression,
53
- bindingExpression,
54
- BindingExpressionExpression,
55
- compileBinding,
43
+ compileExpression,
56
44
  constant,
57
45
  equal,
58
- Expression,
59
- ExpressionOrPrimitive,
60
46
  formatResult,
47
+ getExpressionFromAnnotation,
61
48
  ifElse,
62
49
  isConstant,
50
+ isPathInModelExpression,
63
51
  not,
64
52
  or,
53
+ pathInModel,
65
54
  resolveBindingString
66
- } from "sap/fe/core/helpers/BindingExpression";
55
+ } from "sap/fe/core/helpers/BindingToolkit";
67
56
  import { replaceSpecialChars } from "sap/fe/core/helpers/StableIdHelper";
68
- import {
69
- DataModelObjectPath,
70
- getTargetObjectPath,
71
- isPathDeletable,
72
- isPathSearchable,
73
- isPathUpdatable
74
- } from "sap/fe/core/templating/DataModelPathHelper";
75
- import { DisplayMode, EDM_TYPE_MAPPING, getDisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
57
+ import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
58
+ import { getTargetObjectPath, isPathDeletable, isPathSearchable, isPathUpdatable } from "sap/fe/core/templating/DataModelPathHelper";
59
+ import type { DisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
60
+ import { EDM_TYPE_MAPPING, getDisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
76
61
  import { getNonSortablePropertiesRestrictions } from "sap/fe/core/templating/EntitySetHelper";
77
62
  import {
78
63
  getAssociatedCurrencyProperty,
@@ -82,30 +67,33 @@ import {
82
67
  isPathExpression,
83
68
  isProperty
84
69
  } from "sap/fe/core/templating/PropertyHelper";
85
- import ConverterContext from "../../ConverterContext";
70
+ import type ConverterContext from "../../ConverterContext";
86
71
  import { AggregationHelper } from "../../helpers/Aggregation";
87
- import { TableID } from "../../helpers/ID";
88
- import {
89
- ActionType,
90
- AvailabilityType,
91
- CreationMode,
72
+ import { getTableID } from "../../helpers/ID";
73
+ import type {
92
74
  FormatOptionsType,
93
- HorizontalAlign,
94
- Importance,
95
75
  ManifestTableColumn,
96
76
  NavigationSettingsConfiguration,
97
77
  NavigationTargetConfiguration,
98
- SelectionMode,
99
78
  TableColumnSettings,
100
79
  TableManifestConfiguration,
101
80
  TableManifestSettingsConfiguration,
81
+ ViewPathConfiguration
82
+ } from "../../ManifestSettings";
83
+ import {
84
+ ActionType,
85
+ AvailabilityType,
86
+ CreationMode,
87
+ HorizontalAlign,
88
+ Importance,
89
+ SelectionMode,
102
90
  TemplateType,
103
91
  VariantManagementType,
104
- ViewPathConfiguration,
105
92
  VisualizationType
106
93
  } from "../../ManifestSettings";
107
- import ManifestWrapper from "../../ManifestWrapper";
94
+ import type ManifestWrapper from "../../ManifestWrapper";
108
95
  import { getMessageTypeFromCriticalityType } from "./Criticality";
96
+ import type { StandardActionConfigType } from "./table/StandardActions";
109
97
  import {
110
98
  generateStandardActionsContext,
111
99
  getCreateVisibility,
@@ -119,8 +107,7 @@ import {
119
107
  getStandardActionMassEdit,
120
108
  getStandardActionPaste,
121
109
  isDraftOrStickySupported,
122
- isInDisplayMode,
123
- StandardActionConfigType
110
+ isInDisplayMode
124
111
  } from "./table/StandardActions";
125
112
 
126
113
  export type TableAnnotationConfiguration = {
@@ -134,9 +121,9 @@ export type TableAnnotationConfiguration = {
134
121
  row?: {
135
122
  action?: string;
136
123
  press?: string;
137
- rowHighlighting: BindingExpression<MessageType>;
138
- rowNavigated: BindingExpression<boolean>;
139
- visible?: BindingExpression<boolean>;
124
+ rowHighlighting: CompiledBindingToolkitExpression;
125
+ rowNavigated: CompiledBindingToolkitExpression;
126
+ visible?: CompiledBindingToolkitExpression;
140
127
  };
141
128
  selectionMode: string | undefined;
142
129
  standardActions: {
@@ -217,6 +204,7 @@ export type TableControlConfiguration = {
217
204
  enableMassEdit: boolean | undefined;
218
205
  enableAutoColumnWidth: boolean;
219
206
  dataStateIndicatorFilter: string | undefined;
207
+ isCompactType?: boolean;
220
208
  };
221
209
 
222
210
  export type TableType = "GridTable" | "ResponsiveTable" | "AnalyticalTable";
@@ -257,7 +245,7 @@ export type AnnotationTableColumn = BaseTableColumn & {
257
245
  tooltip?: string;
258
246
  groupLabel?: string;
259
247
  group?: string;
260
- FieldGroupHiddenExpressions?: BindingExpression<string>;
248
+ FieldGroupHiddenExpressions?: CompiledBindingToolkitExpression;
261
249
  showDataFieldsLabel?: boolean;
262
250
  isKey?: boolean;
263
251
  unit?: string;
@@ -338,11 +326,11 @@ type SorterType = {
338
326
  /**
339
327
  * Returns an array of all annotation-based and manifest-based table actions.
340
328
  *
341
- * @param {LineItem} lineItemAnnotation
342
- * @param {string} visualizationPath
343
- * @param {ConverterContext} converterContext
344
- * @param {NavigationSettingsConfiguration} navigationSettings
345
- * @returns {BaseAction} The complete table actions
329
+ * @param lineItemAnnotation
330
+ * @param visualizationPath
331
+ * @param converterContext
332
+ * @param navigationSettings
333
+ * @returns The complete table actions
346
334
  */
347
335
  export function getTableActions(
348
336
  lineItemAnnotation: LineItem,
@@ -378,11 +366,11 @@ export function getTableActions(
378
366
  * Returns an array of all columns, annotation-based as well as manifest based.
379
367
  * They are sorted and some properties can be overwritten via the manifest (check out the keys that can be overwritten).
380
368
  *
381
- * @param {LineItem} lineItemAnnotation Collection of data fields for representation in a table or list
382
- * @param {string} visualizationPath
383
- * @param {ConverterContext} converterContext
384
- * @param {NavigationSettingsConfiguration} navigationSettings
385
- * @returns {TableColumn[]} Returns all table columns that should be available, regardless of templating or personalization or their origin
369
+ * @param lineItemAnnotation Collection of data fields for representation in a table or list
370
+ * @param visualizationPath
371
+ * @param converterContext
372
+ * @param navigationSettings
373
+ * @returns Returns all table columns that should be available, regardless of templating or personalization or their origin
386
374
  */
387
375
  export function getTableColumns(
388
376
  lineItemAnnotation: LineItem,
@@ -482,9 +470,9 @@ export const getAggregateDefinitionsFromEntityType = function (
482
470
  };
483
471
  const aContextDefiningProperties: string[] = [];
484
472
  aRawContextDefiningProperties.forEach((contextDefiningPropertyName) => {
485
- const oColumn = findColumnFromPath(contextDefiningPropertyName);
486
- if (oColumn) {
487
- aContextDefiningProperties.push(oColumn.name);
473
+ const foundColumn = findColumnFromPath(contextDefiningPropertyName);
474
+ if (foundColumn) {
475
+ aContextDefiningProperties.push(foundColumn.name);
488
476
  }
489
477
  });
490
478
 
@@ -510,7 +498,7 @@ function updateTableVisualizationForAnalytics(
510
498
  tableVisualization: TableVisualization,
511
499
  entityType: EntityType,
512
500
  converterContext: ConverterContext,
513
- presentationVariantAnnotation?: PresentationVariantTypeTypes
501
+ presentationVariantAnnotation?: PresentationVariantType
514
502
  ) {
515
503
  if (tableVisualization.control.type === "AnalyticalTable") {
516
504
  const aggregatesDefinitions = getAggregateDefinitionsFromEntityType(entityType, tableVisualization.columns, converterContext),
@@ -630,7 +618,7 @@ function getSemanticKeysAndTitleInfo(converterContext: ConverterContext) {
630
618
  ?.path;
631
619
  const semanticKeyAnnotations: any[] | undefined = converterContext.getAnnotationEntityType()?.annotations?.Common?.SemanticKey;
632
620
 
633
- let semanticKeyColumns: string[] = [];
621
+ const semanticKeyColumns: string[] = [];
634
622
  if (semanticKeyAnnotations) {
635
623
  semanticKeyAnnotations.forEach(function (oColumn: any) {
636
624
  semanticKeyColumns.push(oColumn.value);
@@ -644,7 +632,7 @@ export function createTableVisualization(
644
632
  lineItemAnnotation: LineItem,
645
633
  visualizationPath: string,
646
634
  converterContext: ConverterContext,
647
- presentationVariantAnnotation?: PresentationVariantTypeTypes,
635
+ presentationVariantAnnotation?: PresentationVariantType,
648
636
  isCondensedTableLayoutCompliant?: boolean,
649
637
  viewConfiguration?: ViewPathConfiguration
650
638
  ): TableVisualization {
@@ -719,7 +707,7 @@ export function createDefaultTableVisualization(converterContext: ConverterConte
719
707
  *
720
708
  * @param lineItemAnnotation The instance of the line item
721
709
  * @param converterContext The instance of the converter context
722
- * @returns {Record<string, any>} The record containing all action names and their corresponding Core.OperationAvailable property paths
710
+ * @returns The record containing all action names and their corresponding Core.OperationAvailable property paths
723
711
  */
724
712
  function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, converterContext: ConverterContext): Record<string, any> {
725
713
  const operationAvailableMap: Record<string, any> = {};
@@ -740,14 +728,14 @@ function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, conv
740
728
  addToMap(actionName, null);
741
729
  } else if (actionTarget?.parameters?.length) {
742
730
  const bindingParameterFullName = actionTarget.parameters[0].fullyQualifiedName,
743
- targetExpression = annotationExpression(
731
+ targetExpression = getExpressionFromAnnotation(
744
732
  actionTarget?.annotations?.Core?.OperationAvailable,
745
733
  [],
746
734
  undefined,
747
735
  (path: string) => bindingContextPathVisitor(path, converterContext, bindingParameterFullName)
748
- ) as BindingExpressionExpression<string>;
736
+ );
749
737
 
750
- if (targetExpression?.path) {
738
+ if (isPathInModelExpression(targetExpression)) {
751
739
  addToMap(actionName, targetExpression.path);
752
740
  } else if (actionTarget?.annotations?.Core?.OperationAvailable !== undefined) {
753
741
  addToMap(actionName, targetExpression);
@@ -765,7 +753,7 @@ function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, conv
765
753
  * Gets updatable propertyPath for the current entityset if valid.
766
754
  *
767
755
  * @param converterContext The instance of the converter context
768
- * @returns {string} The updatable property for the rows
756
+ * @returns The updatable property for the rows
769
757
  */
770
758
  function getCurrentEntitySetUpdatablePath(converterContext: ConverterContext): string {
771
759
  const restrictions = getRestrictions(converterContext);
@@ -780,9 +768,9 @@ function getCurrentEntitySetUpdatablePath(converterContext: ConverterContext): s
780
768
  /**
781
769
  * Method to retrieve all property paths assigned to the Core.OperationAvailable annotation.
782
770
  *
783
- * @param {Record<string, any>} operationAvailableMap The record consisting of actions and their Core.OperationAvailable property paths
784
- * @param {ConverterContext} converterContext The instance of the converter context
785
- * @returns {string} The CSV string of all property paths associated with the Core.OperationAvailable annotation
771
+ * @param operationAvailableMap The record consisting of actions and their Core.OperationAvailable property paths
772
+ * @param converterContext The instance of the converter context
773
+ * @returns The CSV string of all property paths associated with the Core.OperationAvailable annotation
786
774
  */
787
775
  function getOperationAvailableProperties(operationAvailableMap: Record<string, any>, converterContext: ConverterContext): string {
788
776
  const properties = new Set();
@@ -826,8 +814,8 @@ function getUIHiddenExpForActionsRequiringContext(
826
814
  currentEntityType: EntityType,
827
815
  contextDataModelObjectPath: DataModelObjectPath,
828
816
  isEntitySet: boolean
829
- ): Expression<boolean>[] {
830
- const aUiHiddenPathExpressions: Expression<boolean>[] = [];
817
+ ): BindingToolkitExpression<boolean>[] {
818
+ const aUiHiddenPathExpressions: BindingToolkitExpression<boolean>[] = [];
831
819
  lineItemAnnotation.forEach((dataField) => {
832
820
  // Check if the lineItem context is the same as that of the action:
833
821
  if (
@@ -839,16 +827,7 @@ function getUIHiddenExpForActionsRequiringContext(
839
827
  dataField?.Inline?.valueOf() !== true)
840
828
  ) {
841
829
  if (typeof dataField.annotations?.UI?.Hidden?.valueOf() === "object") {
842
- aUiHiddenPathExpressions.push(
843
- equal(
844
- getBindingExpFromContext(
845
- dataField as DataFieldForAction | DataFieldForIntentBasedNavigation,
846
- contextDataModelObjectPath,
847
- isEntitySet
848
- ),
849
- false
850
- )
851
- );
830
+ aUiHiddenPathExpressions.push(equal(getBindingExpFromContext(dataField, contextDataModelObjectPath, isEntitySet), false));
852
831
  }
853
832
  }
854
833
  });
@@ -870,7 +849,7 @@ function getBindingExpFromContext(
870
849
  source: DataFieldForAction | DataFieldForIntentBasedNavigation | CustomAction,
871
850
  contextDataModelObjectPath: DataModelObjectPath,
872
851
  isEntitySet: boolean
873
- ): Expression<any> {
852
+ ): BindingToolkitExpression<any> {
874
853
  let sExpression: any | undefined;
875
854
  if (
876
855
  (source as DataFieldForAction)?.$Type === UIAnnotationTypes.DataFieldForAction ||
@@ -898,13 +877,13 @@ function getBindingExpFromContext(
898
877
  contextDataModelObjectPath?.targetObject?._type === "NavigationProperty" &&
899
878
  contextDataModelObjectPath.targetObject.partner === sNavigationPath
900
879
  ) {
901
- return bindingExpression(aSplitPath.slice(1).join("/"));
880
+ return pathInModel(aSplitPath.slice(1).join("/"));
902
881
  } else {
903
882
  return constant(true);
904
883
  }
905
884
  // In case there is no navigation property, if it's an entitySet, the expression binding has to be returned:
906
885
  } else if (isEntitySet) {
907
- return bindingExpression(sPath);
886
+ return pathInModel(sPath);
908
887
  // otherwise the expression binding cannot be taken into account for the selection mode evaluation:
909
888
  } else {
910
889
  return constant(true);
@@ -919,7 +898,7 @@ function getBindingExpFromContext(
919
898
  *
920
899
  * @param lineItemAnnotation Collection of data fields for representation in a table or list
921
900
  * @param currentEntityType Current Entity Type
922
- * @returns {boolean} `true` if there is at least 1 action that meets the criteria
901
+ * @returns `true` if there is at least 1 action that meets the criteria
923
902
  */
924
903
  function hasBoundActionsAlwaysVisibleInToolBar(lineItemAnnotation: LineItem, currentEntityType: EntityType): boolean {
925
904
  return lineItemAnnotation.some((dataField) => {
@@ -957,8 +936,8 @@ function hasCustomActionsAlwaysVisibleInToolBar(manifestActions: Record<string,
957
936
  * @param manifestActions The actions defined in the manifest
958
937
  * @returns Array<Expression<boolean>> All the visible path expressions of the actions that meet the criteria
959
938
  */
960
- function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<string, CustomAction>): Expression<boolean>[] {
961
- const aVisiblePathExpressions: Expression<boolean>[] = [];
939
+ function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<string, CustomAction>): BindingToolkitExpression<boolean>[] {
940
+ const aVisiblePathExpressions: BindingToolkitExpression<boolean>[] = [];
962
941
  if (manifestActions) {
963
942
  Object.keys(manifestActions).forEach((actionKey) => {
964
943
  const action = manifestActions[actionKey];
@@ -982,7 +961,7 @@ function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<s
982
961
  * Evaluate if the path is statically deletable or updatable.
983
962
  *
984
963
  * @param converterContext
985
- * @returns {TableCapabilityRestriction} The table capabilities
964
+ * @returns The table capabilities
986
965
  */
987
966
  export function getCapabilityRestriction(converterContext: ConverterContext): TableCapabilityRestriction {
988
967
  const isDeletable = isPathDeletable(converterContext.getDataModelObjectPath());
@@ -999,16 +978,16 @@ export function getSelectionMode(
999
978
  converterContext: ConverterContext,
1000
979
  isEntitySet: boolean,
1001
980
  targetCapabilities: TableCapabilityRestriction,
1002
- deleteButtonVisibilityExpression?: Expression<boolean>,
1003
- massEditVisibilityExpression: Expression<boolean> = constant(false)
981
+ deleteButtonVisibilityExpression?: BindingToolkitExpression<boolean>,
982
+ massEditVisibilityExpression: BindingToolkitExpression<boolean> = constant(false)
1004
983
  ): string | undefined {
1005
984
  if (!lineItemAnnotation) {
1006
985
  return SelectionMode.None;
1007
986
  }
1008
987
  const tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
1009
988
  let selectionMode = tableManifestSettings.tableSettings?.selectionMode;
1010
- let aHiddenBindingExpressions: Expression<boolean>[] = [],
1011
- aVisibleBindingExpressions: Expression<boolean>[] = [];
989
+ let aHiddenBindingExpressions: BindingToolkitExpression<boolean>[] = [],
990
+ aVisibleBindingExpressions: BindingToolkitExpression<boolean>[] = [];
1012
991
  const manifestActions = getActionsFromManifest(
1013
992
  converterContext.getManifestControlConfiguration(visualizationPath).actions,
1014
993
  converterContext,
@@ -1019,14 +998,14 @@ export function getSelectionMode(
1019
998
  let isParentDeletable, parentEntitySetDeletable;
1020
999
  if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
1021
1000
  isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath());
1022
- parentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable, true) : isParentDeletable;
1001
+ parentEntitySetDeletable = isParentDeletable ? compileExpression(isParentDeletable, true) : isParentDeletable;
1023
1002
  }
1024
1003
 
1025
1004
  const bMassEditEnabled: boolean = !isConstant(massEditVisibilityExpression) || massEditVisibilityExpression.value !== false;
1026
1005
  if (selectionMode && selectionMode === SelectionMode.None && deleteButtonVisibilityExpression) {
1027
1006
  if (converterContext.getTemplateType() === TemplateType.ObjectPage && bMassEditEnabled) {
1028
1007
  // Mass Edit in OP is enabled only in edit mode.
1029
- return compileBinding(
1008
+ return compileExpression(
1030
1009
  ifElse(
1031
1010
  and(UI.IsEditable, massEditVisibilityExpression),
1032
1011
  constant("Multi"),
@@ -1037,7 +1016,7 @@ export function getSelectionMode(
1037
1016
  return SelectionMode.Multi;
1038
1017
  }
1039
1018
 
1040
- return compileBinding(ifElse(deleteButtonVisibilityExpression, constant("Multi"), constant("None")));
1019
+ return compileExpression(ifElse(deleteButtonVisibilityExpression, constant("Multi"), constant("None")));
1041
1020
  }
1042
1021
  if (!selectionMode || selectionMode === SelectionMode.Auto) {
1043
1022
  selectionMode = SelectionMode.Multi;
@@ -1075,7 +1054,7 @@ export function getSelectionMode(
1075
1054
  deleteButtonVisibilityExpression || true, // default delete visibility as true
1076
1055
  massEditVisibilityExpression
1077
1056
  );
1078
- return compileBinding(
1057
+ return compileExpression(
1079
1058
  ifElse(and(UI.IsEditable, buttonVisibilityExpression), constant(selectionMode), constant(SelectionMode.None))
1080
1059
  );
1081
1060
  } else {
@@ -1086,7 +1065,7 @@ export function getSelectionMode(
1086
1065
  // example: LR scenario
1087
1066
  return selectionMode;
1088
1067
  } else if (targetCapabilities.isDeletable && deleteButtonVisibilityExpression) {
1089
- return compileBinding(ifElse(deleteButtonVisibilityExpression, constant(selectionMode), constant("None")));
1068
+ return compileExpression(ifElse(deleteButtonVisibilityExpression, constant(selectionMode), constant("None")));
1090
1069
  // EntitySet not deletable:
1091
1070
  } else {
1092
1071
  return SelectionMode.None;
@@ -1101,7 +1080,7 @@ export function getSelectionMode(
1101
1080
  massEditVisibilityExpression,
1102
1081
  constant(true)
1103
1082
  );
1104
- return compileBinding(
1083
+ return compileExpression(
1105
1084
  ifElse(
1106
1085
  and(UI.IsEditable, editModebuttonVisibilityExpression),
1107
1086
  constant(selectionMode),
@@ -1113,7 +1092,7 @@ export function getSelectionMode(
1113
1092
  )
1114
1093
  );
1115
1094
  } else {
1116
- return compileBinding(
1095
+ return compileExpression(
1117
1096
  ifElse(
1118
1097
  or(...aHiddenBindingExpressions.concat(aVisibleBindingExpressions)),
1119
1098
  constant(selectionMode),
@@ -1127,7 +1106,7 @@ export function getSelectionMode(
1127
1106
  return selectionMode;
1128
1107
  //EntitySet not deletable:
1129
1108
  } else {
1130
- return compileBinding(
1109
+ return compileExpression(
1131
1110
  ifElse(
1132
1111
  or(...aHiddenBindingExpressions.concat(aVisibleBindingExpressions), massEditVisibilityExpression),
1133
1112
  constant(selectionMode),
@@ -1143,7 +1122,7 @@ export function getSelectionMode(
1143
1122
  * @param lineItemAnnotation
1144
1123
  * @param visualizationPath
1145
1124
  * @param converterContext
1146
- * @returns {Record<BaseAction, BaseAction>} The table annotation actions
1125
+ * @returns The table annotation actions
1147
1126
  */
1148
1127
  function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPath: string, converterContext: ConverterContext) {
1149
1128
  const tableActions: BaseAction[] = [];
@@ -1164,10 +1143,10 @@ function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPa
1164
1143
  type: ActionType.DataFieldForAction,
1165
1144
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
1166
1145
  key: key,
1167
- visible: compileBinding(
1146
+ visible: compileExpression(
1168
1147
  not(
1169
1148
  equal(
1170
- annotationExpression(
1149
+ getExpressionFromAnnotation(
1171
1150
  dataField.annotations?.UI?.Hidden,
1172
1151
  [],
1173
1152
  undefined,
@@ -1186,10 +1165,10 @@ function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPa
1186
1165
  type: ActionType.DataFieldForIntentBasedNavigation,
1187
1166
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
1188
1167
  key: key,
1189
- visible: compileBinding(
1168
+ visible: compileExpression(
1190
1169
  not(
1191
1170
  equal(
1192
- annotationExpression(
1171
+ getExpressionFromAnnotation(
1193
1172
  dataField.annotations?.UI?.Hidden,
1194
1173
  [],
1195
1174
  undefined,
@@ -1225,11 +1204,11 @@ function getHighlightRowBinding(
1225
1204
  criticalityAnnotation: PathAnnotationExpression<CriticalityType> | EnumValue<CriticalityType> | undefined,
1226
1205
  isDraftRoot: boolean,
1227
1206
  targetEntityType?: EntityType
1228
- ): Expression<MessageType> {
1229
- let defaultHighlightRowDefinition: MessageType | Expression<MessageType> = MessageType.None;
1207
+ ): BindingToolkitExpression<MessageType> {
1208
+ let defaultHighlightRowDefinition: MessageType | BindingToolkitExpression<MessageType> = MessageType.None;
1230
1209
  if (criticalityAnnotation) {
1231
1210
  if (typeof criticalityAnnotation === "object") {
1232
- defaultHighlightRowDefinition = annotationExpression(criticalityAnnotation) as Expression<MessageType>;
1211
+ defaultHighlightRowDefinition = getExpressionFromAnnotation(criticalityAnnotation) as BindingToolkitExpression<MessageType>;
1233
1212
  } else {
1234
1213
  // Enum Value so we get the corresponding static part
1235
1214
  defaultHighlightRowDefinition = getMessageTypeFromCriticalityType(criticalityAnnotation);
@@ -1239,14 +1218,14 @@ function getHighlightRowBinding(
1239
1218
  const aMissingKeys: any[] = [];
1240
1219
  targetEntityType?.keys.forEach((key: any) => {
1241
1220
  if (key.name !== "IsActiveEntity") {
1242
- aMissingKeys.push(bindingExpression(key.name, undefined));
1221
+ aMissingKeys.push(pathInModel(key.name, undefined));
1243
1222
  }
1244
1223
  });
1245
1224
 
1246
1225
  return formatResult(
1247
1226
  [
1248
1227
  defaultHighlightRowDefinition,
1249
- bindingExpression(`filteredMessages`, "internal"),
1228
+ pathInModel(`filteredMessages`, "internal"),
1250
1229
  isDraftRoot && Entity.HasActive,
1251
1230
  isDraftRoot && Entity.IsActive,
1252
1231
  `${isDraftRoot}`,
@@ -1322,7 +1301,7 @@ const _getRowConfigurationProperty = function (
1322
1301
  targetPath: string
1323
1302
  ) {
1324
1303
  let pressProperty, navigationTarget;
1325
- let criticalityProperty: ExpressionOrPrimitive<MessageType> = MessageType.None;
1304
+ let criticalityProperty: BindingToolkitExpression<MessageType> = constant(MessageType.None);
1326
1305
  const targetEntityType = converterContext.getEntityType();
1327
1306
  if (navigationSettings && lineItemAnnotation) {
1328
1307
  navigationTarget = navigationSettings.display?.target || navigationSettings.detail?.outbound;
@@ -1351,17 +1330,17 @@ const _getRowConfigurationProperty = function (
1351
1330
  }
1352
1331
  }
1353
1332
  }
1354
- const rowNavigatedExpression: Expression<boolean> = formatResult(
1355
- [bindingExpression("/deepestPath", "internal")],
1333
+ const rowNavigatedExpression: BindingToolkitExpression<boolean> = formatResult(
1334
+ [pathInModel("/deepestPath", "internal")],
1356
1335
  tableFormatters.navigatedRow,
1357
1336
  targetEntityType
1358
1337
  );
1359
1338
  return {
1360
1339
  press: pressProperty,
1361
1340
  action: pressProperty ? "Navigation" : undefined,
1362
- rowHighlighting: compileBinding(criticalityProperty),
1363
- rowNavigated: compileBinding(rowNavigatedExpression),
1364
- visible: compileBinding(not(UI.IsInactive))
1341
+ rowHighlighting: compileExpression(criticalityProperty),
1342
+ rowNavigated: compileExpression(rowNavigatedExpression),
1343
+ visible: compileExpression(not(UI.IsInactive))
1365
1344
  };
1366
1345
  };
1367
1346
 
@@ -1374,7 +1353,7 @@ const _getRowConfigurationProperty = function (
1374
1353
  * @param nonSortableColumns The array of all non sortable column names.
1375
1354
  * @param converterContext The converter context.
1376
1355
  * @param tableType The table type.
1377
- * @returns {AnnotationTableColumn[]} The column from the entityType
1356
+ * @returns The column from the entityType
1378
1357
  */
1379
1358
  export const getColumnsFromEntityType = function (
1380
1359
  columnsToBeCreated: Record<string, Property>,
@@ -1468,15 +1447,16 @@ export const getColumnsFromEntityType = function (
1468
1447
 
1469
1448
  /**
1470
1449
  * Create a column definition from a property.
1471
- * @param {Property} property Entity type property for which the column is created
1472
- * @param {string} fullPropertyPath The full path to the target property
1473
- * @param {string} relativePath The relative path to the target property based on the context
1474
- * @param {boolean} useDataFieldPrefix Should be prefixed with "DataField::", else it will be prefixed with "Property::"
1475
- * @param {boolean} availableForAdaptation Decides whether the column should be available for adaptation
1476
- * @param {string[]} nonSortableColumns The array of all non-sortable column names
1477
- * @param {AggregationHelper} aggregationHelper The aggregationHelper for the entity
1478
- * @param {ConverterContext} converterContext The converter context
1479
- * @returns {AnnotationTableColumn} The annotation column definition
1450
+ *
1451
+ * @param property Entity type property for which the column is created
1452
+ * @param fullPropertyPath The full path to the target property
1453
+ * @param relativePath The relative path to the target property based on the context
1454
+ * @param useDataFieldPrefix Should be prefixed with "DataField::", else it will be prefixed with "Property::"
1455
+ * @param availableForAdaptation Decides whether the column should be available for adaptation
1456
+ * @param nonSortableColumns The array of all non-sortable column names
1457
+ * @param aggregationHelper The aggregationHelper for the entity
1458
+ * @param converterContext The converter context
1459
+ * @returns The annotation column definition
1480
1460
  */
1481
1461
  const getColumnDefinitionFromProperty = function (
1482
1462
  property: Property,
@@ -1488,7 +1468,7 @@ const getColumnDefinitionFromProperty = function (
1488
1468
  aggregationHelper: AggregationHelper,
1489
1469
  converterContext: ConverterContext
1490
1470
  ): AnnotationTableColumn {
1491
- const name = useDataFieldPrefix ? relativePath : "Property::" + relativePath;
1471
+ const name = useDataFieldPrefix ? relativePath : `Property::${relativePath}`;
1492
1472
  const key = (useDataFieldPrefix ? "DataField::" : "Property::") + replaceSpecialChars(relativePath);
1493
1473
  const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, property);
1494
1474
  const isHidden = property.annotations?.UI?.Hidden?.valueOf() === true;
@@ -1575,8 +1555,8 @@ const getColumnDefinitionFromProperty = function (
1575
1555
  /**
1576
1556
  * Returns Boolean true for valid columns, false for invalid columns.
1577
1557
  *
1578
- * @param {DataFieldAbstractTypes} dataField Different DataField types defined in the annotations
1579
- * @returns {boolean} True for valid columns, false for invalid columns
1558
+ * @param dataField Different DataField types defined in the annotations
1559
+ * @returns True for valid columns, false for invalid columns
1580
1560
  * @private
1581
1561
  */
1582
1562
  const _isValidColumn = function (dataField: DataFieldAbstractTypes) {
@@ -1596,23 +1576,20 @@ const _isValidColumn = function (dataField: DataFieldAbstractTypes) {
1596
1576
  // throw new Error("Unhandled DataField Abstract type: " + dataField.$Type);
1597
1577
  }
1598
1578
  };
1599
-
1600
1579
  /**
1601
1580
  * Returns the binding expression to evaluate the visibility of a DataField or DataPoint annotation.
1602
1581
  *
1603
1582
  * SAP Fiori elements will evaluate either the UI.Hidden annotation defined on the annotation itself or on the target property.
1604
1583
  *
1605
- * @param {DataModelObjectPath} dataFieldModelPath The metapath referring to the annotation that is evaluated by SAP Fiori elements.
1606
- * @param {object} [formatOptions] FormatOptions optional.
1607
- * @param {boolean} formatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
1608
- * @param {boolean} [returnExpression] ReturnExpression optional.
1609
- * @returns {BindingExpression<string>} An expression that you can bind to the UI.
1584
+ * @param dataFieldModelPath The metapath referring to the annotation that is evaluated by SAP Fiori elements.
1585
+ * @param [formatOptions] FormatOptions optional.
1586
+ * @param formatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
1587
+ * @returns An expression that you can bind to the UI.
1610
1588
  */
1611
1589
  export const _getVisibleExpression = function (
1612
1590
  dataFieldModelPath: DataModelObjectPath,
1613
- formatOptions?: any,
1614
- returnExpression: boolean = false
1615
- ): BindingExpression<string> {
1591
+ formatOptions?: any
1592
+ ): BindingToolkitExpression<any> {
1616
1593
  const targetObject: DataFieldAbstractTypes | DataPointTypeTypes = dataFieldModelPath.targetObject;
1617
1594
  let propertyValue;
1618
1595
  if (targetObject) {
@@ -1644,41 +1621,43 @@ export const _getVisibleExpression = function (
1644
1621
  // - the UI.Hidden expression in the original annotation does not evaluate to 'true'
1645
1622
  // - the UI.Hidden expression in the target property does not evaluate to 'true'
1646
1623
  // - in case of Analytics it's not visible for an expanded GroupHeader
1647
- const expression = and(
1624
+ return and(
1648
1625
  ...[
1649
- not(equal(annotationExpression(targetObject?.annotations?.UI?.Hidden), true)),
1650
- ifElse(!!propertyValue, propertyValue && not(equal(annotationExpression(propertyValue.annotations?.UI?.Hidden), true)), true),
1626
+ not(equal(getExpressionFromAnnotation(targetObject?.annotations?.UI?.Hidden), true)),
1627
+ ifElse(
1628
+ !!propertyValue,
1629
+ propertyValue && not(equal(getExpressionFromAnnotation(propertyValue.annotations?.UI?.Hidden), true)),
1630
+ true
1631
+ ),
1651
1632
  or(not(isAnalyticalGroupHeaderExpanded), isAnalyticalLeaf)
1652
1633
  ]
1653
1634
  );
1654
- return returnExpression ? (expression as any as BindingExpression<string>) : compileBinding(expression);
1655
1635
  };
1656
1636
 
1657
1637
  /**
1658
1638
  * Returns hidden binding expressions for a field group.
1659
- * @param {DataFieldAbstractTypes} dataFieldGroup DataField defined in the annotations
1660
- * @param {object} fieldFormatOptions FormatOptions optional.
1661
- * @param {boolean} fieldFormatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
1662
- * @returns {BindingExpression<string>} Compile binding of field group expressions.
1639
+ *
1640
+ * @param dataFieldGroup DataField defined in the annotations
1641
+ * @param fieldFormatOptions FormatOptions optional.
1642
+ * @param fieldFormatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
1643
+ * @returns Compile binding of field group expressions.
1663
1644
  * @private
1664
1645
  */
1665
1646
  const _getFieldGroupHiddenExpressions = function (
1666
1647
  dataFieldGroup: DataFieldAbstractTypes,
1667
1648
  fieldFormatOptions: any
1668
- ): BindingExpression<string> | undefined {
1669
- const aFieldGroupHiddenExpressions: BindingExpression<string>[] = [];
1649
+ ): CompiledBindingToolkitExpression | undefined {
1650
+ const aFieldGroupHiddenExpressions: BindingToolkitExpression<any>[] = [];
1670
1651
  if (
1671
1652
  dataFieldGroup.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
1672
1653
  dataFieldGroup.Target?.$target?.$Type === UIAnnotationTypes.FieldGroupType
1673
1654
  ) {
1674
1655
  dataFieldGroup.Target.$target.Data?.forEach((innerDataField: DataFieldAbstractTypes | DataPointTypeTypes) => {
1675
1656
  aFieldGroupHiddenExpressions.push(
1676
- _getVisibleExpression({ targetObject: innerDataField } as DataModelObjectPath, fieldFormatOptions, true)
1657
+ _getVisibleExpression({ targetObject: innerDataField } as DataModelObjectPath, fieldFormatOptions)
1677
1658
  );
1678
1659
  });
1679
- return compileBinding(
1680
- ifElse(or(...(aFieldGroupHiddenExpressions as any as ExpressionOrPrimitive<boolean>[])), constant(true), constant(false))
1681
- );
1660
+ return compileExpression(ifElse(or(...aFieldGroupHiddenExpressions), constant(true), constant(false)));
1682
1661
  } else {
1683
1662
  return undefined;
1684
1663
  }
@@ -1686,9 +1665,10 @@ const _getFieldGroupHiddenExpressions = function (
1686
1665
 
1687
1666
  /**
1688
1667
  * Returns the label for the property and dataField.
1689
- * @param {DataFieldAbstractTypes | Property} [property] Property or DataField defined in the annotations
1668
+ *
1669
+ * @param [property] Property or DataField defined in the annotations
1690
1670
  * @param isGroup
1691
- * @returns {string} Label of the property or DataField
1671
+ * @returns Label of the property or DataField
1692
1672
  * @private
1693
1673
  */
1694
1674
  const _getLabel = function (property: DataFieldAbstractTypes | Property, isGroup: boolean = false): string | undefined {
@@ -1698,26 +1678,26 @@ const _getLabel = function (property: DataFieldAbstractTypes | Property, isGroup
1698
1678
  if (isProperty(property)) {
1699
1679
  const dataFieldDefault = property.annotations?.UI?.DataFieldDefault;
1700
1680
  if (dataFieldDefault && !dataFieldDefault.qualifier && dataFieldDefault.Label?.valueOf()) {
1701
- return compileBinding(annotationExpression(dataFieldDefault.Label?.valueOf()));
1681
+ return compileExpression(getExpressionFromAnnotation(dataFieldDefault.Label?.valueOf()));
1702
1682
  }
1703
- return compileBinding(annotationExpression(property.annotations.Common?.Label?.valueOf() || property.name));
1683
+ return compileExpression(getExpressionFromAnnotation(property.annotations.Common?.Label?.valueOf() || property.name));
1704
1684
  } else if (isDataFieldTypes(property)) {
1705
1685
  if (!!isGroup && property.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation) {
1706
- return compileBinding(annotationExpression(property.Label?.valueOf()));
1686
+ return compileExpression(getExpressionFromAnnotation(property.Label?.valueOf()));
1707
1687
  }
1708
- return compileBinding(
1709
- annotationExpression(
1688
+ return compileExpression(
1689
+ getExpressionFromAnnotation(
1710
1690
  property.Label?.valueOf() || property.Value?.$target?.annotations?.Common?.Label?.valueOf() || property.Value?.$target?.name
1711
1691
  )
1712
1692
  );
1713
1693
  } else if (property.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
1714
- return compileBinding(
1715
- annotationExpression(
1694
+ return compileExpression(
1695
+ getExpressionFromAnnotation(
1716
1696
  property.Label?.valueOf() || (property.Target?.$target as DataPoint)?.Value?.$target?.annotations?.Common?.Label?.valueOf()
1717
1697
  )
1718
1698
  );
1719
1699
  } else {
1720
- return compileBinding(annotationExpression(property.Label?.valueOf()));
1700
+ return compileExpression(getExpressionFromAnnotation(property.Label?.valueOf()));
1721
1701
  }
1722
1702
  };
1723
1703
 
@@ -1728,36 +1708,36 @@ const _getTooltip = function (source: DataFieldAbstractTypes | Property): string
1728
1708
 
1729
1709
  if (isProperty(source)) {
1730
1710
  return source.annotations.Common?.QuickInfo
1731
- ? compileBinding(annotationExpression(source.annotations.Common.QuickInfo.valueOf()))
1711
+ ? compileExpression(getExpressionFromAnnotation(source.annotations.Common.QuickInfo.valueOf()))
1732
1712
  : undefined;
1733
1713
  } else if (isDataFieldTypes(source)) {
1734
1714
  return source.Value?.$target?.annotations?.Common?.QuickInfo
1735
- ? compileBinding(annotationExpression(source.Value.$target.annotations.Common.QuickInfo.valueOf()))
1715
+ ? compileExpression(getExpressionFromAnnotation(source.Value.$target.annotations.Common.QuickInfo.valueOf()))
1736
1716
  : undefined;
1737
1717
  } else if (source.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
1738
1718
  const datapointTarget = source.Target?.$target as DataPoint;
1739
1719
  return datapointTarget?.Value?.$target?.annotations?.Common?.QuickInfo
1740
- ? compileBinding(annotationExpression(datapointTarget.Value.$target.annotations.Common.QuickInfo.valueOf()))
1720
+ ? compileExpression(getExpressionFromAnnotation(datapointTarget.Value.$target.annotations.Common.QuickInfo.valueOf()))
1741
1721
  : undefined;
1742
1722
  } else {
1743
1723
  return undefined;
1744
1724
  }
1745
1725
  };
1746
- export function getRowStatusVisibility(): Expression<boolean> {
1726
+ export function getRowStatusVisibility(): BindingToolkitExpression<boolean> {
1747
1727
  return formatResult(
1748
- [bindingExpression(`semanticKeyHasDraftIndicator`, "internal"), bindingExpression(`filteredMessages`, "internal")],
1728
+ [pathInModel(`semanticKeyHasDraftIndicator`, "internal"), pathInModel(`filteredMessages`, "internal")],
1749
1729
  tableFormatters.getErrorStatusTextVisibilityFormatter
1750
1730
  );
1751
1731
  }
1752
1732
  /**
1753
1733
  * Creates a PropertyInfo for each identified property consumed by a LineItem.
1754
1734
  *
1755
- * @param {Record<string, Property>} columnsToBeCreated Identified properties.
1735
+ * @param columnsToBeCreated Identified properties.
1756
1736
  * @param existingColumns The list of columns created for LineItems and Properties of entityType.
1757
1737
  * @param nonSortableColumns The array of column names which cannot be sorted.
1758
1738
  * @param converterContext The converter context.
1759
1739
  * @param entityType The entity type for the LineItem
1760
- * @returns {AnnotationTableColumn[]} The array of columns created.
1740
+ * @returns The array of columns created.
1761
1741
  */
1762
1742
  const _createRelatedColumns = function (
1763
1743
  columnsToBeCreated: Record<string, Property>,
@@ -1798,7 +1778,7 @@ const _createRelatedColumns = function (
1798
1778
  // Case 3: This is a self reference from an existing column and
1799
1779
  // both cases require a dummy PropertyInfo for setting correct export settings.
1800
1780
 
1801
- const newName = "Property::" + name;
1781
+ const newName = `Property::${name}`;
1802
1782
 
1803
1783
  // Checking whether the related property column has already been created in a previous iteration.
1804
1784
  if (!existingColumns.some((column) => column.name === newName)) {
@@ -1838,8 +1818,8 @@ const _createRelatedColumns = function (
1838
1818
  * If it points to a DataField with one property or DataPoint with one property, it will use the property name
1839
1819
  * here to be consistent with the existing flex changes.
1840
1820
  *
1841
- * @param {DataFieldAbstractTypes} dataField Different DataField types defined in the annotations
1842
- * @returns {string} The name of annotation columns
1821
+ * @param dataField Different DataField types defined in the annotations
1822
+ * @returns The name of annotation columns
1843
1823
  * @private
1844
1824
  */
1845
1825
  const _getAnnotationColumnName = function (dataField: DataFieldAbstractTypes) {
@@ -1856,10 +1836,11 @@ const _getAnnotationColumnName = function (dataField: DataFieldAbstractTypes) {
1856
1836
 
1857
1837
  /**
1858
1838
  * Determines if the data field labels have to be displayed in the table.
1859
- * @param {string} fieldGroupName The `DataField` name being processed.
1860
- * @param {string} visualizationPath
1861
- * @param {ConverterContext} converterContext
1862
- * @returns {boolean} `showDataFieldsLabel` value from the manifest
1839
+ *
1840
+ * @param fieldGroupName The `DataField` name being processed.
1841
+ * @param visualizationPath
1842
+ * @param converterContext
1843
+ * @returns `showDataFieldsLabel` value from the manifest
1863
1844
  * @private
1864
1845
  */
1865
1846
  const _getShowDataFieldsLabel = function (fieldGroupName: string, visualizationPath: string, converterContext: ConverterContext): boolean {
@@ -1875,8 +1856,9 @@ const _getShowDataFieldsLabel = function (fieldGroupName: string, visualizationP
1875
1856
 
1876
1857
  /**
1877
1858
  * Determines the relative path of the property with respect to the root entity.
1859
+ *
1878
1860
  * @param dataField The `DataField` being processed.
1879
- * @returns {string} The relative path
1861
+ * @returns The relative path
1880
1862
  */
1881
1863
  const _getRelativePath = function (dataField: DataFieldAbstractTypes): string {
1882
1864
  let relativePath: string = "";
@@ -1891,11 +1873,13 @@ const _getRelativePath = function (dataField: DataFieldAbstractTypes): string {
1891
1873
  break;
1892
1874
 
1893
1875
  case UIAnnotationTypes.DataFieldForAnnotation:
1894
- relativePath = (dataField as DataFieldForAnnotation)?.Target?.value;
1876
+ relativePath = dataField?.Target?.value;
1895
1877
  break;
1896
1878
 
1897
1879
  case UIAnnotationTypes.DataFieldForAction:
1898
1880
  case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
1881
+ case UIAnnotationTypes.DataFieldForActionGroup:
1882
+ case UIAnnotationTypes.DataFieldWithActionGroup:
1899
1883
  relativePath = KeyHelper.generateKeyFromDataField(dataField);
1900
1884
  break;
1901
1885
  }
@@ -1918,33 +1902,23 @@ const _sliceAtSlash = function (path: string, isLastSlash: boolean, isLastPart:
1918
1902
  * @param dataField The data field being processed
1919
1903
  * @param propertyPath The property path
1920
1904
  * @param nonSortableColumns Collection of non-sortable column names as per annotation
1921
- * @returns {boolean} True if the column is sortable
1905
+ * @returns True if the column is sortable
1922
1906
  */
1923
1907
  const _isColumnSortable = function (dataField: DataFieldAbstractTypes, propertyPath: string, nonSortableColumns: string[]): boolean {
1924
- let isSortable: boolean = false;
1925
- if (nonSortableColumns.indexOf(propertyPath) === -1) {
1926
- // Column is not marked as non-sortable via annotation
1927
- switch (dataField.$Type) {
1928
- case UIAnnotationTypes.DataField:
1929
- case UIAnnotationTypes.DataFieldWithUrl:
1930
- isSortable = true;
1931
- break;
1932
-
1933
- case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
1934
- case UIAnnotationTypes.DataFieldForAction:
1935
- // Action columns are not sortable
1936
- isSortable = false;
1937
- break;
1938
- }
1939
- }
1940
- return isSortable;
1908
+ return (
1909
+ nonSortableColumns.indexOf(propertyPath) === -1 && // Column is not marked as non-sortable via annotation
1910
+ (dataField.$Type === UIAnnotationTypes.DataField ||
1911
+ dataField.$Type === UIAnnotationTypes.DataFieldWithUrl ||
1912
+ dataField.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation ||
1913
+ dataField.$Type === UIAnnotationTypes.DataFieldWithAction)
1914
+ );
1941
1915
  };
1942
1916
 
1943
1917
  /**
1944
1918
  * Returns whether filtering on the table is case sensitive.
1945
1919
  *
1946
- * @param {ConverterContext} converterContext The instance of the converter context
1947
- * @returns {boolean} Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
1920
+ * @param converterContext The instance of the converter context
1921
+ * @returns Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
1948
1922
  */
1949
1923
  export const isFilteringCaseSensitive = function (converterContext: ConverterContext): boolean {
1950
1924
  const filterFunctions: FilterFunctions | undefined =
@@ -1956,7 +1930,7 @@ export const isFilteringCaseSensitive = function (converterContext: ConverterCon
1956
1930
  /**
1957
1931
  * Returns default format options for text fields in a table.
1958
1932
  *
1959
- * @returns {FormatOptionsType} Collection of format options with default values
1933
+ * @returns Collection of format options with default values
1960
1934
  */
1961
1935
  function getDefaultFormatOptionsForTable(): FormatOptionsType {
1962
1936
  return {
@@ -2026,11 +2000,12 @@ function _findSemanticKeyValuesInFieldGroup(dataFieldGroup: DataFieldAbstractTyp
2026
2000
 
2027
2001
  /**
2028
2002
  * Returns default format options with draftIndicator for a column.
2003
+ *
2029
2004
  * @param name
2030
2005
  * @param semanticKeys
2031
2006
  * @param isFieldGroupColumn
2032
2007
  * @param dataFieldGroup
2033
- * @returns {FormatOptionsType} Collection of format options with default values
2008
+ * @returns Collection of format options with default values
2034
2009
  */
2035
2010
  function getDefaultDraftIndicatorForColumn(
2036
2011
  name: string,
@@ -2047,18 +2022,16 @@ function getDefaultDraftIndicatorForColumn(
2047
2022
  return {
2048
2023
  hasDraftIndicator: true,
2049
2024
  semantickeys: semanticKey.values,
2050
- objectStatusTextVisibility: compileBinding(getRowStatusVisibility())
2025
+ objectStatusTextVisibility: compileExpression(getRowStatusVisibility())
2051
2026
  };
2027
+ } else if (!semanticKeyInFieldGroup.semanticKeyHasPropertyInFieldGroup) {
2028
+ return {};
2052
2029
  } else {
2053
- if (!semanticKeyInFieldGroup.semanticKeyHasPropertyInFieldGroup) {
2054
- return {};
2055
- } else {
2056
- // Semantic Key has a property in a FieldGroup
2057
- return {
2058
- FieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
2059
- FieldGroupName: name
2060
- };
2061
- }
2030
+ // Semantic Key has a property in a FieldGroup
2031
+ return {
2032
+ FieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
2033
+ FieldGroupName: name
2034
+ };
2062
2035
  }
2063
2036
  }
2064
2037
 
@@ -2104,7 +2077,7 @@ function _getMaxImportance(fields: DataFieldTypes[]): Importance {
2104
2077
  *
2105
2078
  * @param dataField
2106
2079
  * @param semanticKeys
2107
- * @returns {Importance} The importance value
2080
+ * @returns The importance value
2108
2081
  */
2109
2082
  export function getImportance(dataField: DataFieldAbstractTypes, semanticKeys: SemanticKey): Importance | undefined {
2110
2083
  //Evaluate default Importance is not set explicitly
@@ -2158,10 +2131,10 @@ export function getImportance(dataField: DataFieldAbstractTypes, semanticKeys: S
2158
2131
  /**
2159
2132
  * Returns line items from metadata annotations.
2160
2133
  *
2161
- * @param {LineItem} lineItemAnnotation Collection of data fields with their annotations
2162
- * @param {string} visualizationPath The visualization path
2163
- * @param {ConverterContext} converterContext The converter context
2164
- * @returns {TableColumn[]} The columns from the annotations
2134
+ * @param lineItemAnnotation Collection of data fields with their annotations
2135
+ * @param visualizationPath The visualization path
2136
+ * @param converterContext The converter context
2137
+ * @returns The columns from the annotations
2165
2138
  */
2166
2139
  const getColumnsFromAnnotations = function (
2167
2140
  lineItemAnnotation: LineItem,
@@ -2205,7 +2178,7 @@ const getColumnsFromAnnotations = function (
2205
2178
  ...getDefaultFormatOptionsForTable(),
2206
2179
  ...getDefaultDraftIndicatorForColumn(name, semanticKeys, isFieldGroupColumn, lineItem)
2207
2180
  };
2208
- let fieldGroupHiddenExpressions: BindingExpression<string>;
2181
+ let fieldGroupHiddenExpressions: CompiledBindingToolkitExpression;
2209
2182
  if (
2210
2183
  lineItem.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
2211
2184
  lineItem.Target?.$target?.$Type === UIAnnotationTypes.FieldGroupType
@@ -2247,7 +2220,7 @@ const getColumnsFromAnnotations = function (
2247
2220
  // In case of text arrangement annotation with display mode as text only, exclude text property from the width calculation
2248
2221
  visualSettings = {
2249
2222
  widthCalculation: {
2250
- excludeProperties: ["Property::" + relatedPropertiesInfo.visualSettingsToBeExcluded]
2223
+ excludeProperties: [`Property::${relatedPropertiesInfo.visualSettingsToBeExcluded}`]
2251
2224
  }
2252
2225
  };
2253
2226
  } else if (!dataType || !oTypeConfig) {
@@ -2269,7 +2242,7 @@ const getColumnsFromAnnotations = function (
2269
2242
  showDataFieldsLabel: showDataFieldsLabel,
2270
2243
  relativePath: relativePath,
2271
2244
  sortable: _isColumnSortable(lineItem, relativePath, nonSortableColumns),
2272
- propertyInfos: relatedPropertyNames.length > 0 ? relatedPropertyNames : undefined,
2245
+ propertyInfos: relatedPropertyNames.length ? relatedPropertyNames : undefined,
2273
2246
  additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
2274
2247
  exportSettings: exportSettings,
2275
2248
  width: lineItem.annotations?.HTML5?.CssDefaults?.width || undefined,
@@ -2290,14 +2263,14 @@ const getColumnsFromAnnotations = function (
2290
2263
  annotationColumns.push(oColumn as AnnotationTableColumn);
2291
2264
 
2292
2265
  // Collect information of related columns to be created.
2293
- relatedPropertyNames.forEach((name) => {
2294
- columnsToBeCreated[name] = relatedPropertiesInfo.properties[name];
2266
+ relatedPropertyNames.forEach((relatedPropertyName) => {
2267
+ columnsToBeCreated[relatedPropertyName] = relatedPropertiesInfo.properties[relatedPropertyName];
2295
2268
  });
2296
2269
 
2297
2270
  // Create columns for additional properties identified for ALP use case.
2298
- additionalPropertyNames.forEach((name) => {
2271
+ additionalPropertyNames.forEach((additionalPropertyName) => {
2299
2272
  // Intentional overwrite as we require only one new PropertyInfo for a related Property.
2300
- columnsToBeCreated[name] = relatedPropertiesInfo.additionalProperties[name];
2273
+ columnsToBeCreated[additionalPropertyName] = relatedPropertiesInfo.additionalProperties[additionalPropertyName];
2301
2274
  });
2302
2275
  });
2303
2276
  }
@@ -2323,11 +2296,12 @@ const getColumnsFromAnnotations = function (
2323
2296
  /**
2324
2297
  * Gets the property names from the manifest and checks against existing properties already added by annotations.
2325
2298
  * If a not yet stored property is found it adds it for sorting and filtering only to the annotationColumns.
2326
- * @param {string[] | undefined} properties
2327
- * @param {AnnotationTableColumn[]} annotationColumns
2328
- * @param {ConverterContext} converterContext
2299
+ *
2300
+ * @param properties
2301
+ * @param annotationColumns
2302
+ * @param converterContext
2329
2303
  * @param entityType
2330
- * @returns {string[]} The columns from the annotations
2304
+ * @returns The columns from the annotations
2331
2305
  */
2332
2306
  const _getPropertyNames = function (
2333
2307
  properties: string[] | undefined,
@@ -2374,10 +2348,10 @@ const _appendCustomTemplate = function (properties: string[]): string {
2374
2348
  * Manifest defined property value for custom / annotation columns
2375
2349
  * Default property value for custom column if not overwritten in manifest.
2376
2350
  *
2377
- * @param {any} property The column property defined in the manifest
2378
- * @param {any} defaultValue The default value of the property
2379
- * @param {boolean} isAnnotationColumn Whether the column, defined in manifest, corresponds to an existing annotation column.
2380
- * @returns {any} Determined property value for the column
2351
+ * @param property The column property defined in the manifest
2352
+ * @param defaultValue The default value of the property
2353
+ * @param isAnnotationColumn Whether the column, defined in manifest, corresponds to an existing annotation column.
2354
+ * @returns Determined property value for the column
2381
2355
  */
2382
2356
  const _getManifestOrDefaultValue = function (property: any, defaultValue: any, isAnnotationColumn: boolean): any {
2383
2357
  if (property === undefined) {
@@ -2391,12 +2365,13 @@ const _getManifestOrDefaultValue = function (property: any, defaultValue: any, i
2391
2365
 
2392
2366
  /**
2393
2367
  * Returns table column definitions from manifest.
2368
+ *
2394
2369
  * @param columns
2395
2370
  * @param annotationColumns
2396
2371
  * @param converterContext
2397
2372
  * @param entityType
2398
2373
  * @param navigationSettings
2399
- * @returns {Record<string, CustomColumn>} The columns from the manifest
2374
+ * @returns The columns from the manifest
2400
2375
  */
2401
2376
  const getColumnsFromManifest = function (
2402
2377
  columns: Record<string, ManifestTableColumn>,
@@ -2419,7 +2394,7 @@ const getColumnsFromManifest = function (
2419
2394
  entityType
2420
2395
  );
2421
2396
  if (!manifestColumn?.template && manifestColumn?.type !== "Slot" && !isAnnotationColumn) {
2422
- const Message = "The annotation column '" + key + "' referenced in the manifest is not found";
2397
+ const Message = `The annotation column '${key}' referenced in the manifest is not found`;
2423
2398
  converterContext
2424
2399
  .getDiagnostics()
2425
2400
  .addIssue(
@@ -2432,8 +2407,8 @@ const getColumnsFromManifest = function (
2432
2407
  } else {
2433
2408
  internalColumns[key] = {
2434
2409
  key: key,
2435
- id: "CustomColumn::" + key,
2436
- name: "CustomColumn::" + key,
2410
+ id: `CustomColumn::${key}`,
2411
+ name: `CustomColumn::${key}`,
2437
2412
  header: manifestColumn.header,
2438
2413
  width: manifestColumn.width || undefined,
2439
2414
  importance: _getManifestOrDefaultValue(manifestColumn?.importance, Importance.None, isAnnotationColumn),
@@ -2545,9 +2520,9 @@ export function getP13nMode(
2545
2520
  * Chart has a dependency to filter bar (issue with loading data). Once resolved, the check for chart should be removed here.
2546
2521
  * Until then, hiding filter bar is now allowed if a chart is being used on LR.
2547
2522
  *
2548
- * @param {ManifestWrapper} manifestWrapper Manifest settings getter for the page
2549
- * @param {ConverterContext} converterContext The instance of the converter context
2550
- * @returns {boolean} Boolean suggesting if a filter bar is being used on the page.
2523
+ * @param manifestWrapper Manifest settings getter for the page
2524
+ * @param converterContext The instance of the converter context
2525
+ * @returns Boolean suggesting if a filter bar is being used on the page.
2551
2526
  */
2552
2527
  function _isFilterBarHidden(manifestWrapper: ManifestWrapper, converterContext: ConverterContext): boolean {
2553
2528
  return (
@@ -2561,13 +2536,13 @@ function _isFilterBarHidden(manifestWrapper: ManifestWrapper, converterContext:
2561
2536
  * Returns a JSON string containing the sort conditions for the presentation variant.
2562
2537
  *
2563
2538
  * @param converterContext The instance of the converter context
2564
- * @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
2539
+ * @param presentationVariantAnnotation Presentation variant annotation
2565
2540
  * @param columns Table columns processed by the converter
2566
- * @returns {string | undefined} Sort conditions for a presentation variant.
2541
+ * @returns Sort conditions for a presentation variant.
2567
2542
  */
2568
2543
  function getSortConditions(
2569
2544
  converterContext: ConverterContext,
2570
- presentationVariantAnnotation: PresentationVariantTypeTypes | undefined,
2545
+ presentationVariantAnnotation: PresentationVariantType | undefined,
2571
2546
  columns: TableColumn[]
2572
2547
  ): string | undefined {
2573
2548
  // Currently navigation property is not supported as sorter
@@ -2623,18 +2598,19 @@ function convertPropertyPathsToInfoNames(paths: PropertyPath[], columns: TableCo
2623
2598
  /**
2624
2599
  * Returns a JSON string containing Presentation Variant group conditions.
2625
2600
  *
2626
- * @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
2601
+ * @param presentationVariantAnnotation Presentation variant annotation
2627
2602
  * @param columns Converter processed table columns
2628
- * @returns {string | undefined} Group conditions for a Presentation variant.
2603
+ * @param tableType The table type.
2604
+ * @returns Group conditions for a Presentation variant.
2629
2605
  */
2630
2606
  function getGroupConditions(
2631
- presentationVariantAnnotation: PresentationVariantTypeTypes | undefined,
2607
+ presentationVariantAnnotation: PresentationVariantType | undefined,
2632
2608
  columns: TableColumn[],
2633
2609
  tableType: string
2634
2610
  ): string | undefined {
2635
2611
  let groupConditions: string | undefined;
2636
2612
  if (presentationVariantAnnotation?.GroupBy) {
2637
- let aGroupBy = presentationVariantAnnotation.GroupBy as PropertyPath[];
2613
+ let aGroupBy = presentationVariantAnnotation.GroupBy;
2638
2614
  if (tableType === "ResponsiveTable") {
2639
2615
  aGroupBy = aGroupBy.slice(0, 1);
2640
2616
  }
@@ -2650,17 +2626,17 @@ function getGroupConditions(
2650
2626
  /**
2651
2627
  * Returns a JSON string containing Presentation Variant aggregate conditions.
2652
2628
  *
2653
- * @param {PresentationVariantTypeTypes | undefined} presentationVariantAnnotation Presentation variant annotation
2629
+ * @param presentationVariantAnnotation Presentation variant annotation
2654
2630
  * @param columns Converter processed table columns
2655
- * @returns {string | undefined} Group conditions for a Presentation variant.
2631
+ * @returns Group conditions for a Presentation variant.
2656
2632
  */
2657
2633
  function getAggregateConditions(
2658
- presentationVariantAnnotation: PresentationVariantTypeTypes | undefined,
2634
+ presentationVariantAnnotation: PresentationVariantType | undefined,
2659
2635
  columns: TableColumn[]
2660
2636
  ): string | undefined {
2661
2637
  let aggregateConditions: string | undefined;
2662
2638
  if (presentationVariantAnnotation?.Total) {
2663
- const aTotals = presentationVariantAnnotation.Total as PropertyPath[];
2639
+ const aTotals = presentationVariantAnnotation.Total;
2664
2640
  const aggregates: Record<string, object> = {};
2665
2641
  convertPropertyPathsToInfoNames(aTotals, columns).forEach((infoName) => {
2666
2642
  aggregates[infoName] = {};
@@ -2678,7 +2654,7 @@ export function getTableAnnotationConfiguration(
2678
2654
  converterContext: ConverterContext,
2679
2655
  tableManifestConfiguration: TableControlConfiguration,
2680
2656
  columns: TableColumn[],
2681
- presentationVariantAnnotation?: PresentationVariantTypeTypes,
2657
+ presentationVariantAnnotation?: PresentationVariantType,
2682
2658
  viewConfiguration?: ViewPathConfiguration
2683
2659
  ): TableAnnotationConfiguration {
2684
2660
  // Need to get the target
@@ -2688,7 +2664,7 @@ export function getTableAnnotationConfiguration(
2688
2664
  const pageManifestSettings: ManifestWrapper = converterContext.getManifestWrapper();
2689
2665
  const hasAbsolutePath = navigationPropertyPath.length === 0,
2690
2666
  p13nMode: string | undefined = getP13nMode(visualizationPath, converterContext, tableManifestConfiguration),
2691
- id = navigationPropertyPath ? TableID(visualizationPath) : TableID(converterContext.getContextPath(), "LineItem");
2667
+ id = navigationPropertyPath ? getTableID(visualizationPath) : getTableID(converterContext.getContextPath(), "LineItem");
2692
2668
  const targetCapabilities = getCapabilityRestriction(converterContext);
2693
2669
  const navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
2694
2670
  const navigationSettings = pageManifestSettings.getNavigationConfiguration(navigationTargetPath);
@@ -2712,7 +2688,7 @@ export function getTableAnnotationConfiguration(
2712
2688
  const isInsertUpdateTemplated = getInsertUpdateActionsTemplating(
2713
2689
  standardActionsContext,
2714
2690
  isDraftOrStickySupported(converterContext),
2715
- compileBinding(createButtonVisibilityExpression) === "false"
2691
+ compileExpression(createButtonVisibilityExpression) === "false"
2716
2692
  );
2717
2693
 
2718
2694
  const selectionMode = getSelectionMode(
@@ -2813,7 +2789,7 @@ function _getExportDataType(dataType: string, isComplexProperty: boolean = false
2813
2789
  * Split the visualization path into the navigation property path and annotation.
2814
2790
  *
2815
2791
  * @param visualizationPath
2816
- * @returns {object}
2792
+ * @returns The split path
2817
2793
  */
2818
2794
  export function splitPath(visualizationPath: string) {
2819
2795
  let [navigationPropertyPath, annotationPath] = visualizationPath.split("@");
@@ -2836,9 +2812,9 @@ export function getSelectionVariantConfiguration(
2836
2812
  const propertyNames: string[] = [];
2837
2813
  selection.SelectOptions?.forEach((selectOption: SelectOptionType) => {
2838
2814
  const propertyName: any = selectOption.PropertyName;
2839
- const PropertyPath: string = propertyName.value;
2840
- if (propertyNames.indexOf(PropertyPath) === -1) {
2841
- propertyNames.push(PropertyPath);
2815
+ const propertyPath: string = propertyName.value;
2816
+ if (propertyNames.indexOf(propertyPath) === -1) {
2817
+ propertyNames.push(propertyPath);
2842
2818
  }
2843
2819
  });
2844
2820
  return {
@@ -2896,17 +2872,11 @@ function _getTableType(
2896
2872
  converterContext: ConverterContext
2897
2873
  ): TableType {
2898
2874
  let tableType = tableSettings?.type || "ResponsiveTable";
2899
- if (converterContext.getTemplateType() !== "ObjectPage") {
2900
- if (tableSettings?.type === "AnalyticalTable" && !aggregationHelper.isAnalyticsSupported()) {
2901
- tableType = "GridTable";
2902
- }
2903
- if (!tableSettings?.type) {
2904
- if (converterContext.getManifestWrapper().isDesktop() && aggregationHelper.isAnalyticsSupported()) {
2905
- tableType = "AnalyticalTable";
2906
- } else {
2907
- tableType = "ResponsiveTable";
2908
- }
2909
- }
2875
+ /* Now, we keep the configuration in the manifest, even if it leads to errors.
2876
+ We only change if we're not on desktop from Analytical to Responsive.
2877
+ */
2878
+ if (tableType === "AnalyticalTable" && !converterContext.getManifestWrapper().isDesktop()) {
2879
+ tableType = "ResponsiveTable";
2910
2880
  }
2911
2881
  return tableType;
2912
2882
  }
@@ -2954,7 +2924,7 @@ function _getFilterConfiguration(
2954
2924
  let quickSelectionVariant: any;
2955
2925
  let filters;
2956
2926
  tableSettings?.quickVariantSelection?.paths?.forEach((path: { annotationPath: string }) => {
2957
- quickSelectionVariant = targetEntityType.resolvePath("@" + path.annotationPath);
2927
+ quickSelectionVariant = targetEntityType.resolvePath(`@${path.annotationPath}`);
2958
2928
  filters = _getFilters(tableSettings, quickFilterPaths, quickSelectionVariant, path, converterContext);
2959
2929
  });
2960
2930
 
@@ -3011,7 +2981,8 @@ export function getTableManifestConfiguration(
3011
2981
  showRowCount:
3012
2982
  !tableSettings?.quickVariantSelection?.showCounts && !converterContext.getManifestWrapper().getViewConfiguration()?.showCounts,
3013
2983
  type: tableType,
3014
- useCondensedTableLayout: condensedTableLayout && isCondensedTableLayoutCompliant
2984
+ useCondensedTableLayout: condensedTableLayout && isCondensedTableLayoutCompliant,
2985
+ isCompactType: converterContext.getManifestWrapper().isCompactType()
3015
2986
  };
3016
2987
 
3017
2988
  return { ...oConfiguration, ...oFilterConfiguration };
@@ -3068,7 +3039,7 @@ export function getTypeConfig(oProperty: Property | DataFieldAbstractTypes, data
3068
3039
  isDigitSequence:
3069
3040
  propertyTypeConfig.type === "sap.ui.model.odata.type.String" &&
3070
3041
  oTargetMapping.constraints?.["@com.sap.vocabularies.Common.v1.IsDigitSequence"] &&
3071
- (oProperty as Property).annotations?.Common?.IsDigitSequence
3042
+ oProperty.annotations?.Common?.IsDigitSequence
3072
3043
  ? true
3073
3044
  : undefined
3074
3045
  };