@sapui5/sap.fe.core 1.99.0 → 1.101.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 (289) hide show
  1. package/package.json +6 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -92
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -107
  5. package/src/sap/fe/core/AppComponent.js +381 -399
  6. package/src/sap/fe/core/AppComponent.ts +397 -0
  7. package/src/sap/fe/core/AppStateHandler.js +131 -162
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +82 -58
  10. package/src/sap/fe/core/BaseController.ts +67 -0
  11. package/src/sap/fe/core/CommonUtils.js +179 -31
  12. package/src/sap/fe/core/CommonUtils.ts +295 -125
  13. package/src/sap/fe/core/ExtensionAPI.js +279 -274
  14. package/src/sap/fe/core/ExtensionAPI.ts +242 -0
  15. package/src/sap/fe/core/PageController.js +158 -29
  16. package/src/sap/fe/core/PageController.ts +65 -37
  17. package/src/sap/fe/core/RouterProxy.js +700 -750
  18. package/src/sap/fe/core/RouterProxy.ts +47 -31
  19. package/src/sap/fe/core/Synchronization.js +21 -31
  20. package/src/sap/fe/core/TemplateComponent.js +193 -118
  21. package/src/sap/fe/core/TemplateComponent.ts +104 -109
  22. package/src/sap/fe/core/TemplateModel.js +24 -44
  23. package/src/sap/fe/core/TemplateModel.ts +3 -3
  24. package/src/sap/fe/core/TransactionHelper.js +1368 -1369
  25. package/src/sap/fe/core/TransactionHelper.ts +201 -171
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +406 -0
  27. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +362 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +146 -0
  29. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +129 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.js +264 -0
  31. package/src/sap/fe/core/actions/collaboration/Manage.ts +246 -0
  32. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +100 -0
  33. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  34. package/src/sap/fe/core/actions/draft.js +324 -220
  35. package/src/sap/fe/core/actions/draft.ts +209 -133
  36. package/src/sap/fe/core/actions/messageHandling.js +79 -48
  37. package/src/sap/fe/core/actions/messageHandling.ts +113 -83
  38. package/src/sap/fe/core/actions/operations.js +37 -18
  39. package/src/sap/fe/core/actions/operations.ts +51 -20
  40. package/src/sap/fe/core/actions/sticky.js +17 -4
  41. package/src/sap/fe/core/actions/sticky.ts +21 -4
  42. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  43. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  48. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  49. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  50. package/src/sap/fe/core/controllerextensions/EditFlow.js +1854 -1669
  51. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1792 -0
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  53. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +60 -0
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +716 -779
  55. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +785 -0
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  57. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +810 -0
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1056 -1005
  59. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1001 -0
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.js +498 -532
  61. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +13 -12
  62. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  63. package/src/sap/fe/core/controllerextensions/MassEdit.ts +155 -0
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.js +221 -244
  65. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +215 -0
  66. package/src/sap/fe/core/controllerextensions/PageReady.js +312 -345
  67. package/src/sap/fe/core/controllerextensions/PageReady.ts +57 -53
  68. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  69. package/src/sap/fe/core/controllerextensions/Paginator.ts +169 -0
  70. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  71. package/src/sap/fe/core/controllerextensions/Placeholder.ts +149 -0
  72. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  73. package/src/sap/fe/core/controllerextensions/Routing.ts +131 -0
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  75. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  76. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  77. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  78. package/src/sap/fe/core/controllerextensions/SideEffects.js +603 -644
  79. package/src/sap/fe/core/controllerextensions/SideEffects.ts +68 -68
  80. package/src/sap/fe/core/controllerextensions/ViewState.js +774 -806
  81. package/src/sap/fe/core/controllerextensions/ViewState.ts +796 -0
  82. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  84. package/src/sap/fe/core/controls/Any.js +28 -0
  85. package/src/sap/fe/core/controls/Any.ts +30 -0
  86. package/src/sap/fe/core/controls/CommandExecution.js +92 -68
  87. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  88. package/src/sap/fe/core/controls/ConditionalWrapper.js +165 -79
  89. package/src/sap/fe/core/controls/ConditionalWrapper.ts +74 -0
  90. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  91. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  92. package/src/sap/fe/core/controls/CustomQuickViewPage.js +167 -125
  93. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +116 -0
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  95. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +163 -122
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +155 -0
  97. package/src/sap/fe/core/controls/FieldWrapper.js +212 -141
  98. package/src/sap/fe/core/controls/FieldWrapper.ts +104 -0
  99. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  100. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  101. package/src/sap/fe/core/controls/FilterBar.js +197 -159
  102. package/src/sap/fe/core/controls/FilterBar.ts +148 -0
  103. package/src/sap/fe/core/controls/FormElementWrapper.js +100 -39
  104. package/src/sap/fe/core/controls/FormElementWrapper.ts +37 -0
  105. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  106. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  107. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +147 -115
  108. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +102 -0
  109. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +300 -265
  110. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +252 -0
  111. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +185 -140
  112. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  113. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  114. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +75 -74
  117. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +71 -0
  118. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  119. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  120. package/src/sap/fe/core/converters/ManifestSettings.js +13 -1
  121. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -2
  122. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  123. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  124. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  125. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  126. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  127. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  128. package/src/sap/fe/core/converters/annotations/DataField.js +26 -13
  129. package/src/sap/fe/core/converters/annotations/DataField.ts +40 -17
  130. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  131. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  132. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  133. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  134. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -6
  135. package/src/sap/fe/core/converters/controls/Common/Form.ts +7 -3
  136. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  137. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -2
  138. package/src/sap/fe/core/converters/controls/Common/Table.js +326 -86
  139. package/src/sap/fe/core/converters/controls/Common/Table.ts +384 -167
  140. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +120 -55
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +158 -98
  142. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +206 -223
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +263 -287
  144. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  146. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  148. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  150. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  152. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  153. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  154. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  155. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  156. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  157. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +51 -27
  158. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +69 -43
  159. package/src/sap/fe/core/converters/templates/ListReportConverter.js +42 -25
  160. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +91 -65
  161. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +11 -9
  162. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -8
  163. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  164. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  165. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  166. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  167. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  168. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  169. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  170. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  171. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  172. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  173. package/src/sap/fe/core/fpm/Component.js +80 -55
  174. package/src/sap/fe/core/fpm/Component.ts +43 -0
  175. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  176. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  177. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  178. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  179. package/src/sap/fe/core/helpers/ClassSupport.js +307 -166
  180. package/src/sap/fe/core/helpers/ClassSupport.ts +348 -155
  181. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  183. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  184. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  185. package/src/sap/fe/core/helpers/MassEditHelper.js +735 -684
  186. package/src/sap/fe/core/helpers/MassEditHelper.ts +803 -0
  187. package/src/sap/fe/core/helpers/ModelHelper.js +53 -1
  188. package/src/sap/fe/core/helpers/ModelHelper.ts +46 -0
  189. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  190. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  191. package/src/sap/fe/core/helpers/SemanticDateOperators.js +7 -3
  192. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +7 -1
  193. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  194. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  195. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  196. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  197. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  198. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  199. package/src/sap/fe/core/library.js +425 -451
  200. package/src/sap/fe/core/library.support.js +22 -33
  201. package/src/sap/fe/core/library.support.ts +23 -0
  202. package/src/sap/fe/core/library.ts +420 -0
  203. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  204. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -4
  205. package/src/sap/fe/core/messagebundle.properties +45 -13
  206. package/src/sap/fe/core/messagebundle_ar.properties +29 -7
  207. package/src/sap/fe/core/messagebundle_bg.properties +29 -7
  208. package/src/sap/fe/core/messagebundle_ca.properties +29 -7
  209. package/src/sap/fe/core/messagebundle_cs.properties +29 -7
  210. package/src/sap/fe/core/messagebundle_cy.properties +29 -7
  211. package/src/sap/fe/core/messagebundle_da.properties +29 -7
  212. package/src/sap/fe/core/messagebundle_de.properties +29 -7
  213. package/src/sap/fe/core/messagebundle_el.properties +29 -7
  214. package/src/sap/fe/core/messagebundle_en.properties +29 -7
  215. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -7
  216. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +29 -7
  217. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +29 -7
  218. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +29 -7
  219. package/src/sap/fe/core/messagebundle_es.properties +29 -7
  220. package/src/sap/fe/core/messagebundle_es_MX.properties +29 -7
  221. package/src/sap/fe/core/messagebundle_et.properties +29 -7
  222. package/src/sap/fe/core/messagebundle_fi.properties +30 -8
  223. package/src/sap/fe/core/messagebundle_fr.properties +31 -9
  224. package/src/sap/fe/core/messagebundle_fr_CA.properties +31 -9
  225. package/src/sap/fe/core/messagebundle_hi.properties +29 -7
  226. package/src/sap/fe/core/messagebundle_hr.properties +29 -7
  227. package/src/sap/fe/core/messagebundle_hu.properties +29 -7
  228. package/src/sap/fe/core/messagebundle_id.properties +29 -7
  229. package/src/sap/fe/core/messagebundle_it.properties +29 -7
  230. package/src/sap/fe/core/messagebundle_iw.properties +29 -7
  231. package/src/sap/fe/core/messagebundle_ja.properties +28 -6
  232. package/src/sap/fe/core/messagebundle_kk.properties +29 -7
  233. package/src/sap/fe/core/messagebundle_ko.properties +29 -7
  234. package/src/sap/fe/core/messagebundle_lt.properties +29 -7
  235. package/src/sap/fe/core/messagebundle_lv.properties +30 -8
  236. package/src/sap/fe/core/messagebundle_ms.properties +29 -7
  237. package/src/sap/fe/core/messagebundle_nl.properties +29 -7
  238. package/src/sap/fe/core/messagebundle_no.properties +29 -7
  239. package/src/sap/fe/core/messagebundle_pl.properties +29 -7
  240. package/src/sap/fe/core/messagebundle_pt.properties +30 -8
  241. package/src/sap/fe/core/messagebundle_pt_PT.properties +29 -7
  242. package/src/sap/fe/core/messagebundle_ro.properties +29 -7
  243. package/src/sap/fe/core/messagebundle_ru.properties +29 -7
  244. package/src/sap/fe/core/messagebundle_sh.properties +29 -7
  245. package/src/sap/fe/core/messagebundle_sk.properties +29 -7
  246. package/src/sap/fe/core/messagebundle_sl.properties +29 -7
  247. package/src/sap/fe/core/messagebundle_sv.properties +30 -8
  248. package/src/sap/fe/core/messagebundle_th.properties +28 -6
  249. package/src/sap/fe/core/messagebundle_tr.properties +32 -10
  250. package/src/sap/fe/core/messagebundle_uk.properties +29 -7
  251. package/src/sap/fe/core/messagebundle_vi.properties +29 -7
  252. package/src/sap/fe/core/messagebundle_zh_CN.properties +29 -7
  253. package/src/sap/fe/core/messagebundle_zh_TW.properties +29 -7
  254. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +47 -73
  255. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +158 -196
  257. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +5 -6
  258. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +70 -96
  259. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  260. package/src/sap/fe/core/services/NavigationServiceFactory.js +287 -342
  261. package/src/sap/fe/core/services/NavigationServiceFactory.ts +11 -14
  262. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +70 -105
  263. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +6 -3
  264. package/src/sap/fe/core/services/RoutingServiceFactory.js +796 -820
  265. package/src/sap/fe/core/services/RoutingServiceFactory.ts +62 -53
  266. package/src/sap/fe/core/services/ShellServicesFactory.js +694 -741
  267. package/src/sap/fe/core/services/ShellServicesFactory.ts +33 -33
  268. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +570 -595
  269. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +23 -4
  270. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +357 -389
  271. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +25 -29
  272. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  273. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +7 -4
  274. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  275. package/src/sap/fe/core/support/CommonHelper.ts +1 -4
  276. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  277. package/src/sap/fe/core/templating/DataModelPathHelper.js +91 -90
  278. package/src/sap/fe/core/templating/DataModelPathHelper.ts +126 -123
  279. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  280. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  281. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  282. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  283. package/src/sap/fe/core/templating/PropertyHelper.js +16 -2
  284. package/src/sap/fe/core/templating/PropertyHelper.ts +31 -24
  285. package/src/sap/fe/core/templating/UIFormatters.js +150 -44
  286. package/src/sap/fe/core/templating/UIFormatters.ts +165 -67
  287. package/src/sap/fe/core/type/Email.js +26 -8
  288. package/src/sap/fe/core/type/Email.ts +8 -7
  289. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -75
