@sapui5/sap.fe.core 1.97.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,20 +1,27 @@
1
- import { OverrideExecution } from "sap/ui/core/mvc";
2
- import { ObjectPath, deepClone } from "sap/base/util";
3
- import { $ControlSettings, ElementMetadata, RenderManager } from "sap/ui/core";
1
+ import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
2
+ import ObjectPath from "sap/base/util/ObjectPath";
3
+ import ElementMetadata from "sap/ui/core/ElementMetadata";
4
+ import RenderManager from "sap/ui/core/RenderManager";
5
+ import Metadata from "sap/ui/base/Metadata";
6
+ import ControllerExtensionMetadata from "sap/fe/core/controllerextensions/ControllerExtensionMetadata";
7
+ import ControllerMetadata from "sap/ui/core/mvc/ControllerMetadata";
8
+ import uid from "sap/base/util/uid";
9
+ import merge from "sap/base/util/merge";
10
+ import UI5Event from "sap/ui/base/Event";
4
11
 
5
12
  const ensureMetadata = function(target: any) {
6
- if (!target.hasOwnProperty("metadata")) {
7
- target.metadata = deepClone(
8
- target.metadata || {
9
- properties: {},
10
- macroContexts: {},
11
- aggregations: {},
12
- associations: {},
13
- methods: {},
14
- events: {}
15
- }
16
- );
17
- }
13
+ target.metadata = merge(
14
+ {
15
+ controllerExtensions: {},
16
+ properties: {},
17
+ macroContexts: {},
18
+ aggregations: {},
19
+ associations: {},
20
+ methods: {},
21
+ events: {}
22
+ },
23
+ target.metadata || {}
24
+ );
18
25
  return target.metadata;
19
26
  };
20
27
  export function Override(sTarget?: string) {
@@ -44,22 +51,25 @@ export function Extensible(oOverrideExecution?: OverrideExecution) {
44
51
  metadata.methods[propertyKey].overrideExecution = oOverrideExecution;
45
52
  };
46
53
  }
