@sapui5/sap.fe.core 1.98.0 → 1.99.2

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 (231) hide show
  1. package/package.json +3 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +3 -2
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -164
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +64 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +561 -608
  27. package/src/sap/fe/core/actions/draft.ts +595 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1215
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +170 -392
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +52 -47
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. package/ui5.yaml +0 -3
@@ -0,0 +1,330 @@
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
+ };
166
+
167
+ function _getDateRangeOperator(oResourceBundle: any) {
168
+ const sDateRange = oResourceBundle && oResourceBundle.getText("C_DATE_RANGE");
169
+ return new Operator({
170
+ name: "DATERANGE",
171
+ filterOperator: ModelOperator.BT,
172
+ tokenParse: "^#tokenText# \\(([^!].*) \\- (.+)\\)$",
173
+ tokenFormat: "#tokenText# ({0} - {1})",
174
+ valueTypes: [(Operator as any).ValueType.Self, (Operator as any).ValueType.Self],
175
+ longText: sDateRange,
176
+ tokenText: sDateRange,
177
+ additionalInfo: "",
178
+ validate: function(aValues: any, oType: any) {
179
+ if (aValues.length < 2) {
180
+ throw new ValidateException("Date Range must have two values");
181
+ } else {
182
+ const fromDate = new Date(aValues[0]);
183
+ const toDate = new Date(aValues[1]);
184
+ if (fromDate.getTime() > toDate.getTime()) {
185
+ throw new ValidateException("From Date Should Be Less Than To Date");
186
+ }
187
+ }
188
+ Operator.prototype.validate.apply(this, [aValues, oType]);
189
+ }
190
+ });
191
+ }
192
+
193
+ function _getDateOperator(oResourceBundle: any) {
194
+ const sDate = oResourceBundle && oResourceBundle.getText("C_DATE");
195
+ return new Operator({
196
+ name: "DATE",
197
+ filterOperator: ModelOperator.EQ,
198
+ tokenParse: "^#tokenText# \\((.+)\\)$",
199
+ tokenFormat: "#tokenText# ({0})",
200
+ valueTypes: [(Operator as any).ValueType.Self],
201
+ longText: sDate,
202
+ tokenText: sDate,
203
+ additionalInfo: ""
204
+ });
205
+ }
206
+
207
+ function _getFromOperator(oResourceBundle: any) {
208
+ const sFrom = oResourceBundle && oResourceBundle.getText("C_FROM");
209
+ return new Operator({
210
+ name: "FROM",
211
+ filterOperator: ModelOperator.GE,
212
+ tokenParse: "^#tokenText# \\((.+)\\)$",
213
+ tokenFormat: "#tokenText# ({0})",
214
+ valueTypes: [(Operator as any).ValueType.Self],
215
+ longText: sFrom,
216
+ tokenText: sFrom,
217
+ additionalInfo: ""
218
+ });
219
+ }
220
+
221
+ function _getToOperator(oResourceBundle: any) {
222
+ const sTo = oResourceBundle && oResourceBundle.getText("C_TO");
223
+ return new Operator({
224
+ name: "TO",
225
+ filterOperator: ModelOperator.LE,
226
+ tokenParse: "^#tokenText# \\((.+)\\)$",
227
+ tokenFormat: "#tokenText# ({0})",
228
+ valueTypes: [(Operator as any).ValueType.Self],
229
+ longText: sTo,
230
+ tokenText: sTo,
231
+ additionalInfo: ""
232
+ });
233
+ }
234
+
235
+ function _filterOperation(oOperation: any, aOperatorConfiguration: any) {
236
+ if (!aOperatorConfiguration) {
237
+ return true;
238
+ }
239
+ aOperatorConfiguration = Array.isArray(aOperatorConfiguration) ? aOperatorConfiguration : [aOperatorConfiguration];
240
+ let bResult;
241
+
242
+ aOperatorConfiguration.some(function(oOperatorConfiguration: any) {
243
+ let j;
244
+ if (!oOperatorConfiguration.path) {
245
+ return false;
246
+ }
247
+
248
+ const sValue = oOperation[oOperatorConfiguration.path];
249
+ const bExclude = oOperatorConfiguration.exclude || false;
250
+ let aOperatorValues;
251
+
252
+ if (oOperatorConfiguration.contains && sValue) {
253
+ aOperatorValues = oOperatorConfiguration.contains.split(",");
254
+ bResult = bExclude;
255
+ for (j = 0; j < aOperatorValues.length; j++) {
256
+ if (bExclude && sValue.indexOf(aOperatorValues[j]) > -1) {
257
+ bResult = false;
258
+ return true;
259
+ } else if (!bExclude && sValue.indexOf(aOperatorValues[j]) > -1) {
260
+ bResult = true;
261
+ return true;
262
+ }
263
+ }
264
+ }
265
+
266
+ if (oOperatorConfiguration.equals && sValue) {
267
+ aOperatorValues = oOperatorConfiguration.equals.split(",");
268
+ bResult = bExclude;
269
+ for (j = 0; j < aOperatorValues.length; j++) {
270
+ if (bExclude && sValue === aOperatorValues[j]) {
271
+ bResult = false;
272
+ return true;
273
+ } else if (!bExclude && sValue === aOperatorValues[j]) {
274
+ bResult = true;
275
+ return true;
276
+ }
277
+ }
278
+ }
279
+
280
+ return false;
281
+ });
282
+ return bResult;
283
+ }
284
+ const SemanticDateOperators = {
285
+ // Extending operators for Sematic Date Control
286
+ addSemanticDateOperators: function() {
287
+ const oResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
288
+ FilterOperatorUtil.addOperator(_getDateRangeOperator(oResourceBundle));
289
+ FilterOperatorUtil.addOperator(_getDateOperator(oResourceBundle));
290
+ FilterOperatorUtil.addOperator(_getFromOperator(oResourceBundle));
291
+ FilterOperatorUtil.addOperator(_getToOperator(oResourceBundle));
292
+ },
293
+ getSupportedOperations: function() {
294
+ return aSupportedOperations;
295
+ },
296
+ getSemanticDateOperations: function() {
297
+ return Object.keys(mSemanticDateOperations);
298
+ },
299
+ // TODO: Would need to check with MDC for removeOperator method
300
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
301
+ removeSemanticDateOperators: function() {},
302
+ // To filter operators based on manifest aOperatorConfiguration settings
303
+ getFilterOperations: function(aOperatorConfiguration: any) {
304
+ const aOperations = [];
305
+ for (const n in mSemanticDateOperations) {
306
+ const oOperation = mSemanticDateOperations[n];
307
+ if (_filterOperation(oOperation, aOperatorConfiguration)) {
308
+ aOperations.push(oOperation);
309
+ }
310
+ }
311
+ return aOperations.map(function(oOperation: any) {
312
+ return oOperation.key;
313
+ });
314
+ },
315
+ hasSemanticDateOperations: function(oConditions: any) {
316
+ const aSemanticDateOps = this.getSemanticDateOperations();
317
+ for (const n in oConditions) {
318
+ const aFilterCondtion = oConditions[n];
319
+ const oSemanticOperator = aFilterCondtion.find(function(oCondition: any) {
320
+ return aSemanticDateOps.indexOf(oCondition.operator) > -1;
321
+ });
322
+ if (oSemanticOperator) {
323
+ return false;
324
+ }
325
+ }
326
+ return true;
327
+ }
328
+ };
329
+
330
+ export default SemanticDateOperators;
@@ -1,77 +1,76 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 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;