@@ -16,13 +16,21 @@ import {
16
16
  not,
17
17
  notEqual,
18
18
  or,
19
- greaterThan
19
+ greaterThan,
20
+ formatResult
20
21
  } from "sap/fe/core/helpers/BindingExpression";
21
- import { CreationMode, NavigationSettingsConfiguration, TemplateType, ViewPathConfiguration } from "../../../ManifestSettings";
22
+ import { CreationMode, TemplateType, ViewPathConfiguration } from "../../../ManifestSettings";
22
23
  import { singletonPathVisitor, UI } from "../../../helpers/BindingHelper";
23
24
  import { PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
24
25
  import { getTargetObjectPath, isPathDeletable, isPathInsertable, isPathUpdatable } from "sap/fe/core/templating/DataModelPathHelper";
25
26
  import { TableControlConfiguration } from "../Table";
27
+ import tableFormatters from "sap/fe/core/formatters/TableFormatter";
28
+
29
+ enum AnnotationHiddenProperty {
30
+ CreateHidden = "CreateHidden",
31
+ DeleteHidden = "DeleteHidden",
32
+ UpdateHidden = "UpdateHidden"
33
+ }
26
34
 
27
35
  export type StandardActionConfigType = {
28
36
  isTemplated?: BindingExpression<boolean>;
@@ -32,7 +40,7 @@ export type StandardActionConfigType = {
32
40
 
33
41
  type ExpressionRestrictionsType = {
34
42
  expression: Expression<boolean>;
35
- isOnlyCurrentEntityExpression: boolean;
43
+ navigationExpression: Expression<boolean>;
36
44
  };
37
45
  type StandardActionsRestrictionsType = Record<string, ExpressionRestrictionsType>;
38
46
 
@@ -43,7 +51,7 @@ export type StandardActionsContext = {
43
51
  "delete": Expression<boolean>;
44
52
  update: Expression<boolean>;
45
53
  };
46
- isExternalCreateConfigured: boolean;
54
+ creationMode: CreationMode;
47
55
  isDraftOrStickySupported: boolean;
48
56
  isViewWithMultipleVisualizations: boolean;
49
57
  newAction?: {
@@ -58,26 +66,25 @@ export type StandardActionsContext = {
58
66
  * Generates the context for the standard actions.
59
67
  *
60
68
  * @param {ConverterContext} converterContext
61
- * @param {NavigationSettingsConfiguration} navigationSettings
69
+ * @param {NavigationSettingsConfiguration} creationMode
62
70
  * @param {TableControlConfiguration} tableManifestConfiguration
63
71
  * @param {ViewPathConfiguration} viewConfiguration
64
72
  * @returns The context for table actions
65
73
  */
66
-
67
74
  export function generateStandardActionsContext(
68
75
  converterContext: ConverterContext,
69
- navigationSettings: NavigationSettingsConfiguration,
76
+ creationMode: CreationMode,
70
77
  tableManifestConfiguration: TableControlConfiguration,
71
78
  viewConfiguration?: ViewPathConfiguration
72
79
  ): StandardActionsContext {
73
80
  return {
74
81
  collectionPath: getTargetObjectPath(converterContext.getDataModelObjectPath()),
75
82
  hiddenAnnotation: {
76
- create: isActionAnnotatedHidden(converterContext, "CreateHidden"),
77
- "delete": isActionAnnotatedHidden(converterContext, "DeleteHidden"),
78
- update: isActionAnnotatedHidden(converterContext, "UpdateHidden")
83
+ create: isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.CreateHidden),
84
+ "delete": isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.DeleteHidden),
85
+ update: isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.UpdateHidden)
79
86
  },
80
- isExternalCreateConfigured: isExternalCreateConfigured(navigationSettings),
87
+ creationMode: creationMode,
81
88
  isDraftOrStickySupported: isDraftOrStickySupported(converterContext),
82
89
  isViewWithMultipleVisualizations: viewConfiguration
83
90
  ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration)
@@ -88,17 +95,6 @@ export function generateStandardActionsContext(
88
95
  };
89
96
  }
90
97
 
91
- /**
92
- * Checks if an external created is configured for the navigation.
93
- *
94
- * @param {NavigationSettingsConfiguration} navigationSettings
95
- * @returns {boolean}
96
- */
97
- export function isExternalCreateConfigured(navigationSettings: NavigationSettingsConfiguration): boolean {
98
- const navigation = navigationSettings?.create;
99
- return (navigation && navigation.outbound && navigation.outboundDetail) !== undefined;
100
- }
101
-
102
98
  /**
103
99
  * Checks if draft is supported.
104
100
  *
@@ -163,22 +159,27 @@ export function getNewAction(converterContext: ConverterContext): any {
163
159
  *
164
160
  * @param {ConverterContext} converterContext
165
161
  * @param {string} sAnnotationTerm
162
+ * @param {boolean} bWithNavigationPath
166
163
  * @returns {Expression<boolean>}
167
164
  */
168
- export function isActionAnnotatedHidden(converterContext: ConverterContext, sAnnotationTerm: string): Expression<boolean> {
165
+ export function isActionAnnotatedHidden(
166
+ converterContext: ConverterContext,
167
+ sAnnotationTerm: string,
168
+ bWithNavigationPath = true
169
+ ): Expression<boolean> {
169
170
  const currentEntitySet = converterContext.getEntitySet();
170
171
  const dataModelObjectPath = converterContext.getDataModelObjectPath();
171
172
  // Consider only the last level of navigation. The others are already considered in the element binding of the page.
172
173
  const visitedNavigationPaths =
173
- dataModelObjectPath.navigationProperties.length > 0
174
+ dataModelObjectPath.navigationProperties.length > 0 && bWithNavigationPath
174
175
  ? [dataModelObjectPath.navigationProperties[dataModelObjectPath.navigationProperties.length - 1].name]
175
176
  : [];
177
+ const actionAnnotationValue =
178
+ ((currentEntitySet?.annotations.UI as any)?.[sAnnotationTerm] as PropertyAnnotationValue<boolean>) || false;
179
+
176
180
  return currentEntitySet
177
- ? annotationExpression(
178
- ((currentEntitySet?.annotations.UI as any)?.[sAnnotationTerm] as PropertyAnnotationValue<boolean>) || false,
179
- visitedNavigationPaths,
180
- undefined,
181
- (path: string) => singletonPathVisitor(path, converterContext, visitedNavigationPaths)
181
+ ? annotationExpression(actionAnnotationValue, visitedNavigationPaths, undefined, (path: string) =>
182
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths)
182
183
  )
183
184
  : constant(false);
184
185
  }
@@ -209,9 +210,22 @@ export function getRestrictions(converterContext: ConverterContext): StandardAct
209
210
  restrictionsDef.forEach(function(def) {
210
211
  const defFunction = def["function"];
211
212
  result[def.key] = {
212
- expression: defFunction.apply(null, [dataModelObjectPath]),
213
- isOnlyCurrentEntityExpression: !!(defFunction.apply(null, [dataModelObjectPath, undefined, true]) as any)
214
- ?.currentEntityRestriction
213
+ expression: defFunction.apply(null, [
214
+ dataModelObjectPath,
215
+ {
216
+ pathVisitor: (path: string, navigationPaths: string[]) =>
217
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths)
218
+ }
219
+ ]),
220
+ navigationExpression: defFunction.apply(null, [
221
+ dataModelObjectPath,
222
+ {
223
+ ignoreTargetCollection: true,
224
+ authorizeUnresolvable: true,
225
+ pathVisitor: (path: string, navigationPaths: string[]) =>
226
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths)
227
+ }
228
+ ])
215
229
  };
216
230
  });
217
231
  return result;
@@ -230,7 +244,7 @@ export function getInsertUpdateActionsTemplating(
230
244
  isDraftOrSticky: boolean,
231
245
  isCreateAlwaysHidden: boolean
232
246
  ): boolean {
233
- return (isDraftOrSticky || standardActionsContext.isExternalCreateConfigured) && !isCreateAlwaysHidden;
247
+ return (isDraftOrSticky || standardActionsContext.creationMode === CreationMode.External) && !isCreateAlwaysHidden;
234
248
  }
235
249
 
236
250
  /**
@@ -272,6 +286,24 @@ export function getStandardActionDelete(
272
286
  };
273
287
  }
274
288
 
289
+ /**
290
+ * @param converterContext
291
+ * @param standardActionsContext
292
+ * @returns StandardActionConfigType
293
+ */
294
+ export function getCreationRow(
295
+ converterContext: ConverterContext,
296
+ standardActionsContext: StandardActionsContext
297
+ ): StandardActionConfigType {
298
+ const creationRowVisibility = getCreateVisibility(converterContext, standardActionsContext, true);
299
+
300
+ return {
301
+ isTemplated: compileBinding(getCreateTemplating(standardActionsContext, creationRowVisibility, true)),
302
+ visible: compileBinding(creationRowVisibility),
303
+ enabled: compileBinding(getCreationRowEnablement(converterContext, standardActionsContext, creationRowVisibility))
304
+ };
305
+ }
306
+
275
307
  /**
276
308
  * Gets the binding expressions for the properties of the action Paste.
277
309
  *
@@ -319,39 +351,26 @@ export function getStandardActionMassEdit(
319
351
  *
320
352
  * @param {StandardActionsContext} standardActionsContext
321
353
  * @param {Expression<boolean>} createVisibility
354
+ * @param {boolean} isForCreationRow
322
355
  * @returns {Expression<boolean> }
323
356
  */
324
357
  export function getCreateTemplating(
325
358
  standardActionsContext: StandardActionsContext,
326
- createVisibility: Expression<boolean>
359
+ createVisibility: Expression<boolean>,
360
+ isForCreationRow = false
327
361
  ): Expression<boolean> {
328
- const isCreationRow = standardActionsContext.tableManifestConfiguration.creationMode === CreationMode.CreationRow;
329
- const newAction = standardActionsContext.newAction;
330
- const isInsertable = standardActionsContext.restrictions.isInsertable.expression;
331
-
332
362
  //Templating of Create Button is not done:
333
- // - If Button is never visible or CreationMode is on CreationRow
334
- // - Otherwise If new action is configured and never available
335
- // - Otherwise If delete restrictions coming from NavigationRestrictions are constantly false
336
- // - Otherwise If there is no external create action
337
- // - Otherwise if there is delete restrictions on the current entitySet set to false
363
+ // - If Button is never visible(covered the External create button, new Action)
364
+ // - or CreationMode is on CreationRow for Create Button
365
+ // - or CreationMode is not on CreationRow for CreationRow Button
338
366
 
339
- return ifElse(
340
- or(and(isConstant(createVisibility), equal(createVisibility, false)), isCreationRow),
341
- false,
342
- ifElse(
343
- and(isConstant(newAction?.available), equal(newAction?.available, false)),
344
- false,
345
- ifElse(
346
- and(not(standardActionsContext.restrictions.isInsertable.isOnlyCurrentEntityExpression), isConstant(isInsertable)),
347
- isInsertable,
348
- ifElse(
349
- standardActionsContext.isExternalCreateConfigured,
350
- true,
351
- not(and(isConstant(isInsertable), equal(isInsertable, constant(false))))
352
- )
353
- )
354
- )
367
+ return and(
368
+ //XNOR gate
369
+ or(
370
+ and(isForCreationRow, standardActionsContext.creationMode === CreationMode.CreationRow),
371
+ and(!isForCreationRow, standardActionsContext.creationMode !== CreationMode.CreationRow)
372
+ ),
373
+ or(not(isConstant(createVisibility)), createVisibility)
355
374
  );
356
375
  }
357
376
 
@@ -362,7 +381,7 @@ export function getCreateTemplating(
362
381
  * @returns {Expression<boolean> }
363
382
  */
364
383
  export function getDefaultTemplating(actionVisibility: Expression<boolean>): Expression<boolean> {
365
- return not(and(isConstant(actionVisibility), equal(actionVisibility, false)));
384
+ return or(not(isConstant(actionVisibility)), actionVisibility);
366
385
  }
367
386
 
368
387
  /**
@@ -370,14 +389,18 @@ export function getDefaultTemplating(actionVisibility: Expression<boolean>): Exp
370
389
  *
371
390
  * @param {ConverterContext} converterContext
372
391
  * @param {StandardActionsContext} standardActionsContext
392
+ * @param {boolean} isForCreationRow
373
393
  * @returns {Expression<boolean> }
374
394
  */
375
395
  export function getCreateVisibility(
376
396
  converterContext: ConverterContext,
377
- standardActionsContext: StandardActionsContext
397
+ standardActionsContext: StandardActionsContext,
398
+ isForCreationRow = false
378
399
  ): Expression<boolean> {
379
400
  const isInsertable = standardActionsContext.restrictions.isInsertable.expression;
380
- const isCreateHidden = standardActionsContext.hiddenAnnotation.create;
401
+ const isCreateHidden = isForCreationRow
402
+ ? isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.CreateHidden, false)
403
+ : standardActionsContext.hiddenAnnotation.create;
381
404
  const newAction = standardActionsContext.newAction;
382
405
 
383
406
  //Create Button is visible:
@@ -391,12 +414,8 @@ export function getCreateVisibility(
391
414
  // - Otherwise
392
415
  // - This depends on the value of the the UI.IsEditable
393
416
  return ifElse(
394
- standardActionsContext.isExternalCreateConfigured,
395
- ifElse(
396
- converterContext.getTemplateType() === TemplateType.ListReport,
397
- not(isCreateHidden),
398
- and(not(isCreateHidden), UI.IsEditable)
399
- ),
417
+ standardActionsContext.creationMode === CreationMode.External,
418
+ and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)),
400
419
  ifElse(
401
420
  or(
402
421
  and(isConstant(newAction?.available), equal(newAction?.available, false)),
@@ -408,7 +427,7 @@ export function getCreateVisibility(
408
427
  false,
409
428
  ifElse(
410
429
  converterContext.getTemplateType() === TemplateType.ListReport,
411
- ifElse(isBinding(isCreateHidden), not(isCreateHidden), true),
430
+ or(not(isBinding(isCreateHidden)), not(isCreateHidden)),
412
431
  and(not(isCreateHidden), UI.IsEditable)
413
432
  )
414
433
  )
@@ -437,7 +456,7 @@ export function getDeleteVisibility(
437
456
  // - Otherwise
438
457
  // - If UI.DeleteHidden is true -> not visible
439
458
  // - Otherwise
440
- // - If we're on OP -> depending of the editMode and restrictions on deletable
459
+ // - If we're on OP -> depending if UI is editable and restrictions on deletable
441
460
  // - Otherwise
442
461
  // - If UI.DeleteHidden points to a property path -> provide a negated binding to this path
443
462
  // - Otherwise, delete is visible
@@ -453,8 +472,8 @@ export function getDeleteVisibility(
453
472
  false,
454
473
  ifElse(
455
474
  converterContext.getTemplateType() !== TemplateType.ListReport,
456
- and(not(isDeleteHidden), equal(bindingExpression("/editMode", "ui"), "Editable")),
457
- ifElse(isBinding(isDeleteHidden), not(isDeleteHidden), true)
475
+ and(not(isDeleteHidden), UI.IsEditable),
476
+ not(and(isBinding(isDeleteHidden), isDeleteHidden))
458
477
  )
459
478
  )
460
479
  )
@@ -479,15 +498,12 @@ export function getPasteVisibility(
479
498
  // If Create is visible, enablePaste is not disabled into manifest and we are on OP/blocks outside Fiori elements templates
480
499
  // Then button will be visible according to insertable restrictions and create visibility
481
500
  // Otherwise it's not visible
482
- return ifElse(
483
- and(
484
- notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false),
485
- createVisibility,
486
- isInsertUpdateActionsTemplated
487
- ),
488
- [TemplateType.ListReport, TemplateType.AnalyticalListPage].indexOf(converterContext.getTemplateType()) === -1 &&
489
- standardActionsContext.restrictions.isInsertable.expression,
490
- false
501
+ return and(
502
+ notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false),
503
+ createVisibility,
504
+ isInsertUpdateActionsTemplated,
505
+ [TemplateType.ListReport, TemplateType.AnalyticalListPage].indexOf(converterContext.getTemplateType()) === -1,
506
+ standardActionsContext.restrictions.isInsertable.expression
491
507
  );
492
508
  }
493
509
 
@@ -507,7 +523,7 @@ export function getMassEditVisibility(
507
523
  bMassEditEnabledInManifest: boolean = standardActionsContext.tableManifestConfiguration?.enableMassEdit || false;
508
524
  const templateBindingExpression =
509
525
  converterContext.getTemplateType() === TemplateType.ObjectPage
510
- ? equal(UI.IsEditable, true)
526
+ ? UI.IsEditable
511
527
  : converterContext.getTemplateType() === TemplateType.ListReport;
512
528
  //MassEdit is visible
513
529
  // If
@@ -516,10 +532,59 @@ export function getMassEditVisibility(
516
532
  // - and the selectionMode is relevant
517
533
  // Then MassEdit is always visible in LR or dynamically visible in OP according to ui>Editable and hiddenAnnotation
518
534
  // Button is hidden for all other cases
519
- return ifElse(
520
- and(not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))), bMassEditEnabledInManifest),
521
- and(templateBindingExpression, not(isUpdateHidden)),
522
- false
535
+ return and(
536
+ not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))),
537
+ bMassEditEnabledInManifest,
538
+ templateBindingExpression,
539
+ not(isUpdateHidden)
540
+ );
541
+ }
542
+
543
+ /**
544
+ * Gets the binding expression for the property enabled of the creationRow.
545
+ *
546
+ * @param {ConverterContext} converterContext
547
+ * @param {StandardActionsContext} standardActionsContext
548
+ * @param {Expression<boolean>} creationRowVisibility
549
+ * @returns {Expression<boolean> }
550
+ */
551
+ export function getCreationRowEnablement(
552
+ converterContext: ConverterContext,
553
+ standardActionsContext: StandardActionsContext,
554
+ creationRowVisibility: Expression<boolean>
555
+ ): Expression<boolean> {
556
+ const restrictionsInsertable = isPathInsertable(converterContext.getDataModelObjectPath(), {
557
+ ignoreTargetCollection: true,
558
+ authorizeUnresolvable: true,
559
+ pathVisitor: (path: string, navigationPaths: string[]) => {
560
+ if (path.indexOf("/") === 0) {
561
+ path = singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths);
562
+ return path;
563
+ }
564
+ const navigationProperties = converterContext.getDataModelObjectPath().navigationProperties;
565
+ if (navigationProperties) {
566
+ const partner = navigationProperties[navigationProperties.length - 1].partner;
567
+ if (partner) {
568
+ path = `${partner}/${path}`;
569
+ }
570
+ }
571
+ return path;
572
+ }
573
+ });
574
+ const isInsertable =
575
+ restrictionsInsertable._type === "Unresolvable"
576
+ ? isPathInsertable(converterContext.getDataModelObjectPath(), {
577
+ pathVisitor: (path: string) => singletonPathVisitor(path, converterContext.getConvertedTypes(), [])
578
+ })
579
+ : restrictionsInsertable;
580
+
581
+ return and(
582
+ creationRowVisibility,
583
+ isInsertable,
584
+ or(
585
+ !standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData,
586
+ formatResult([bindingExpression("creationRowFieldValidity", "internal")], tableFormatters.validateCreationRowFields)
587
+ )
523
588
  );