47
- export function Public(target: any, propertyKey: string) {
54
+ export function Public(target: any, propertyKey: string, descriptor: any): any {
48
55
  const metadata = ensureMetadata(target);
56
+ descriptor.enumerable = true;
49
57
  if (!metadata.methods[propertyKey]) {
50
58
  metadata.methods[propertyKey] = {};
51
59
  }
52
60
  metadata.methods[propertyKey].public = true;
53
61
  }
54
- export function Private(target: any, propertyKey: string) {
62
+ export function Private(target: any, propertyKey: string, descriptor: any) {
55
63
  const metadata = ensureMetadata(target);
64
+ descriptor.enumerable = true;
56
65
  if (!metadata.methods[propertyKey]) {
57
66
  metadata.methods[propertyKey] = {};
58
67
  }
59
68
  metadata.methods[propertyKey].public = false;
60
69
  }
61
- export function Final(target: any, propertyKey: string) {
70
+ export function Final(target: any, propertyKey: string, descriptor: any) {
62
71
  const metadata = ensureMetadata(target);
72
+ descriptor.enumerable = true;
63
73
  if (!metadata.methods[propertyKey]) {
64
74
  metadata.methods[propertyKey] = {};
65
75
  }
@@ -84,6 +94,14 @@ export function MacroContext(bMetaModelObject: boolean = false): any {
84
94
  return Property({ type: "sap.ui.model.Context", macroContext: true, metaModelObject: bMetaModelObject });
85
95
  }
86
96
 
97
+ export function UsingExtension(extensionClass: any): any {
98
+ return function(target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor): any {
99
+ const metadata = ensureMetadata(target);
100
+ delete (propertyDescriptor as any).initializer;
101
+ metadata.controllerExtensions[propertyKey] = extensionClass;
102
+ return propertyDescriptor;
103
+ };
104
+ }
87
105
  export function Property(oPropertyParams: any): any {
88
106
  return function(target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor): any {
89
107
  const metadata = ensureMetadata(target);
@@ -97,12 +115,12 @@ export function Property(oPropertyParams: any): any {
97
115
  }
98
116
  delete propertyDescriptor.writable;
99
117
  delete (propertyDescriptor as any).initializer;
100
- (propertyDescriptor as any).set = function(v: any) {
101
- return this.setProperty(propertyKey, v);
102
- };
103
- (propertyDescriptor as any).get = function() {
104
- return this.getProperty(propertyKey);
105
- };
118
+ // (propertyDescriptor as any).set = function(v: any) {
119
+ // return this.setProperty(propertyKey, v);
120
+ // };
121
+ // (propertyDescriptor as any).get = function() {
122
+ // return this.getProperty(propertyKey);
123
+ // };
106
124
 
107
125
  return propertyDescriptor;
108
126
  };
@@ -119,12 +137,12 @@ export function Aggregation(oAggregationDescriptor?: any): any {
119
137
  }
120
138
  delete propertyDescriptor.writable;
121
139
  delete (propertyDescriptor as any).initializer;
122
- (propertyDescriptor as any).set = function(v: any) {
123
- return this.setAggregation(propertyKey, v);
124
- };
125
- (propertyDescriptor as any).get = function() {
126
- return this.getAggregation(propertyKey);
127
- };
140
+ // (propertyDescriptor as any).set = function(v: any) {
141
+ // return this.setAggregation(propertyKey, v);
142
+ // };
143
+ // (propertyDescriptor as any).get = function() {
144
+ // return this.getAggregation(propertyKey);
145
+ // };
128
146
 
129
147
  return propertyDescriptor;
130
148
  };
@@ -138,12 +156,12 @@ export function Association(oAssociationDescription?: any): any {
138
156
  }
139
157
  delete propertyDescriptor.writable;
140
158
  delete (propertyDescriptor as any).initializer;
141
- (propertyDescriptor as any).set = function(v: any) {
142
- return this.setAggregation(propertyKey, v);
143
- };
144
- (propertyDescriptor as any).get = function() {
145
- return this.getAggregation(propertyKey);
146
- };
159
+ // (propertyDescriptor as any).set = function(v: any) {
160
+ // return this.setAggregation(propertyKey, v);
161
+ // };
162
+ // (propertyDescriptor as any).get = function() {
163
+ // return this.getAggregation(propertyKey);
164
+ // };
147
165
 
148
166
  return propertyDescriptor;
149
167
  };
@@ -151,9 +169,16 @@ export function Association(oAssociationDescription?: any): any {
151
169
  type ControlPropertyNames<T> = {
152
170
  [K in keyof T]: T[K] extends Function ? never : K;
153
171
  }[keyof T];
154
- export type PropertiesOf<T> = Partial<Pick<T, ControlPropertyNames<T>>> & $ControlSettings;
172
+ export type PropertiesOf<T> = Partial<Pick<T, ControlPropertyNames<T>>>;
155
173
 
156
- export function APIClass(sTarget: string) {
174
+ /**
175
+ * Decorator to provide a new API class to be used in the macros.
176
+ *
177
+ * @param sTarget The fully qualified name of the macro API
178
+ * @param isDependentBound Whether this API will be used as a dependent or not
179
+ * @class
180
+ */
181
+ export function APIClass(sTarget: string, isDependentBound = false) {
157
182
  return function(constructor: Function) {
158
183
  if (!constructor.prototype.metadata) {
159
184
  constructor.prototype.metadata = {};
@@ -163,7 +188,7 @@ export function APIClass(sTarget: string) {
163
188
  constructor.prototype.metadata.interfaces = [];
164
189
  }
165
190
  constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
166
-
191
+ (constructor as any).isDependentBound = isDependentBound;
167
192
  if (!constructor.prototype.renderer) {
168
193
  constructor.prototype.renderer = {
169
194
  apiVersion: 2,
@@ -176,22 +201,29 @@ export function APIClass(sTarget: string) {
176
201
  describe(constructor, sTarget, constructor.prototype, ElementMetadata);
177
202
  };
178
203
  }
179
- export function UI5Class(sTarget: string, metadataClass?: any, metadataDefinition?: any) {
204
+ export function UI5Class(sTarget: string, metadataClass?: any, metadataDefinition?: any, useExtend: boolean = true) {
180
205
  return function(constructor: Function) {
181
206
  if (!constructor.prototype.metadata) {
182
207
  constructor.prototype.metadata = {};
183
208
  }
184
- if (metadataDefinition?.properties) {
185
- constructor.prototype.metadata.properties = metadataDefinition.properties;
186
- }
187
- if (metadataDefinition?.events) {
188
- constructor.prototype.metadata.events = metadataDefinition.events;
209
+ if (metadataDefinition) {
210
+ Object.keys(metadataDefinition).forEach(key => {
211
+ constructor.prototype.metadata[key] = metadataDefinition[key];
212
+ });
189
213
  }
190
- describe(constructor, sTarget, constructor.prototype, metadataClass);
214
+ return describe(constructor, sTarget, constructor.prototype, metadataClass, useExtend);
191
215
  };
192
216
  }
193
-
194
- function describe(clazz: any, name: string, inObj: any, metadataClass?: any) {
217
+ function describe(clazz: any, name: string, inObj: any, metadataClass?: any, useExtend: boolean = true) {
218
+ if (metadataClass === ControllerExtensionMetadata) {
219
+ Object.getOwnPropertyNames(inObj).forEach(objName => {
220
+ const descriptor = Object.getOwnPropertyDescriptor(inObj, objName);
221
+ if (descriptor && !descriptor.enumerable) {
222
+ descriptor.enumerable = true;
223
+ // Log.error(`Property ${objName} from ${name} should be decorated as public`);
224
+ }
225
+ });
226
+ }
195
227
  const obj: any = {};
196
228
  obj.metadata = inObj.metadata || {};
197
229
  obj.override = inObj.override;
@@ -199,34 +231,129 @@ function describe(clazz: any, name: string, inObj: any, metadataClass?: any) {
199
231
  obj.metadata.baseType = Object.getPrototypeOf(clazz.prototype)
200
232
  .getMetadata()
201
233
  .getName();
202
- obj.renderer = inObj.renderer || clazz.renderer;
234
+
235
+ const rendererDefinition = inObj.renderer || clazz.renderer;
236
+ obj.renderer = { apiVersion: 2 };
237
+ if (typeof rendererDefinition === "function") {
238
+ obj.renderer.render = rendererDefinition;
239
+ } else if (rendererDefinition != undefined) {
240
+ obj.renderer = rendererDefinition;
241
+ }
203
242
  obj.metadata.interfaces = inObj.metadata?.interfaces || clazz.metadata?.interfaces;
204
- let metadata: any;
205
- if (metadataClass) {
206
- metadata = new metadataClass(name, obj);
243
+ if (useExtend) {
244
+ Object.keys(clazz.prototype).forEach(key => {
245
+ if (key !== "metadata") {
246
+ try {
247
+ obj[key] = clazz.prototype[key];
248
+ } catch (e) {
249
+ //console.log(e);
250
+ }
251
+ }
252
+ });
253
+ }
254
+ if (obj.metadata?.controllerExtensions && Object.keys(obj.metadata.controllerExtensions).length > 0) {
255
+ for (const cExtName in obj.metadata.controllerExtensions) {
256
+ obj[cExtName] = obj.metadata.controllerExtensions[cExtName];
257
+ }
258
+ }
259
+ let output = clazz;
260
+ if (useExtend) {
261
+ output = clazz.extend(name, obj, metadataClass);
262
+ const fnInit = output.prototype.init;
263
+ output.prototype.init = function(...args: any[]) {
264
+ fnInit && fnInit.apply(this, args);
265
+ this.metadata = obj.metadata;
266
+
267
+ if (obj.metadata.properties) {
268
+ const aPropertyKeys = Object.keys(obj.metadata.properties);
269
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
270
+ const that = this;
271
+ aPropertyKeys.forEach(propertyKey => {
272
+ Object.defineProperty(that, propertyKey, {
273
+ configurable: true,
274
+ set: (v: any) => {
275
+ return that.setProperty(propertyKey, v);
276
+ },
277
+ get: () => {
278
+ return that.getProperty(propertyKey);
279
+ }
280
+ });
281
+ });
282
+ const aAggregationKeys = Object.keys(obj.metadata.aggregations);
283
+ aAggregationKeys.forEach(aggregationKey => {
284
+ Object.defineProperty(that, aggregationKey, {
285
+ configurable: true,
286
+ set: (v: any) => {
287
+ return that.setAggregation(aggregationKey, v);
288
+ },
289
+ get: () => {
290
+ return that.getAggregation(aggregationKey);
291
+ }
292
+ });
293
+ });
294
+ }
295
+ };
207
296
  } else {
208
- metadata = new ElementMetadata(name, obj);
297
+ let metadata: any;
298
+ if (metadataClass) {
299
+ metadata = new metadataClass(name, obj);
300
+ } else {
301
+ metadata = new ElementMetadata(name, obj);
302
+ }
303
+ clazz.getMetadata = clazz.prototype.getMetadata = function() {
304
+ return metadata;
305
+ };
306
+ if (!clazz.getMetadata().isFinal()) {
307
+ clazz.extend = function(sSCName: string, oSCClassInfo: any, fnSCMetaImpl: Function) {
308
+ // the default constructor created by ui5 does not return the value which is problematic with TS
309
+ oSCClassInfo.constructor = function(...args: any[]) {
310
+ return clazz.apply(this, args);
311
+ };
312
+
313
+ const fnClass = (Metadata as any).createClass(
314
+ clazz,
315
+ sSCName,
316
+ oSCClassInfo,
317
+ fnSCMetaImpl || metadataClass || ElementMetadata
318
+ );
319
+ // fnClass.prototype.constructor = function(...args: any[]) {
320
+ // return clazz.apply(this, ...args);
321
+ // };
322
+ return fnClass;
323
+ };
324
+ }
209
325
  }
210
- clazz.getMetadata = clazz.prototype.getMetadata = function() {
211
- return metadata;
326
+ clazz.override = function(oExtension: any) {
327
+ const pol = {};
328
+ (pol as any).constructor = function(...args: any[]) {
329
+ return clazz.apply(this, args as any);
330
+ };
331
+ const oClass = (Metadata as any).createClass(clazz, "anonymousExtension~" + uid(), pol, ControllerMetadata);
332
+ oClass.getMetadata()._staticOverride = oExtension;
333
+ oClass.getMetadata()._override = (clazz.getMetadata() as any)._override;
334
+ return oClass;
212
335
  };
336
+
213
337
  const fnInit = clazz.prototype.init;
214
- clazz.prototype.init = function(...args: any[]) {
215
- fnInit.apply(this, args);
216
- const aPropertyKeys = Object.keys(obj.metadata.properties);
217
- // eslint-disable-next-line @typescript-eslint/no-this-alias
218
- const that = this;
219
- aPropertyKeys.forEach(propertyKey => {
220
- Object.defineProperty(that, propertyKey, {
221
- configurable: true,
222
- set: (v: any) => {
223
- return that.setProperty(propertyKey, v);
224
- },
225
- get: () => {
226
- return that.getProperty(propertyKey);
227
- }
338
+ output.prototype.init = function(...args: any[]) {
339
+ fnInit && fnInit.apply(this, args);
340
+ if (obj.metadata.properties) {
341
+ const aPropertyKeys = Object.keys(obj.metadata.properties);
342
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
343
+ const that = this;
344
+ aPropertyKeys.forEach(propertyKey => {
345
+ Object.defineProperty(that, propertyKey, {
346
+ configurable: true,
347
+ set: (v: any) => {
348
+ return that.setProperty(propertyKey, v);
349
+ },
350
+ get: () => {
351
+ return that.getProperty(propertyKey);
352
+ }
353
+ });
228
354
  });
229
- });
355
+ }
230
356
  };
231
- ObjectPath.set(name, clazz);
357
+ ObjectPath.set(name, output);
358
+ return output;
232
359
  }
@@ -1,61 +1,66 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/base/BindingParser"], function(BindingParser) {
6
- "use strict";
7
-
8
- var getObject = function(oObject, sPath) {
9
- if (!oObject) {
10
- return null;
11
- }
12
- var sPathSplit = sPath.split("/");
13
- if (sPathSplit.length === 1) {
14
- return oObject[sPath];
15
- } else {
16
- return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
17
- }
18
- };
19
- /**
20
- * Resolve a dynamic annotation path down to a standard annotation path.
21
- *
22
- * @param sAnnotationPath
23
- * @param oMetaModel
24
- * @returns {string} The non dynamic version of the annotation path
25
- */
26
- var resolveDynamicExpression = function(sAnnotationPath, oMetaModel) {
27
- if (sAnnotationPath.indexOf("[") !== -1) {
28
- var firstBracket = sAnnotationPath.indexOf("[");
29
- var sStableBracket = sAnnotationPath.substr(0, firstBracket);
30
- var sRest = sAnnotationPath.substr(firstBracket + 1);
31
- var lastBracket = sRest.indexOf("]");
32
- var aValue = oMetaModel.getObject(sStableBracket);
33
- var oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
34
- if (
35
- Array.isArray(aValue) &&
36
- oExpression &&
37
- oExpression.result &&
38
- oExpression.result.parts &&
39
- oExpression.result.parts[0] &&
40
- oExpression.result.parts[0].path
41
- ) {
42
- var bFound = false;
43
- for (var i = 0; i < aValue.length && !bFound; i++) {
44
- var oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
45
- var bResult = oExpression.result.formatter(oObjectValue);
46
- if (bResult) {
47
- bFound = true;
48
- }
49
- }
50
- if (bFound) {
51
- sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
52
- }
53
- }
54
- }
55
- return sAnnotationPath;
56
- };
57
-
58
- return {
59
- resolveDynamicExpression: resolveDynamicExpression
60
- };
61
- });
5
+ sap.ui.define(["sap/ui/base/BindingParser"], function (BindingParser) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+
10
+ function getObject(oObject, sPath) {
11
+ if (!oObject) {
12
+ return null;
13
+ }
14
+
15
+ var sPathSplit = sPath.split("/");
16
+
17
+ if (sPathSplit.length === 1) {
18
+ return oObject[sPath];
19
+ } else {
20
+ return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
21
+ }
22
+ }
23
+ /**
24
+ * Resolve a dynamic annotation path down to a standard annotation path.
25
+ *
26
+ * @param sAnnotationPath
27
+ * @param oMetaModel
28
+ * @returns {string} The non dynamic version of the annotation path
29
+ */
30
+
31
+
32
+ function resolveDynamicExpression(sAnnotationPath, oMetaModel) {
33
+ if (sAnnotationPath.indexOf("[") !== -1) {
34
+ var firstBracket = sAnnotationPath.indexOf("[");
35
+ var sStableBracket = sAnnotationPath.substr(0, firstBracket);
36
+ var sRest = sAnnotationPath.substr(firstBracket + 1);
37
+ var lastBracket = sRest.indexOf("]");
38
+ var aValue = oMetaModel.getObject(sStableBracket);
39
+ var oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
40
+
41
+ if (Array.isArray(aValue) && oExpression && oExpression.result && oExpression.result.parts && oExpression.result.parts[0] && oExpression.result.parts[0].path) {
42
+ var i;
43
+ var bFound = false;
44
+
45
+ for (i = 0; i < aValue.length && !bFound; i++) {
46
+ var oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
47
+ var bResult = oExpression.result.formatter(oObjectValue);
48
+
49
+ if (bResult) {
50
+ bFound = true;
51
+ }
52
+ }
53
+
54
+ if (bFound) {
55
+ sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
56
+ }
57
+ }
58
+ }
59
+
60
+ return sAnnotationPath;
61
+ }
62
+
63
+ _exports.resolveDynamicExpression = resolveDynamicExpression;
64
+ return _exports;
65
+ }, false);
66
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNBbm5vdGF0aW9uUGF0aEhlbHBlci50cyJdLCJuYW1lcyI6WyJnZXRPYmplY3QiLCJvT2JqZWN0Iiwic1BhdGgiLCJzUGF0aFNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJqb2luIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwic0Fubm90YXRpb25QYXRoIiwib01ldGFNb2RlbCIsImluZGV4T2YiLCJmaXJzdEJyYWNrZXQiLCJzU3RhYmxlQnJhY2tldCIsInN1YnN0ciIsInNSZXN0IiwibGFzdEJyYWNrZXQiLCJhVmFsdWUiLCJvRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJwYXJzZUV4cHJlc3Npb24iLCJBcnJheSIsImlzQXJyYXkiLCJyZXN1bHQiLCJwYXJ0cyIsInBhdGgiLCJpIiwiYkZvdW5kIiwib09iamVjdFZhbHVlIiwiYlJlc3VsdCIsImZvcm1hdHRlciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O0FBQUEsV0FBU0EsU0FBVCxDQUFtQkMsT0FBbkIsRUFBaUNDLEtBQWpDLEVBQWtEO0FBQ2pELFFBQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ2IsYUFBTyxJQUFQO0FBQ0E7O0FBQ0QsUUFBTUUsVUFBVSxHQUFHRCxLQUFLLENBQUNFLEtBQU4sQ0FBWSxHQUFaLENBQW5COztBQUNBLFFBQUlELFVBQVUsQ0FBQ0UsTUFBWCxLQUFzQixDQUExQixFQUE2QjtBQUM1QixhQUFPSixPQUFPLENBQUNDLEtBQUQsQ0FBZDtBQUNBLEtBRkQsTUFFTztBQUNOLGFBQU9GLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDRSxVQUFVLENBQUMsQ0FBRCxDQUFYLENBQVIsRUFBeUJBLFVBQVUsQ0FBQ0csTUFBWCxDQUFrQixDQUFsQixFQUFxQkMsSUFBckIsQ0FBMEIsR0FBMUIsQ0FBekIsQ0FBaEI7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFdBQVNDLHdCQUFULENBQWtDQyxlQUFsQyxFQUF3REMsVUFBeEQsRUFBeUU7QUFDL0UsUUFBSUQsZUFBZSxDQUFDRSxPQUFoQixDQUF3QixHQUF4QixNQUFpQyxDQUFDLENBQXRDLEVBQXlDO0FBQ3hDLFVBQU1DLFlBQVksR0FBR0gsZUFBZSxDQUFDRSxPQUFoQixDQUF3QixHQUF4QixDQUFyQjtBQUNBLFVBQU1FLGNBQWMsR0FBR0osZUFBZSxDQUFDSyxNQUFoQixDQUF1QixDQUF2QixFQUEwQkYsWUFBMUIsQ0FBdkI7QUFDQSxVQUFNRyxLQUFLLEdBQUdOLGVBQWUsQ0FBQ0ssTUFBaEIsQ0FBdUJGLFlBQVksR0FBRyxDQUF0QyxDQUFkO0FBQ0EsVUFBTUksV0FBVyxHQUFHRCxLQUFLLENBQUNKLE9BQU4sQ0FBYyxHQUFkLENBQXBCO0FBQ0EsVUFBTU0sTUFBTSxHQUFHUCxVQUFVLENBQUNWLFNBQVgsQ0FBcUJhLGNBQXJCLENBQWY7QUFDQSxVQUFNSyxXQUFXLEdBQUdDLGFBQWEsQ0FBQ0MsZUFBZCxDQUE4QkwsS0FBSyxDQUFDRCxNQUFOLENBQWEsQ0FBYixFQUFnQkUsV0FBaEIsQ0FBOUIsQ0FBcEI7O0FBQ0EsVUFDQ0ssS0FBSyxDQUFDQyxPQUFOLENBQWNMLE1BQWQsS0FDQUMsV0FEQSxJQUVBQSxXQUFXLENBQUNLLE1BRlosSUFHQUwsV0FBVyxDQUFDSyxNQUFaLENBQW1CQyxLQUhuQixJQUlBTixXQUFXLENBQUNLLE1BQVosQ0FBbUJDLEtBQW5CLENBQXlCLENBQXpCLENBSkEsSUFLQU4sV0FBVyxDQUFDSyxNQUFaLENBQW1CQyxLQUFuQixDQUF5QixDQUF6QixFQUE0QkMsSUFON0IsRUFPRTtBQUNELFlBQUlDLENBQUo7QUFDQSxZQUFJQyxNQUFNLEdBQUcsS0FBYjs7QUFDQSxhQUFLRCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdULE1BQU0sQ0FBQ1osTUFBWCxJQUFxQixDQUFDc0IsTUFBbEMsRUFBMENELENBQUMsRUFBM0MsRUFBK0M7QUFDOUMsY0FBTUUsWUFBWSxHQUFHNUIsU0FBUyxDQUFDaUIsTUFBTSxDQUFDUyxDQUFELENBQVAsRUFBWVIsV0FBVyxDQUFDSyxNQUFaLENBQW1CQyxLQUFuQixDQUF5QixDQUF6QixFQUE0QkMsSUFBeEMsQ0FBOUI7QUFDQSxjQUFNSSxPQUFPLEdBQUdYLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQk8sU0FBbkIsQ0FBNkJGLFlBQTdCLENBQWhCOztBQUNBLGNBQUlDLE9BQUosRUFBYTtBQUNaRixZQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNBO0FBQ0Q7O0FBQ0QsWUFBSUEsTUFBSixFQUFZO0FBQ1hsQixVQUFBQSxlQUFlLEdBQUdELHdCQUF3QixDQUFDSyxjQUFjLElBQUlhLENBQUMsR0FBRyxDQUFSLENBQWQsR0FBMkJYLEtBQUssQ0FBQ0QsTUFBTixDQUFhRSxXQUFXLEdBQUcsQ0FBM0IsQ0FBNUIsRUFBMkROLFVBQTNELENBQTFDO0FBQ0E7QUFDRDtBQUNEOztBQUNELFdBQU9ELGVBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcblxuZnVuY3Rpb24gZ2V0T2JqZWN0KG9PYmplY3Q6IGFueSwgc1BhdGg6IGFueSk6IGFueSB7XG5cdGlmICghb09iamVjdCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IHNQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChzUGF0aFNwbGl0Lmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBvT2JqZWN0W3NQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0T2JqZWN0KG9PYmplY3Rbc1BhdGhTcGxpdFswXV0sIHNQYXRoU3BsaXQuc3BsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0fVxufVxuLyoqXG4gKiBSZXNvbHZlIGEgZHluYW1pYyBhbm5vdGF0aW9uIHBhdGggZG93biB0byBhIHN0YW5kYXJkIGFubm90YXRpb24gcGF0aC5cbiAqXG4gKiBAcGFyYW0gc0Fubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5vbiBkeW5hbWljIHZlcnNpb24gb2YgdGhlIGFubm90YXRpb24gcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uKHNBbm5vdGF0aW9uUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKSAhPT0gLTEpIHtcblx0XHRjb25zdCBmaXJzdEJyYWNrZXQgPSBzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIltcIik7XG5cdFx0Y29uc3Qgc1N0YWJsZUJyYWNrZXQgPSBzQW5ub3RhdGlvblBhdGguc3Vic3RyKDAsIGZpcnN0QnJhY2tldCk7XG5cdFx0Y29uc3Qgc1Jlc3QgPSBzQW5ub3RhdGlvblBhdGguc3Vic3RyKGZpcnN0QnJhY2tldCArIDEpO1xuXHRcdGNvbnN0IGxhc3RCcmFja2V0ID0gc1Jlc3QuaW5kZXhPZihcIl1cIik7XG5cdFx0Y29uc3QgYVZhbHVlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1N0YWJsZUJyYWNrZXQpO1xuXHRcdGNvbnN0IG9FeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5wYXJzZUV4cHJlc3Npb24oc1Jlc3Quc3Vic3RyKDAsIGxhc3RCcmFja2V0KSk7XG5cdFx0aWYgKFxuXHRcdFx0QXJyYXkuaXNBcnJheShhVmFsdWUpICYmXG5cdFx0XHRvRXhwcmVzc2lvbiAmJlxuXHRcdFx0b0V4cHJlc3Npb24ucmVzdWx0ICYmXG5cdFx0XHRvRXhwcmVzc2lvbi5yZXN1bHQucGFydHMgJiZcblx0XHRcdG9FeHByZXNzaW9uLnJlc3VsdC5wYXJ0c1swXSAmJlxuXHRcdFx0b0V4cHJlc3Npb24ucmVzdWx0LnBhcnRzWzBdLnBhdGhcblx0XHQpIHtcblx0XHRcdGxldCBpO1xuXHRcdFx0bGV0IGJGb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGFWYWx1ZS5sZW5ndGggJiYgIWJGb3VuZDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9PYmplY3RWYWx1ZSA9IGdldE9iamVjdChhVmFsdWVbaV0sIG9FeHByZXNzaW9uLnJlc3VsdC5wYXJ0c1swXS5wYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdCA9IG9FeHByZXNzaW9uLnJlc3VsdC5mb3JtYXR0ZXIob09iamVjdFZhbHVlKTtcblx0XHRcdFx0aWYgKGJSZXN1bHQpIHtcblx0XHRcdFx0XHRiRm91bmQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkZvdW5kKSB7XG5cdFx0XHRcdHNBbm5vdGF0aW9uUGF0aCA9IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvbihzU3RhYmxlQnJhY2tldCArIChpIC0gMSkgKyBzUmVzdC5zdWJzdHIobGFzdEJyYWNrZXQgKyAxKSwgb01ldGFNb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG59XG4iXX0=
@@ -0,0 +1,52 @@
1
+ import BindingParser from "sap/ui/base/BindingParser";
2
+
3
+ function getObject(oObject: any, sPath: any): any {
4
+ if (!oObject) {
5
+ return null;
6
+ }
7
+ const sPathSplit = sPath.split("/");
8
+ if (sPathSplit.length === 1) {
9
+ return oObject[sPath];
10
+ } else {
11
+ return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
12
+ }
13
+ }
14
+ /**
15
+ * Resolve a dynamic annotation path down to a standard annotation path.
16
+ *
17
+ * @param sAnnotationPath
18
+ * @param oMetaModel
19
+ * @returns {string} The non dynamic version of the annotation path
20
+ */
21
+ export function resolveDynamicExpression(sAnnotationPath: any, oMetaModel: any) {
22
+ if (sAnnotationPath.indexOf("[") !== -1) {
23
+ const firstBracket = sAnnotationPath.indexOf("[");
24
+ const sStableBracket = sAnnotationPath.substr(0, firstBracket);
25
+ const sRest = sAnnotationPath.substr(firstBracket + 1);
26
+ const lastBracket = sRest.indexOf("]");
27
+ const aValue = oMetaModel.getObject(sStableBracket);
28
+ const oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
29
+ if (
30
+ Array.isArray(aValue) &&
31
+ oExpression &&
32
+ oExpression.result &&
33
+ oExpression.result.parts &&
34
+ oExpression.result.parts[0] &&
35
+ oExpression.result.parts[0].path
36
+ ) {
37
+ let i;
38
+ let bFound = false;
39
+ for (i = 0; i < aValue.length && !bFound; i++) {
40
+ const oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
41
+ const bResult = oExpression.result.formatter(oObjectValue);
42
+ if (bResult) {
43
+ bFound = true;
44
+ }
45
+ }
46
+ if (bFound) {
47
+ sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
48
+ }
49
+ }
50
+ }
51
+ return sAnnotationPath;
52
+ }