@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
@@ -0,0 +1,334 @@
1
+ import FilterOperatorUtil from "sap/ui/mdc/condition/FilterOperatorUtil";
2
+ import Operator from "sap/ui/mdc/condition/Operator";
3
+ import ModelOperator from "sap/ui/model/FilterOperator";
4
+ import ValidateException from "sap/ui/model/ValidateException";
5
+
6
+ const aSupportedOperations = ["DATE", "FROM", "TO", "DATERANGE"];
7
+ const DYNAMIC_DATE_CATEGORY = "DYNAMIC.DATE";
8
+ const FIXED_DATE_CATEGORY = "FIXED.DATE";
9
+ const DYNAMIC_DATE_INT_CATEGORY = "DYNAMIC.DATE.INT";
10
+ const DYNAMIC_DATERANGE_CATEGORY = "DYNAMIC.DATERANGE";
11
+ const DYNAMIC_MONTH_CATEGORY = "DYNAMIC.MONTH";
12
+ const FIXED_WEEK_CATEGORY = "FIXED.WEEK";
13
+ const FIXED_MONTH_CATEGORY = "FIXED.MONTH";
14
+ const FIXED_QUARTER_CATEGORY = "FIXED.QUARTER";
15
+ const FIXED_YEAR_CATEGORY = "FIXED.YEAR";
16
+ const DYNAMIC_WEEK_INT_CATEGORY = "DYNAMIC.WEEK.INT";
17
+ const DYNAMIC_MONTH_INT_CATEGORY = "DYNAMIC.MONTH.INT";
18
+ const DYNAMIC_QUARTER_INT_CATEGORY = "DYNAMIC.QUARTER.INT";
19
+ const DYNAMIC_YEAR_INT_CATEGORY = "DYNAMIC.YEAR.INT";
20
+ const mSemanticDateOperations: any = {
21
+ "DATE": {
22
+ "key": "DATE",
23
+ "category": DYNAMIC_DATE_CATEGORY
24
+ },
25
+ "FROM": {
26
+ "key": "FROM",
27
+ "category": DYNAMIC_DATE_CATEGORY
28
+ },
29
+ "TO": {
30
+ "key": "TO",
31
+ "category": DYNAMIC_DATE_CATEGORY
32
+ },
33
+ "DATERANGE": {
34
+ "key": "DATERANGE",
35
+ "category": DYNAMIC_DATERANGE_CATEGORY
36
+ },
37
+ "SPECIFICMONTH": {
38
+ "key": "SPECIFICMONTH",
39
+ "category": DYNAMIC_MONTH_CATEGORY
40
+ },
41
+ "TODAY": {
42
+ "key": "TODAY",
43
+ "category": FIXED_DATE_CATEGORY
44
+ },
45
+ "TODAYFROMTO": {
46
+ "key": "TODAYFROMTO",
47
+ "category": DYNAMIC_DATE_INT_CATEGORY
48
+ },
49
+ "YESTERDAY": {
50
+ "key": "YESTERDAY",
51
+ "category": FIXED_DATE_CATEGORY
52
+ },
53
+ "TOMORROW": {
54
+ "key": "TOMORROW",
55
+ "category": FIXED_DATE_CATEGORY
56
+ },
57
+ "LASTDAYS": {
58
+ "key": "LASTDAYS",
59
+ "category": DYNAMIC_DATE_INT_CATEGORY
60
+ },
61
+ "NEXTDAYS": {
62
+ "key": "NEXTDAYS",
63
+ "category": DYNAMIC_DATE_INT_CATEGORY
64
+ },
65
+ "THISWEEK": {
66
+ "key": "THISWEEK",
67
+ "category": FIXED_WEEK_CATEGORY
68
+ },
69
+ "LASTWEEK": {
70
+ "key": "LASTWEEK",
71
+ "category": FIXED_WEEK_CATEGORY
72
+ },
73
+ "LASTWEEKS": {
74
+ "key": "LASTWEEKS",
75
+ "category": DYNAMIC_WEEK_INT_CATEGORY
76
+ },
77
+ "NEXTWEEK": {
78
+ "key": "NEXTWEEK",
79
+ "category": FIXED_WEEK_CATEGORY
80
+ },
81
+ "NEXTWEEKS": {
82
+ "key": "NEXTWEEKS",
83
+ "category": DYNAMIC_WEEK_INT_CATEGORY
84
+ },
85
+ "THISMONTH": {
86
+ "key": "THISMONTH",
87
+ "category": FIXED_MONTH_CATEGORY
88
+ },
89
+ "LASTMONTH": {
90
+ "key": "LASTMONTH",
91
+ "category": FIXED_MONTH_CATEGORY
92
+ },
93
+ "LASTMONTHS": {
94
+ "key": "LASTMONTHS",
95
+ "category": DYNAMIC_MONTH_INT_CATEGORY
96
+ },
97
+ "NEXTMONTH": {
98
+ "key": "NEXTMONTH",
99
+ "category": FIXED_MONTH_CATEGORY
100
+ },
101
+ "NEXTMONTHS": {
102
+ "key": "NEXTMONTHS",
103
+ "category": DYNAMIC_MONTH_INT_CATEGORY
104
+ },
105
+ "THISQUARTER": {
106
+ "key": "THISQUARTER",
107
+ "category": FIXED_QUARTER_CATEGORY
108
+ },
109
+ "LASTQUARTER": {
110
+ "key": "LASTQUARTER",
111
+ "category": FIXED_QUARTER_CATEGORY
112
+ },
113
+ "LASTQUARTERS": {
114
+ "key": "LASTQUARTERS",
115
+ "category": DYNAMIC_QUARTER_INT_CATEGORY
116
+ },
117
+ "NEXTQUARTER": {
118
+ "key": "NEXTQUARTER",
119
+ "category": FIXED_QUARTER_CATEGORY
120
+ },
121
+ "NEXTQUARTERS": {
122
+ "key": "NEXTQUARTERS",
123
+ "category": DYNAMIC_QUARTER_INT_CATEGORY
124
+ },
125
+ "QUARTER1": {
126
+ "key": "QUARTER1",
127
+ "category": FIXED_QUARTER_CATEGORY
128
+ },
129
+ "QUARTER2": {
130
+ "key": "QUARTER2",
131
+ "category": FIXED_QUARTER_CATEGORY
132
+ },
133
+ "QUARTER3": {
134
+ "key": "QUARTER3",
135
+ "category": FIXED_QUARTER_CATEGORY
136
+ },
137
+ "QUARTER4": {
138
+ "key": "QUARTER4",
139
+ "category": FIXED_QUARTER_CATEGORY
140
+ },
141
+ "THISYEAR": {
142
+ "key": "THISYEAR",
143
+ "category": FIXED_YEAR_CATEGORY
144
+ },
145
+ "LASTYEAR": {
146
+ "key": "LASTYEAR",
147
+ "category": FIXED_YEAR_CATEGORY
148
+ },
149
+ "LASTYEARS": {
150
+ "key": "LASTYEARS",
151
+ "category": DYNAMIC_YEAR_INT_CATEGORY
152
+ },
153
+ "NEXTYEAR": {
154
+ "key": "NEXTYEAR",
155
+ "category": FIXED_YEAR_CATEGORY
156
+ },
157
+ "NEXTYEARS": {
158
+ "key": "NEXTYEARS",
159
+ "category": DYNAMIC_YEAR_INT_CATEGORY
160
+ },
161
+ "YEARTODATE": {
162
+ "key": "YEARTODATE",
163
+ "category": FIXED_YEAR_CATEGORY
164
+ },
165
+ "DATETOYEAR": {
166
+ "key": "DATETOYEAR",
167
+ "category": FIXED_YEAR_CATEGORY
168
+ }
169
+ };
170
+
171
+ function _getDateRangeOperator(oResourceBundle: any) {
172
+ const sDateRange = oResourceBundle && oResourceBundle.getText("C_DATE_RANGE");
173
+ return new Operator({
174
+ name: "DATERANGE",
175
+ filterOperator: ModelOperator.BT,
176
+ tokenParse: "^#tokenText# \\(([^!].*) \\- (.+)\\)$",
177
+ tokenFormat: "#tokenText# ({0} - {1})",
178
+ valueTypes: [(Operator as any).ValueType.Self, (Operator as any).ValueType.Self],
179
+ longText: sDateRange,
180
+ tokenText: sDateRange,
181
+ additionalInfo: "",
182
+ validate: function(aValues: any, oType: any) {
183
+ if (aValues.length < 2) {
184
+ throw new ValidateException("Date Range must have two values");
185
+ } else {
186
+ const fromDate = new Date(aValues[0]);
187
+ const toDate = new Date(aValues[1]);
188
+ if (fromDate.getTime() > toDate.getTime()) {
189
+ throw new ValidateException("From Date Should Be Less Than To Date");
190
+ }
191
+ }
192
+ Operator.prototype.validate.apply(this, [aValues, oType]);
193
+ }
194
+ });
195
+ }
196
+
197
+ function _getDateOperator(oResourceBundle: any) {
198
+ const sDate = oResourceBundle && oResourceBundle.getText("C_DATE");
199
+ return new Operator({
200
+ name: "DATE",
201
+ filterOperator: ModelOperator.EQ,
202
+ tokenParse: "^#tokenText# \\((.+)\\)$",
203
+ tokenFormat: "#tokenText# ({0})",
204
+ valueTypes: [(Operator as any).ValueType.Self],
205
+ longText: sDate,
206
+ tokenText: sDate,
207
+ additionalInfo: ""
208
+ });
209
+ }
210
+
211
+ function _getFromOperator(oResourceBundle: any) {
212
+ const sFrom = oResourceBundle && oResourceBundle.getText("C_FROM");
213
+ return new Operator({
214
+ name: "FROM",
215
+ filterOperator: ModelOperator.GE,
216
+ tokenParse: "^#tokenText# \\((.+)\\)$",
217
+ tokenFormat: "#tokenText# ({0})",
218
+ valueTypes: [(Operator as any).ValueType.Self],
219
+ longText: sFrom,
220
+ tokenText: sFrom,
221
+ additionalInfo: ""
222
+ });
223
+ }
224
+
225
+ function _getToOperator(oResourceBundle: any) {
226
+ const sTo = oResourceBundle && oResourceBundle.getText("C_TO");
227
+ return new Operator({
228
+ name: "TO",
229
+ filterOperator: ModelOperator.LE,
230
+ tokenParse: "^#tokenText# \\((.+)\\)$",
231
+ tokenFormat: "#tokenText# ({0})",
232
+ valueTypes: [(Operator as any).ValueType.Self],
233
+ longText: sTo,
234
+ tokenText: sTo,
235
+ additionalInfo: ""
236
+ });
237
+ }
238
+
239
+ function _filterOperation(oOperation: any, aOperatorConfiguration: any) {
240
+ if (!aOperatorConfiguration) {
241
+ return true;
242
+ }
243
+ aOperatorConfiguration = Array.isArray(aOperatorConfiguration) ? aOperatorConfiguration : [aOperatorConfiguration];
244
+ let bResult;
245
+
246
+ aOperatorConfiguration.some(function(oOperatorConfiguration: any) {
247
+ let j;
248
+ if (!oOperatorConfiguration.path) {
249
+ return false;
250
+ }
251
+
252
+ const sValue = oOperation[oOperatorConfiguration.path];
253
+ const bExclude = oOperatorConfiguration.exclude || false;
254
+ let aOperatorValues;
255
+
256
+ if (oOperatorConfiguration.contains && sValue) {
257
+ aOperatorValues = oOperatorConfiguration.contains.split(",");
258
+ bResult = bExclude;
259
+ for (j = 0; j < aOperatorValues.length; j++) {
260
+ if (bExclude && sValue.indexOf(aOperatorValues[j]) > -1) {
261
+ bResult = false;
262
+ return true;
263
+ } else if (!bExclude && sValue.indexOf(aOperatorValues[j]) > -1) {
264
+ bResult = true;
265
+ return true;
266
+ }
267
+ }
268
+ }
269
+
270
+ if (oOperatorConfiguration.equals && sValue) {
271
+ aOperatorValues = oOperatorConfiguration.equals.split(",");
272
+ bResult = bExclude;
273
+ for (j = 0; j < aOperatorValues.length; j++) {
274
+ if (bExclude && sValue === aOperatorValues[j]) {
275
+ bResult = false;
276
+ return true;
277
+ } else if (!bExclude && sValue === aOperatorValues[j]) {
278
+ bResult = true;
279
+ return true;
280
+ }
281
+ }
282
+ }
283
+
284
+ return false;
285
+ });
286
+ return bResult;
287
+ }
288
+ const SemanticDateOperators = {
289
+ // Extending operators for Sematic Date Control
290
+ addSemanticDateOperators: function() {
291
+ const oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
292
+ FilterOperatorUtil.addOperator(_getDateRangeOperator(oResourceBundle));
293
+ FilterOperatorUtil.addOperator(_getDateOperator(oResourceBundle));
294
+ FilterOperatorUtil.addOperator(_getFromOperator(oResourceBundle));
295
+ FilterOperatorUtil.addOperator(_getToOperator(oResourceBundle));
296
+ },
297
+ getSupportedOperations: function() {
298
+ return aSupportedOperations;
299
+ },
300
+ getSemanticDateOperations: function() {
301
+ return Object.keys(mSemanticDateOperations);
302
+ },
303
+ // TODO: Would need to check with MDC for removeOperator method
304
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
305
+ removeSemanticDateOperators: function() {},
306
+ // To filter operators based on manifest aOperatorConfiguration settings
307
+ getFilterOperations: function(aOperatorConfiguration: any) {
308
+ const aOperations = [];
309
+ for (const n in mSemanticDateOperations) {
310
+ const oOperation = mSemanticDateOperations[n];
311
+ if (_filterOperation(oOperation, aOperatorConfiguration)) {
312
+ aOperations.push(oOperation);
313
+ }
314
+ }
315
+ return aOperations.map(function(oOperation: any) {
316
+ return oOperation.key;
317
+ });
318
+ },
319
+ hasSemanticDateOperations: function(oConditions: any) {
320
+ const aSemanticDateOps = this.getSemanticDateOperations();
321
+ for (const n in oConditions) {
322
+ const aFilterCondtion = oConditions[n];
323
+ const oSemanticOperator = aFilterCondtion.find(function(oCondition: any) {
324
+ return aSemanticDateOps.indexOf(oCondition.operator) > -1;
325
+ });
326
+ if (oSemanticOperator) {
327
+ return false;
328
+ }
329
+ }
330
+ return true;
331
+ }
332
+ };
333
+
334
+ export default SemanticDateOperators;
@@ -1,77 +1,76 @@
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/base/Log"], function(Log) {
6
- "use strict";
7
- var SemanticKeyHelper = {
8
- getSemanticKeys: function(oMetaModel, sEntitySetName) {
9
- return oMetaModel.getObject("/" + sEntitySetName + "/@com.sap.vocabularies.Common.v1.SemanticKey");
10
- },
11
- getSemanticObjectInformation: function(oMetaModel, sEntitySetName) {
12
- var oSemanticObject = oMetaModel.getObject("/" + sEntitySetName + "/@com.sap.vocabularies.Common.v1.SemanticObject");
13
- var aSemanticKeys = this.getSemanticKeys(oMetaModel, sEntitySetName);
14
- return {
15
- semanticObject: oSemanticObject,
16
- semanticKeys: aSemanticKeys
17
- };
18
- },
19
- getSemanticPath: function(oContext, bStrict) {
20
- var oMetaModel = oContext.getModel().getMetaModel(),
21
- sEntitySetName = oMetaModel.getMetaContext(oContext.getPath()).getObject("@sapui.name"),
22
- oSemanticObjectInformation = this.getSemanticObjectInformation(oMetaModel, sEntitySetName),
23
- sTechnicalPath,
24
- sSemanticPath;
5
+ sap.ui.define(["sap/base/Log"], function (Log) {
6
+ "use strict";
25
7
 
26
- if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding") && oContext.isRelative()) {
27
- sTechnicalPath = oContext.getHeaderContext().getPath();
28
- } else {
29
- sTechnicalPath = oContext.getPath();
30
- }
8
+ var SemanticKeyHelper = {
9
+ getSemanticKeys: function (oMetaModel, sEntitySetName) {
10
+ return oMetaModel.getObject("/".concat(sEntitySetName, "/@com.sap.vocabularies.Common.v1.SemanticKey"));
11
+ },
12
+ getSemanticObjectInformation: function (oMetaModel, sEntitySetName) {
13
+ var oSemanticObject = oMetaModel.getObject("/".concat(sEntitySetName, "/@com.sap.vocabularies.Common.v1.SemanticObject"));
14
+ var aSemanticKeys = this.getSemanticKeys(oMetaModel, sEntitySetName);
15
+ return {
16
+ semanticObject: oSemanticObject,
17
+ semanticKeys: aSemanticKeys
18
+ };
19
+ },
20
+ getSemanticPath: function (oContext) {
21
+ var bStrict = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
22
+ var oMetaModel = oContext.getModel().getMetaModel(),
23
+ sEntitySetName = oMetaModel.getMetaContext(oContext.getPath()).getObject("@sapui.name"),
24
+ oSemanticObjectInformation = this.getSemanticObjectInformation(oMetaModel, sEntitySetName);
25
+ var sTechnicalPath, sSemanticPath;
31
26
 
32
- if (this._isPathForSemantic(sTechnicalPath) && oSemanticObjectInformation.semanticKeys) {
33
- var aSemanticKeys = oSemanticObjectInformation.semanticKeys,
34
- oEntityType = oMetaModel.getObject("/" + oMetaModel.getObject("/" + sEntitySetName).$Type);
27
+ if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding") && oContext.isRelative()) {
28
+ sTechnicalPath = oContext.getHeaderContext().getPath();
29
+ } else {
30
+ sTechnicalPath = oContext.getPath();
31
+ }
35
32
 
36
- try {
37
- var sSemanticKeysPart = aSemanticKeys
38
- .map(function(oSemanticKey) {
39
- var sPropertyPath = oSemanticKey.$PropertyPath,
40
- sKeyValue = oContext.getProperty(sPropertyPath);
33
+ if (this._isPathForSemantic(sTechnicalPath) && oSemanticObjectInformation.semanticKeys) {
34
+ var aSemanticKeys = oSemanticObjectInformation.semanticKeys,
35
+ oEntityType = oMetaModel.getObject("/" + oMetaModel.getObject("/" + sEntitySetName).$Type);
41
36
 
42
- if (sKeyValue === undefined || sKeyValue === null) {
43
- throw new Error("Couldn't resolve semantic key value for " + sPropertyPath);
44
- } else {
45
- if (oEntityType[sPropertyPath].$Type === "Edm.String") {
46
- sKeyValue = "'" + encodeURIComponent(sKeyValue) + "'";
47
- }
48
- if (aSemanticKeys.length > 1) {
49
- // Several semantic keys --> path should be entitySet(key1=value1, key2=value2, ...)
50
- // Otherwise we keep entitySet(keyValue)
51
- sKeyValue = sPropertyPath + "=" + sKeyValue;
52
- }
53
- return sKeyValue;
54
- }
55
- })
56
- .join(",");
37
+ try {
38
+ var sSemanticKeysPart = aSemanticKeys.map(function (oSemanticKey) {
39
+ var sPropertyPath = oSemanticKey.$PropertyPath;
40
+ var sKeyValue = oContext.getProperty(sPropertyPath);
57
41
 
58
- sSemanticPath = "/" + sEntitySetName + "(" + sSemanticKeysPart + ")";
59
- } catch (e) {
60
- Log.info(e);
61
- }
62
- }
42
+ if (sKeyValue === undefined || sKeyValue === null) {
43
+ throw new Error("Couldn't resolve semantic key value for " + sPropertyPath);
44
+ } else {
45
+ if (oEntityType[sPropertyPath].$Type === "Edm.String") {
46
+ sKeyValue = "'".concat(encodeURIComponent(sKeyValue), "'");
47
+ }
63
48
 
64
- return bStrict ? sSemanticPath : sSemanticPath || sTechnicalPath;
65
- },
49
+ if (aSemanticKeys.length > 1) {
50
+ // Several semantic keys --> path should be entitySet(key1=value1, key2=value2, ...)
51
+ // Otherwise we keep entitySet(keyValue)
52
+ sKeyValue = "".concat(sPropertyPath, "=").concat(sKeyValue);
53
+ }
66
54
 
67
- // ==============================
68
- // INTERNAL METHODS
69
- // ==============================
55
+ return sKeyValue;
56
+ }
57
+ }).join(",");
58
+ sSemanticPath = "/".concat(sEntitySetName, "(").concat(sSemanticKeysPart, ")");
59
+ } catch (e) {
60
+ Log.info(e);
61
+ }
62
+ }
70
63
 
71
- _isPathForSemantic: function(sPath) {
72
- // Only path on root objects allow semantic keys, i.e. sPath = xxx(yyy)
73
- return /^[^\(\)]+\([^\(\)]+\)$/.test(sPath);
74
- }
75
- };
76
- return SemanticKeyHelper;
77
- });
64
+ return bStrict ? sSemanticPath : sSemanticPath || sTechnicalPath;
65
+ },
66
+ // ==============================
67
+ // INTERNAL METHODS
68
+ // ==============================
69
+ _isPathForSemantic: function (sPath) {
70
+ // Only path on root objects allow semantic keys, i.e. sPath = xxx(yyy)
71
+ return /^[^\(\)]+\([^\(\)]+\)$/.test(sPath);
72
+ }
73
+ };
74
+ return SemanticKeyHelper;
75
+ }, false);
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNlbWFudGljS2V5SGVscGVyLnRzIl0sIm5hbWVzIjpbIlNlbWFudGljS2V5SGVscGVyIiwiZ2V0U2VtYW50aWNLZXlzIiwib01ldGFNb2RlbCIsInNFbnRpdHlTZXROYW1lIiwiZ2V0T2JqZWN0IiwiZ2V0U2VtYW50aWNPYmplY3RJbmZvcm1hdGlvbiIsIm9TZW1hbnRpY09iamVjdCIsImFTZW1hbnRpY0tleXMiLCJzZW1hbnRpY09iamVjdCIsInNlbWFudGljS2V5cyIsImdldFNlbWFudGljUGF0aCIsIm9Db250ZXh0IiwiYlN0cmljdCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YUNvbnRleHQiLCJnZXRQYXRoIiwib1NlbWFudGljT2JqZWN0SW5mb3JtYXRpb24iLCJzVGVjaG5pY2FsUGF0aCIsInNTZW1hbnRpY1BhdGgiLCJpc0EiLCJpc1JlbGF0aXZlIiwiZ2V0SGVhZGVyQ29udGV4dCIsIl9pc1BhdGhGb3JTZW1hbnRpYyIsIm9FbnRpdHlUeXBlIiwiJFR5cGUiLCJzU2VtYW50aWNLZXlzUGFydCIsIm1hcCIsIm9TZW1hbnRpY0tleSIsInNQcm9wZXJ0eVBhdGgiLCIkUHJvcGVydHlQYXRoIiwic0tleVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJFcnJvciIsImVuY29kZVVSSUNvbXBvbmVudCIsImxlbmd0aCIsImpvaW4iLCJlIiwiTG9nIiwiaW5mbyIsInNQYXRoIiwidGVzdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUNBLE1BQU1BLGlCQUFpQixHQUFHO0FBQ3pCQyxJQUFBQSxlQUFlLEVBQUUsVUFBU0MsVUFBVCxFQUFxQ0MsY0FBckMsRUFBNkQ7QUFDN0UsYUFBT0QsVUFBVSxDQUFDRSxTQUFYLFlBQXlCRCxjQUF6QixrREFBUDtBQUNBLEtBSHdCO0FBSXpCRSxJQUFBQSw0QkFBNEIsRUFBRSxVQUFTSCxVQUFULEVBQXFDQyxjQUFyQyxFQUE2RDtBQUMxRixVQUFNRyxlQUFlLEdBQUdK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QyxJQUF6QixDQUE4QkQsS0FBOUIsQ0FBUDtBQUNBO0FBbEV3QixHQUExQjtTQXFFZXpDLGlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5cbmNvbnN0IFNlbWFudGljS2V5SGVscGVyID0ge1xuXHRnZXRTZW1hbnRpY0tleXM6IGZ1bmN0aW9uKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5U2V0TmFtZTogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0TmFtZX0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWApO1xuXHR9LFxuXHRnZXRTZW1hbnRpY09iamVjdEluZm9ybWF0aW9uOiBmdW5jdGlvbihvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVNldE5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0TmFtZX0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdGApO1xuXHRcdGNvbnN0IGFTZW1hbnRpY0tleXMgPSB0aGlzLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzRW50aXR5U2V0TmFtZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHRzZW1hbnRpY0tleXM6IGFTZW1hbnRpY0tleXNcblx0XHR9O1xuXHR9LFxuXHRnZXRTZW1hbnRpY1BhdGg6IGZ1bmN0aW9uKG9Db250ZXh0OiBhbnksIGJTdHJpY3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c0VudGl0eVNldE5hbWUgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG9Db250ZXh0LmdldFBhdGgoKSkuZ2V0T2JqZWN0KFwiQHNhcHVpLm5hbWVcIiksXG5cdFx0XHRvU2VtYW50aWNPYmplY3RJbmZvcm1hdGlvbiA9IHRoaXMuZ2V0U2VtYW50aWNPYmplY3RJbmZvcm1hdGlvbihvTWV0YU1vZGVsLCBzRW50aXR5U2V0TmFtZSk7XG5cdFx0bGV0IHNUZWNobmljYWxQYXRoLCBzU2VtYW50aWNQYXRoO1xuXG5cdFx0aWYgKG9Db250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpICYmIG9Db250ZXh0LmlzUmVsYXRpdmUoKSkge1xuXHRcdFx0c1RlY2huaWNhbFBhdGggPSBvQ29udGV4dC5nZXRIZWFkZXJDb250ZXh0KCkuZ2V0UGF0aCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGVjaG5pY2FsUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5faXNQYXRoRm9yU2VtYW50aWMoc1RlY2huaWNhbFBhdGgpICYmIG9TZW1hbnRpY09iamVjdEluZm9ybWF0aW9uLnNlbWFudGljS2V5cykge1xuXHRcdFx0Y29uc3QgYVNlbWFudGljS2V5cyA9IG9TZW1hbnRpY09iamVjdEluZm9ybWF0aW9uLnNlbWFudGljS2V5cyxcblx0XHRcdFx0b0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIiArIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiICsgc0VudGl0eVNldE5hbWUpLiRUeXBlKTtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljS2V5c1BhcnQgPSBhU2VtYW50aWNLZXlzXG5cdFx0XHRcdFx0Lm1hcChmdW5jdGlvbihvU2VtYW50aWNLZXk6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IG9TZW1hbnRpY0tleS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdFx0bGV0IHNLZXlWYWx1ZSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQcm9wZXJ0eVBhdGgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoc0tleVZhbHVlID09PSB1bmRlZmluZWQgfHwgc0tleVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IHJlc29sdmUgc2VtYW50aWMga2V5IHZhbHVlIGZvciBcIiArIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9FbnRpdHlUeXBlW3NQcm9wZXJ0eVBhdGhdLiRUeXBlID09PSBcIkVkbS5TdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdHNLZXlWYWx1ZSA9IGAnJHtlbmNvZGVVUklDb21wb25lbnQoc0tleVZhbHVlKX0nYDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoYVNlbWFudGljS2V5cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gU2V2ZXJhbCBzZW1hbnRpYyBrZXlzIC0tPiBwYXRoIHNob3VsZCBiZSBlbnRpdHlTZXQoa2V5MT12YWx1ZTEsIGtleTI9dmFsdWUyLCAuLi4pXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtlZXAgZW50aXR5U2V0KGtleVZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdHNLZXlWYWx1ZSA9IGAke3NQcm9wZXJ0eVBhdGh9PSR7c0tleVZhbHVlfWA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNLZXlWYWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5qb2luKFwiLFwiKTtcblxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gYC8ke3NFbnRpdHlTZXROYW1lfSgke3NTZW1hbnRpY0tleXNQYXJ0fSlgO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYlN0cmljdCA/IHNTZW1hbnRpY1BhdGggOiBzU2VtYW50aWNQYXRoIHx8IHNUZWNobmljYWxQYXRoO1xuXHR9LFxuXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHQvLyBJTlRFUk5BTCBNRVRIT0RTXG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cdF9pc1BhdGhGb3JTZW1hbnRpYzogZnVuY3Rpb24oc1BhdGg6IGFueSkge1xuXHRcdC8vIE9ubHkgcGF0aCBvbiByb290IG9iamVjdHMgYWxsb3cgc2VtYW50aWMga2V5cywgaS5lLiBzUGF0aCA9IHh4eCh5eXkpXG5cdFx0cmV0dXJuIC9eW15cXChcXCldK1xcKFteXFwoXFwpXStcXCkkLy50ZXN0KHNQYXRoKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VtYW50aWNLZXlIZWxwZXI7XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import Log from "sap/base/Log";
2
+ import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
3
+
4
+ const SemanticKeyHelper = {
5
+ getSemanticKeys: function(oMetaModel: ODataMetaModel, sEntitySetName: string) {
6
+ return oMetaModel.getObject(`/${sEntitySetName}/@com.sap.vocabularies.Common.v1.SemanticKey`);
7
+ },
8
+ getSemanticObjectInformation: function(oMetaModel: ODataMetaModel, sEntitySetName: string) {
9
+ const oSemanticObject = oMetaModel.getObject(`/${sEntitySetName}/@com.sap.vocabularies.Common.v1.SemanticObject`);
10
+ const aSemanticKeys = this.getSemanticKeys(oMetaModel, sEntitySetName);
11
+ return {
12
+ semanticObject: oSemanticObject,
13
+ semanticKeys: aSemanticKeys
14
+ };
15
+ },
16
+ getSemanticPath: function(oContext: any, bStrict: boolean = false) {
17
+ const oMetaModel = oContext.getModel().getMetaModel(),
18
+ sEntitySetName = oMetaModel.getMetaContext(oContext.getPath()).getObject("@sapui.name"),
19
+ oSemanticObjectInformation = this.getSemanticObjectInformation(oMetaModel, sEntitySetName);
20
+ let sTechnicalPath, sSemanticPath;
21
+
22
+ if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding") && oContext.isRelative()) {
23
+ sTechnicalPath = oContext.getHeaderContext().getPath();
24
+ } else {
25
+ sTechnicalPath = oContext.getPath();
26
+ }
27
+
28
+ if (this._isPathForSemantic(sTechnicalPath) && oSemanticObjectInformation.semanticKeys) {
29
+ const aSemanticKeys = oSemanticObjectInformation.semanticKeys,
30
+ oEntityType = oMetaModel.getObject("/" + oMetaModel.getObject("/" + sEntitySetName).$Type);
31
+
32
+ try {
33
+ const sSemanticKeysPart = aSemanticKeys
34
+ .map(function(oSemanticKey: any) {
35
+ const sPropertyPath = oSemanticKey.$PropertyPath;
36
+ let sKeyValue = oContext.getProperty(sPropertyPath);
37
+
38
+ if (sKeyValue === undefined || sKeyValue === null) {
39
+ throw new Error("Couldn't resolve semantic key value for " + sPropertyPath);
40
+ } else {
41
+ if (oEntityType[sPropertyPath].$Type === "Edm.String") {
42
+ sKeyValue = `'${encodeURIComponent(sKeyValue)}'`;
43
+ }
44
+ if (aSemanticKeys.length > 1) {
45
+ // Several semantic keys --> path should be entitySet(key1=value1, key2=value2, ...)
46
+ // Otherwise we keep entitySet(keyValue)
47
+ sKeyValue = `${sPropertyPath}=${sKeyValue}`;
48
+ }
49
+ return sKeyValue;
50
+ }
51
+ })
52
+ .join(",");
53
+
54
+ sSemanticPath = `/${sEntitySetName}(${sSemanticKeysPart})`;
55
+ } catch (e) {
56
+ Log.info(e);
57
+ }
58
+ }
59
+
60
+ return bStrict ? sSemanticPath : sSemanticPath || sTechnicalPath;
61
+ },
62
+
63
+ // ==============================
64
+ // INTERNAL METHODS
65
+ // ==============================
66
+
67
+ _isPathForSemantic: function(sPath: any) {
68
+ // Only path on root objects allow semantic keys, i.e. sPath = xxx(yyy)
69
+ return /^[^\(\)]+\([^\(\)]+\)$/.test(sPath);
70
+ }
71
+ };
72
+
73
+ export default SemanticKeyHelper;