524
589
  }
525
590
 
@@ -540,14 +605,9 @@ export function getCreateEnablement(
540
605
  const CollectionType = converterContext.resolveAbsolutePath<any>(standardActionsContext.collectionPath).target?._type;
541
606
  return and(
542
607
  createVisibility,
543
- ifElse(
608
+ or(
544
609
  CollectionType === "EntitySet",
545
- true,
546
- ifElse(
547
- converterContext.getTemplateType() !== TemplateType.ObjectPage,
548
- isInsertable,
549
- and(isInsertable, equal(bindingExpression("/editMode", "ui"), "Editable"))
550
- )
610
+ and(isInsertable, or(converterContext.getTemplateType() !== TemplateType.ObjectPage, UI.IsEditable))
551
611
  )
552
612
  );
553
613
  }
@@ -567,7 +627,7 @@ export function getDeleteEnablement(
567
627
  ): Expression<boolean> {
568
628
  const isDeletable = standardActionsContext.restrictions.isDeletable.expression;
569
629
  const isOnlyDynamicOnCurrentEntity =
570
- standardActionsContext.restrictions.isDeletable.isOnlyCurrentEntityExpression && !isConstant(isDeletable);
630
+ !isConstant(isDeletable) && standardActionsContext.restrictions.isDeletable.navigationExpression._type === "Unresolvable";
571
631
  const numberOfSelectedContexts = bindingExpression("numberOfSelectedContexts", "internal");
572
632
  const numberOfDeletableContexts = bindingExpression("deletableContexts", "internal");
573
633
  const numberOfUnSavedContexts = bindingExpression("unSavedContexts", "internal");
@@ -576,13 +636,12 @@ export function getDeleteEnablement(
576
636
  deleteVisibility,
577
637
  ifElse(
578
638
  or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity),
579
- ifElse(
639
+ and(
580
640
  or(
581
641
  and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)),
582
642
  and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))
583
643
  ),
584
- bindingExpression("deleteEnabled", "internal"),
585
- false
644
+ bindingExpression("deleteEnabled", "internal")
586
645
  ),
587
646
  and(notEqual(numberOfSelectedContexts, 0), isDeletable)
588
647
  )
@@ -615,7 +674,8 @@ export function getMassEditEnablement(
615
674
  ): Expression<boolean> {
616
675
  const pathUpdatableExpression = standardActionsContext.restrictions.isUpdatable.expression;
617
676
  const isOnlyDynamicOnCurrentEntity: any =
618
- standardActionsContext.restrictions.isUpdatable.isOnlyCurrentEntityExpression && !isConstant(pathUpdatableExpression);
677
+ !isConstant(pathUpdatableExpression) &&
678
+ standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable";
619
679
  const numberOfSelectedContexts = greaterOrEqual(bindingExpression("numberOfSelectedContexts", "internal"), 1);
620
680
  const numberOfUpdatableContexts = greaterOrEqual(length(bindingExpression("updatableContexts", "internal")), 1);
621
681
  const bIsDraftSupported = isDraftSupported(converterContext);