@openui5/sap.ui.core 1.132.1 → 1.133.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 (376) hide show
  1. package/.dtsgenrc +5 -0
  2. package/.eslintrc.json +4 -0
  3. package/.reuse/dep5 +2 -2
  4. package/LICENSES/LicenseRef-Unicode-3.0.txt +39 -0
  5. package/THIRDPARTY.txt +54 -66
  6. package/package.json +1 -1
  7. package/src/jquery.sap.global.js +1 -1
  8. package/src/jquery.sap.properties.js +1 -1
  9. package/src/jquery.sap.resources.js +1 -1
  10. package/src/jquery.sap.script.js +1 -1
  11. package/src/jquery.sap.storage.js +3 -3
  12. package/src/sap/base/Event.js +1 -1
  13. package/src/sap/base/Eventing.js +1 -1
  14. package/src/sap/base/config.js +1 -1
  15. package/src/sap/base/i18n/LanguageTag.js +1 -1
  16. package/src/sap/base/i18n/date/TimezoneUtils.js +159 -12
  17. package/src/sap/base/util/JSTokenizer.js +25 -18
  18. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  19. package/src/sap/base/util/restricted/_castArray.js +1 -1
  20. package/src/sap/base/util/restricted/_compact.js +1 -1
  21. package/src/sap/base/util/restricted/_curry.js +1 -1
  22. package/src/sap/base/util/restricted/_debounce.js +1 -1
  23. package/src/sap/base/util/restricted/_difference.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  25. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  28. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  29. package/src/sap/base/util/restricted/_flatten.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  31. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  32. package/src/sap/base/util/restricted/_intersection.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  34. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  36. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  37. package/src/sap/base/util/restricted/_isNil.js +1 -1
  38. package/src/sap/base/util/restricted/_max.js +1 -1
  39. package/src/sap/base/util/restricted/_merge.js +1 -1
  40. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  41. package/src/sap/base/util/restricted/_min.js +1 -1
  42. package/src/sap/base/util/restricted/_omit.js +1 -1
  43. package/src/sap/base/util/restricted/_pick.js +1 -1
  44. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  45. package/src/sap/base/util/restricted/_throttle.js +1 -1
  46. package/src/sap/base/util/restricted/_toArray.js +1 -1
  47. package/src/sap/base/util/restricted/_union.js +1 -1
  48. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  49. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  50. package/src/sap/base/util/restricted/_uniq.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  52. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  53. package/src/sap/base/util/restricted/_without.js +1 -1
  54. package/src/sap/base/util/restricted/_xor.js +1 -1
  55. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  56. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  58. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  59. package/src/sap/ui/Device.js +3 -3
  60. package/src/sap/ui/Global.js +3 -3
  61. package/src/sap/ui/base/Event.js +1 -1
  62. package/src/sap/ui/base/EventProvider.js +1 -1
  63. package/src/sap/ui/base/Interface.js +1 -1
  64. package/src/sap/ui/base/ManagedObject.js +1 -1
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  66. package/src/sap/ui/base/Metadata.js +1 -1
  67. package/src/sap/ui/base/Object.js +1 -1
  68. package/src/sap/ui/base/ObjectPool.js +1 -1
  69. package/src/sap/ui/base/SyncPromise.js +120 -25
  70. package/src/sap/ui/core/.library +6 -6
  71. package/src/sap/ui/core/BusyIndicator.js +1 -1
  72. package/src/sap/ui/core/Component.js +1 -1
  73. package/src/sap/ui/core/ComponentContainer.js +1 -1
  74. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  75. package/src/sap/ui/core/ComponentSupport.js +1 -1
  76. package/src/sap/ui/core/Configuration.js +1 -1
  77. package/src/sap/ui/core/Control.js +1 -1
  78. package/src/sap/ui/core/Core.js +2 -2
  79. package/src/sap/ui/core/CustomData.js +1 -1
  80. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  81. package/src/sap/ui/core/Element.js +3 -1
  82. package/src/sap/ui/core/ElementMetadata.js +1 -1
  83. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  84. package/src/sap/ui/core/EventBus.js +1 -1
  85. package/src/sap/ui/core/Fragment.js +1 -1
  86. package/src/sap/ui/core/HTML.js +1 -1
  87. package/src/sap/ui/core/History.js +1 -1
  88. package/src/sap/ui/core/Icon.js +1 -1
  89. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  90. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  91. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  92. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  93. package/src/sap/ui/core/InvisibleText.js +1 -1
  94. package/src/sap/ui/core/Item.js +1 -1
  95. package/src/sap/ui/core/LabelEnablement.js +1 -1
  96. package/src/sap/ui/core/LayoutData.js +1 -1
  97. package/src/sap/ui/core/ListItem.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  99. package/src/sap/ui/core/Locale.js +1 -1
  100. package/src/sap/ui/core/LocaleData.js +96 -79
  101. package/src/sap/ui/core/Manifest.js +1 -1
  102. package/src/sap/ui/core/Message.js +1 -1
  103. package/src/sap/ui/core/RenderManager.js +1 -1
  104. package/src/sap/ui/core/Renderer.js +1 -1
  105. package/src/sap/ui/core/ResizeHandler.js +1 -1
  106. package/src/sap/ui/core/ScrollBar.js +1 -1
  107. package/src/sap/ui/core/SeparatorItem.js +1 -1
  108. package/src/sap/ui/core/Title.js +1 -1
  109. package/src/sap/ui/core/TooltipBase.js +1 -1
  110. package/src/sap/ui/core/UIArea.js +1 -1
  111. package/src/sap/ui/core/UIComponent.js +1 -1
  112. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  113. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  114. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  115. package/src/sap/ui/core/XMLComposite.js +1 -1
  116. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  117. package/src/sap/ui/core/XMLTemplateProcessor.js +22 -3
  118. package/src/sap/ui/core/_IconRegistry.js +2 -0
  119. package/src/sap/ui/core/boot/_bootConfig.js +134 -105
  120. package/src/sap/ui/core/cldr/Unicode-Data-Files-LICENSE.txt +36 -24
  121. package/src/sap/ui/core/cldr/ar.json +106 -98
  122. package/src/sap/ui/core/cldr/ar_EG.json +106 -98
  123. package/src/sap/ui/core/cldr/ar_SA.json +106 -98
  124. package/src/sap/ui/core/cldr/bg.json +44 -38
  125. package/src/sap/ui/core/cldr/ca.json +65 -65
  126. package/src/sap/ui/core/cldr/cnr.json +182 -170
  127. package/src/sap/ui/core/cldr/cs.json +39 -31
  128. package/src/sap/ui/core/cldr/cy.json +319 -233
  129. package/src/sap/ui/core/cldr/da.json +36 -32
  130. package/src/sap/ui/core/cldr/de.json +134 -135
  131. package/src/sap/ui/core/cldr/de_AT.json +134 -135
  132. package/src/sap/ui/core/cldr/de_CH.json +135 -136
  133. package/src/sap/ui/core/cldr/el.json +44 -37
  134. package/src/sap/ui/core/cldr/el_CY.json +44 -37
  135. package/src/sap/ui/core/cldr/en.json +91 -53
  136. package/src/sap/ui/core/cldr/en_AU.json +108 -70
  137. package/src/sap/ui/core/cldr/en_GB.json +123 -85
  138. package/src/sap/ui/core/cldr/en_HK.json +102 -64
  139. package/src/sap/ui/core/cldr/en_IE.json +102 -64
  140. package/src/sap/ui/core/cldr/en_IN.json +207 -67
  141. package/src/sap/ui/core/cldr/en_NZ.json +102 -64
  142. package/src/sap/ui/core/cldr/en_PG.json +102 -64
  143. package/src/sap/ui/core/cldr/en_SG.json +102 -64
  144. package/src/sap/ui/core/cldr/en_ZA.json +106 -66
  145. package/src/sap/ui/core/cldr/es.json +43 -39
  146. package/src/sap/ui/core/cldr/es_AR.json +92 -64
  147. package/src/sap/ui/core/cldr/es_BO.json +92 -64
  148. package/src/sap/ui/core/cldr/es_CL.json +92 -64
  149. package/src/sap/ui/core/cldr/es_CO.json +92 -64
  150. package/src/sap/ui/core/cldr/es_MX.json +131 -83
  151. package/src/sap/ui/core/cldr/es_PE.json +69 -41
  152. package/src/sap/ui/core/cldr/es_UY.json +93 -65
  153. package/src/sap/ui/core/cldr/es_VE.json +92 -64
  154. package/src/sap/ui/core/cldr/et.json +60 -59
  155. package/src/sap/ui/core/cldr/fa.json +122 -116
  156. package/src/sap/ui/core/cldr/fi.json +186 -82
  157. package/src/sap/ui/core/cldr/fr.json +57 -56
  158. package/src/sap/ui/core/cldr/fr_BE.json +56 -55
  159. package/src/sap/ui/core/cldr/fr_CA.json +139 -89
  160. package/src/sap/ui/core/cldr/fr_CH.json +47 -46
  161. package/src/sap/ui/core/cldr/fr_LU.json +57 -56
  162. package/src/sap/ui/core/cldr/he.json +458 -381
  163. package/src/sap/ui/core/cldr/hi.json +204 -170
  164. package/src/sap/ui/core/cldr/hr.json +64 -57
  165. package/src/sap/ui/core/cldr/hu.json +145 -148
  166. package/src/sap/ui/core/cldr/id.json +72 -62
  167. package/src/sap/ui/core/cldr/it.json +76 -75
  168. package/src/sap/ui/core/cldr/it_CH.json +76 -75
  169. package/src/sap/ui/core/cldr/ja.json +62 -44
  170. package/src/sap/ui/core/cldr/kk.json +171 -146
  171. package/src/sap/ui/core/cldr/ko.json +91 -73
  172. package/src/sap/ui/core/cldr/lt.json +134 -135
  173. package/src/sap/ui/core/cldr/lv.json +119 -111
  174. package/src/sap/ui/core/cldr/mk.json +316 -314
  175. package/src/sap/ui/core/cldr/ms.json +91 -75
  176. package/src/sap/ui/core/cldr/nb.json +37 -37
  177. package/src/sap/ui/core/cldr/nl.json +45 -48
  178. package/src/sap/ui/core/cldr/nl_BE.json +45 -48
  179. package/src/sap/ui/core/cldr/pl.json +47 -42
  180. package/src/sap/ui/core/cldr/pt.json +129 -124
  181. package/src/sap/ui/core/cldr/pt_PT.json +43 -38
  182. package/src/sap/ui/core/cldr/ro.json +42 -37
  183. package/src/sap/ui/core/cldr/ru.json +59 -51
  184. package/src/sap/ui/core/cldr/ru_UA.json +59 -51
  185. package/src/sap/ui/core/cldr/sk.json +55 -46
  186. package/src/sap/ui/core/cldr/sl.json +45 -31
  187. package/src/sap/ui/core/cldr/sr.json +189 -177
  188. package/src/sap/ui/core/cldr/sr_Latn.json +189 -177
  189. package/src/sap/ui/core/cldr/sv.json +42 -41
  190. package/src/sap/ui/core/cldr/th.json +104 -90
  191. package/src/sap/ui/core/cldr/tr.json +40 -39
  192. package/src/sap/ui/core/cldr/uk.json +143 -123
  193. package/src/sap/ui/core/cldr/vi.json +136 -133
  194. package/src/sap/ui/core/cldr/zh_CN.json +47 -41
  195. package/src/sap/ui/core/cldr/zh_HK.json +47 -41
  196. package/src/sap/ui/core/cldr/zh_SG.json +47 -41
  197. package/src/sap/ui/core/cldr/zh_TW.json +163 -160
  198. package/src/sap/ui/core/date/Buddhist.js +2 -2
  199. package/src/sap/ui/core/date/CalendarUtils.js +4 -4
  200. package/src/sap/ui/core/date/Gregorian.js +2 -2
  201. package/src/sap/ui/core/date/Islamic.js +2 -2
  202. package/src/sap/ui/core/date/Japanese.js +2 -2
  203. package/src/sap/ui/core/date/Persian.js +2 -2
  204. package/src/sap/ui/core/date/UI5Date.js +1 -1
  205. package/src/sap/ui/core/date/UniversalDate.js +12 -12
  206. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  207. package/src/sap/ui/core/delegate/ScrollEnablement.js +7 -5
  208. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  209. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  210. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  211. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  212. package/src/sap/ui/core/fieldhelp/FieldHelp.js +204 -4
  213. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +8 -8
  214. package/src/sap/ui/core/format/DateFormat.js +18 -16
  215. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  216. package/src/sap/ui/core/format/NumberFormat.js +336 -353
  217. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  218. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  219. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  220. package/src/sap/ui/core/library.js +7 -5
  221. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  222. package/src/sap/ui/core/message/Message.js +1 -1
  223. package/src/sap/ui/core/message/MessageManager.js +1 -1
  224. package/src/sap/ui/core/message/MessageMixin.js +12 -4
  225. package/src/sap/ui/core/message/MessageParser.js +1 -1
  226. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  227. package/src/sap/ui/core/messagebundle_sv.properties +1 -1
  228. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  229. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  230. package/src/sap/ui/core/mvc/JSView.js +1 -1
  231. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  232. package/src/sap/ui/core/mvc/View.js +1 -1
  233. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  234. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  235. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  236. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  237. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  238. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  239. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  240. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  241. package/src/sap/ui/core/service/Service.js +1 -1
  242. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  243. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  244. package/src/sap/ui/core/support/Plugin.js +1 -1
  245. package/src/sap/ui/core/support/Support.js +1 -1
  246. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  247. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  248. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  249. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  250. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  251. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  252. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  253. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  254. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  255. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  256. package/src/sap/ui/core/theming/ThemeManager.js +84 -33
  257. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  258. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  259. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  260. package/src/sap/ui/core/tmpl/Template.js +1 -1
  261. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  262. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  263. package/src/sap/ui/core/util/Export.js +1 -1
  264. package/src/sap/ui/core/util/ExportCell.js +1 -1
  265. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  266. package/src/sap/ui/core/util/ExportRow.js +1 -1
  267. package/src/sap/ui/core/util/ExportType.js +1 -1
  268. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  269. package/src/sap/ui/core/util/File.js +1 -1
  270. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  271. package/src/sap/ui/core/util/MockServer.js +5 -2
  272. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  273. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  274. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  275. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  276. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  277. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  278. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  279. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  280. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  281. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  282. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  283. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  284. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  285. package/src/sap/ui/debug/ControlTree.js +1 -1
  286. package/src/sap/ui/debug/DebugEnv.js +1 -1
  287. package/src/sap/ui/debug/PropertyList.js +1 -1
  288. package/src/sap/ui/model/ClientModel.js +1 -1
  289. package/src/sap/ui/model/CompositeDataState.js +1 -1
  290. package/src/sap/ui/model/CompositeType.js +1 -1
  291. package/src/sap/ui/model/DataState.js +1 -1
  292. package/src/sap/ui/model/ManagedObjectBindingSupport.js +21 -12
  293. package/src/sap/ui/model/MetaModel.js +1 -1
  294. package/src/sap/ui/model/Model.js +1 -1
  295. package/src/sap/ui/model/SelectionModel.js +1 -1
  296. package/src/sap/ui/model/SimpleType.js +1 -1
  297. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  298. package/src/sap/ui/model/Type.js +1 -1
  299. package/src/sap/ui/model/base/ManagedObjectModel.js +5 -2
  300. package/src/sap/ui/model/json/JSONModel.js +1 -1
  301. package/src/sap/ui/model/message/MessageModel.js +1 -1
  302. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  303. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  304. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  305. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  306. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  307. package/src/sap/ui/model/odata/ODataUtils.js +2 -2
  308. package/src/sap/ui/model/odata/UpdateMethod.js +18 -1
  309. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +2 -2
  310. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  311. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  312. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  313. package/src/sap/ui/model/odata/type/Date.js +3 -3
  314. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  315. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  316. package/src/sap/ui/model/odata/type/DateTimeOffset.js +2 -2
  317. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  318. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  319. package/src/sap/ui/model/odata/type/Double.js +1 -1
  320. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  321. package/src/sap/ui/model/odata/type/Int.js +1 -1
  322. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  323. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  324. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  325. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  326. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  327. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  328. package/src/sap/ui/model/odata/type/Single.js +1 -1
  329. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  330. package/src/sap/ui/model/odata/type/String.js +1 -1
  331. package/src/sap/ui/model/odata/type/Time.js +1 -1
  332. package/src/sap/ui/model/odata/type/TimeOfDay.js +3 -3
  333. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  334. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  335. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  336. package/src/sap/ui/model/odata/v2/ODataModel.js +39 -22
  337. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  338. package/src/sap/ui/model/odata/v4/Context.js +48 -16
  339. package/src/sap/ui/model/odata/v4/ODataBinding.js +2 -0
  340. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +3 -1
  341. package/src/sap/ui/model/odata/v4/ODataListBinding.js +22 -13
  342. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +17 -6
  343. package/src/sap/ui/model/odata/v4/ODataModel.js +3 -3
  344. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +6 -0
  345. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  346. package/src/sap/ui/model/odata/v4/ODataUtils.js +1 -1
  347. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +9 -9
  348. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +4 -7
  349. package/src/sap/ui/model/odata/v4/lib/_Cache.js +251 -129
  350. package/src/sap/ui/model/odata/v4/lib/_Helper.js +20 -0
  351. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +8 -3
  352. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  353. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  354. package/src/sap/ui/model/type/Boolean.js +1 -1
  355. package/src/sap/ui/model/type/Currency.js +1 -1
  356. package/src/sap/ui/model/type/Date.js +1 -1
  357. package/src/sap/ui/model/type/DateInterval.js +1 -1
  358. package/src/sap/ui/model/type/DateTime.js +1 -1
  359. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  360. package/src/sap/ui/model/type/FileSize.js +1 -1
  361. package/src/sap/ui/model/type/Float.js +1 -1
  362. package/src/sap/ui/model/type/Integer.js +1 -1
  363. package/src/sap/ui/model/type/String.js +1 -1
  364. package/src/sap/ui/model/type/Time.js +1 -1
  365. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  366. package/src/sap/ui/model/type/Unit.js +1 -1
  367. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  368. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  369. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  370. package/src/sap/ui/test/generic/TestBase.js +1 -1
  371. package/src/sap/ui/test/starter/_setupAndStart.js +1 -1
  372. package/src/sap/ui/thirdparty/jquery-compat.js +1 -1
  373. package/src/sap/ui/util/Storage.js +1 -1
  374. package/src/ui5loader.js +1 -1
  375. package/test/sap/ui/qunit/TestRunner.js +6 -10
  376. package/LICENSES/Unicode-DFS-2015.txt +0 -51
@@ -124,7 +124,7 @@ sap.ui.define([
124
124
  * Sets the default count mode for the model
125
125
  * @param {sap.ui.model.odata.OperationMode} [mParameters.defaultOperationMode=Default]
126
126
  * Sets the default operation mode for the model
127
- * @param {sap.ui.model.odata.UpdateMethod} [mParameters.defaultUpdateMethod=Merge]
127
+ * @param {sap.ui.model.odata.UpdateMethod} [mParameters.defaultUpdateMethod=MERGE]
128
128
  * Default update method which is used for all update requests
129
129
  * @param {boolean} [mParameters.disableHeadRequestForToken=false]
130
130
  * Set this flag to <code>true</code> if your service does not support <code>HEAD</code>
@@ -218,7 +218,7 @@ sap.ui.define([
218
218
  * This model is not prepared to be inherited from.
219
219
  *
220
220
  * @author SAP SE
221
- * @version 1.132.1
221
+ * @version 1.133.0
222
222
  *
223
223
  * @public
224
224
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -337,7 +337,7 @@ sap.ui.define([
337
337
  this.mChangeHandles = {};
338
338
  this.mDeferredGroups = {};
339
339
  this.mLaunderingState = {};
340
- this.sDefaultUpdateMethod = sDefaultUpdateMethod || UpdateMethod.Merge;
340
+ this.sDefaultUpdateMethod = ODataModel._fixUpdateMethod(sDefaultUpdateMethod) || UpdateMethod.MERGE;
341
341
 
342
342
  this.bTokenHandling = vTokenHandling !== false;
343
343
  this.bWithCredentials = bWithCredentials === true;
@@ -967,6 +967,23 @@ sap.ui.define([
967
967
  meta: {}
968
968
  };
969
969
 
970
+ /**
971
+ * Maps "Put" to "PUT" and "Merge" to "MERGE" to fix wrong usage of deprecated enum keys as manifest entries. If
972
+ * the given update method is neither "Put" nor "Merge", it is returned as is.
973
+ *
974
+ * @param {string} [sUpdateMethod] The update method to fix
975
+ * @returns {string|undefined} The fixed update method
976
+ * @private
977
+ */
978
+ ODataModel._fixUpdateMethod = function (sUpdateMethod) {
979
+ if (sUpdateMethod === "Put") {
980
+ return UpdateMethod.PUT;
981
+ } else if (sUpdateMethod === "Merge") {
982
+ return UpdateMethod.MERGE;
983
+ }
984
+ return sUpdateMethod;
985
+ };
986
+
970
987
  /**
971
988
  * Get the shared data for the section and the key. If it doesn't exist yet, an empty shared
972
989
  * data object is created and stored under the section and the key.
@@ -2243,8 +2260,7 @@ sap.ui.define([
2243
2260
  * @returns {sap.ui.model.odata.v2.ODataTreeBinding}
2244
2261
  * The new tree binding
2245
2262
  * @public
2246
- * @see {@link http://www.sap.com/protocols/SAPData
2247
- * "SAP Annotations for OData Version 2.0" Specification}
2263
+ * @see {@link http://www.sap.com/protocols/SAPData "SAP Annotations for OData Version 2.0" Specification}
2248
2264
  */
2249
2265
  ODataModel.prototype.bindTree = function(sPath, oContext, vFilters, mParameters, vSorters) {
2250
2266
  var oBinding = new ODataTreeBinding(this, sPath, oContext, vFilters, mParameters, vSorters);
@@ -4150,7 +4166,7 @@ sap.ui.define([
4150
4166
  oStoredRequest.data = oRequest.data;
4151
4167
  oStoredRequest.sideEffects = oRequest.sideEffects;
4152
4168
 
4153
- if (oRequest.method === "PUT") {
4169
+ if (oRequest.method === UpdateMethod.PUT) {
4154
4170
  // if stored request was a MERGE before (created by setProperty) but is now sent via PUT
4155
4171
  // (by submitChanges) the merge header must be removed
4156
4172
  delete oStoredRequest.headers["x-http-method"];
@@ -4744,8 +4760,8 @@ sap.ui.define([
4744
4760
  * The entry data
4745
4761
  * @param {string} sGroupId
4746
4762
  * The group ID
4747
- * @param {boolean} [sUpdateMethod]
4748
- * Sets <code>MERGE/PUT</code> method, defaults to <code>MERGE</code> if not provided
4763
+ * @param {sap.ui.model.odata.UpdateMethod} [sUpdateMethod]
4764
+ * The update method, defaults to the model's default update method
4749
4765
  * @returns {object}
4750
4766
  * The request object
4751
4767
  *
@@ -4787,12 +4803,12 @@ sap.ui.define([
4787
4803
  //delete the uri flag when a new entity was created, since the uri for the create request is generated and does not point to a valid resource
4788
4804
  delete oPayload.__metadata['uri'];
4789
4805
  }
4790
- } else if (sUpdateMethod === "MERGE") {
4791
- sMethod = "MERGE";
4806
+ } else if (sUpdateMethod === UpdateMethod.MERGE) {
4807
+ sMethod = UpdateMethod.MERGE;
4792
4808
  // get original unmodified entry for diff
4793
4809
  oUnModifiedEntry = this._getEntity(sKey);
4794
4810
  } else {
4795
- sMethod = "PUT";
4811
+ sMethod = UpdateMethod.PUT;
4796
4812
  }
4797
4813
 
4798
4814
  // remove metadata, navigation properties to reduce payload
@@ -4812,7 +4828,7 @@ sap.ui.define([
4812
4828
  });
4813
4829
  }
4814
4830
 
4815
- if (sMethod === "MERGE" && oEntityType && oUnModifiedEntry) {
4831
+ if (sMethod === UpdateMethod.MERGE && oEntityType && oUnModifiedEntry) {
4816
4832
  each(oPayload, function(sPropName, oPropValue) {
4817
4833
  if (sPropName !== '__metadata') {
4818
4834
  // remove unmodified properties and keep only modified properties for delta MERGE
@@ -5135,8 +5151,8 @@ sap.ui.define([
5135
5151
  mHeaders["Accept"] = "text/plain, */*;q=0.5";
5136
5152
  }
5137
5153
 
5138
- if (sMethod === "MERGE" && !this.bUseBatch) {
5139
- mHeaders["x-http-method"] = "MERGE";
5154
+ if (sMethod === UpdateMethod.MERGE && !this.bUseBatch) {
5155
+ mHeaders["x-http-method"] = UpdateMethod.MERGE;
5140
5156
  sMethod = "POST";
5141
5157
  }
5142
5158
 
@@ -5257,7 +5273,7 @@ sap.ui.define([
5257
5273
  * Trigger a <code>PUT/MERGE</code> request to the OData service that was specified in the model constructor.
5258
5274
  *
5259
5275
  * The update method used is defined by the global <code>defaultUpdateMethod</code> parameter which is
5260
- * <code>sap.ui.model.odata.UpdateMethod.Merge</code> by default. Please note that deep updates are not
5276
+ * <code>sap.ui.model.odata.UpdateMethod.MERGE</code> by default. Please note that deep updates are not
5261
5277
  * supported and may not work. These should be done separately and directly on the corresponding entry.
5262
5278
  *
5263
5279
  * @param {string} sPath A string containing the path to the data that should be updated.
@@ -5305,7 +5321,7 @@ sap.ui.define([
5305
5321
  bCanonical = mParameters.canonicalRequest;
5306
5322
  // ensure merge parameter backwards compatibility
5307
5323
  if (mParameters.merge !== undefined) {
5308
- sMethod = mParameters.merge ? "MERGE" : "PUT";
5324
+ sMethod = mParameters.merge ? UpdateMethod.MERGE : UpdateMethod.PUT;
5309
5325
  }
5310
5326
  }
5311
5327
 
@@ -6344,7 +6360,8 @@ sap.ui.define([
6344
6360
  * Submits the collected changes which were collected by the {@link #setProperty} method and other deferred requests.
6345
6361
  *
6346
6362
  * The update method is defined by the global <code>defaultUpdateMethod</code> parameter which is
6347
- * <code>sap.ui.model.odata.UpdateMethod.Merge</code> by default. In case of a <code>sap.ui.model.odata.UpdateMethod.Merge</code>
6363
+ * <code>sap.ui.model.odata.UpdateMethod.MERGE</code> by default. In case of a
6364
+ * <code>sap.ui.model.odata.UpdateMethod.MERGE</code>
6348
6365
  * request only the changed properties will be updated.
6349
6366
  * If a URI with a <code>$expand</code> query option was used then the expand entries will be removed from the collected changes.
6350
6367
  * Changes to this entries should be done on the entry itself. So no deep updates are supported.
@@ -6369,8 +6386,8 @@ sap.ui.define([
6369
6386
  * @param {boolean} [mParameters.merge]
6370
6387
  * <b>Deprecated</b> since 1.38.0; use the <code>defaultUpdateMethod</code> constructor parameter instead.
6371
6388
  * If unset, the update method is determined from the <code>defaultUpdateMethod</code> constructor parameter.
6372
- * If <code>true</code>, <code>sap.ui.model.odata.UpdateMethod.Merge</code> is used for update operations;
6373
- * if set to <code>false</code>, <code>sap.ui.model.odata.UpdateMethod.Put</code> is used.
6389
+ * If <code>true</code>, <code>sap.ui.model.odata.UpdateMethod.MERGE</code> is used for update operations;
6390
+ * if set to <code>false</code>, <code>sap.ui.model.odata.UpdateMethod.PUT</code> is used.
6374
6391
  * @return {object} An object which has an <code>abort</code> function to abort the current request or requests
6375
6392
  *
6376
6393
  * @public
@@ -6403,8 +6420,8 @@ sap.ui.define([
6403
6420
  * @param {string} [mParameters.batchGroupId]
6404
6421
  * <b>Deprecated</b>, use <code>groupId</code> instead
6405
6422
  * @param {boolean} [mParameters.merge]
6406
- * <b>Deprecated</b> since 1.38.0; whether the update method <code>sap.ui.model.odata.UpdateMethod.Merge</code>
6407
- * is used
6423
+ * <b>Deprecated</b> since 1.38.0; whether the update method
6424
+ * <code>sap.ui.model.odata.UpdateMethod.MERGE</code> is used
6408
6425
  * @returns {object}
6409
6426
  * An object which has an <code>abort</code> function
6410
6427
  * @throws {Error}
@@ -6428,7 +6445,7 @@ sap.ui.define([
6428
6445
  fnError = mParameters.error;
6429
6446
  // ensure merge parameter backwards compatibility
6430
6447
  if (mParameters.merge !== undefined) {
6431
- sMethod = mParameters.merge ? "MERGE" : "PUT";
6448
+ sMethod = mParameters.merge ? UpdateMethod.MERGE : UpdateMethod.PUT;
6432
6449
  }
6433
6450
  sPrivateHeader = Object.keys(mParameters.changeHeaders || {}).find(function (sHeader) {
6434
6451
  return that._isHeaderPrivate(sHeader);
@@ -103,7 +103,7 @@ sap.ui.define([
103
103
  * @extends sap.ui.model.TreeBinding
104
104
  * @hideconstructor
105
105
  * @public
106
- * @version 1.132.1
106
+ * @version 1.133.0
107
107
  */
108
108
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
109
109
 
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.132.1
45
+ * @version 1.133.0
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -88,10 +88,7 @@ sap.ui.define([
88
88
  }
89
89
  BaseContext.call(this, oModel, sPath);
90
90
  this.oBinding = oBinding;
91
- this.oCreatedPromise = oCreatePromise
92
- // ensure to return a promise that is resolved w/o data
93
- && Promise.resolve(oCreatePromise).then(function () {});
94
- this.oSyncCreatePromise = oCreatePromise;
91
+ this.setCreated(oCreatePromise);
95
92
  // a promise waiting for the deletion, also used as indicator for #isDeleted
96
93
  this.oDeletePromise = null;
97
94
  // avoids recursion when calling #doSetProperty within the createActivate event handler
@@ -294,6 +291,8 @@ sap.ui.define([
294
291
  * {@link #isKeepAlive kept alive},
295
292
  * <li> the context is already being deleted,
296
293
  * <li> the context's binding is a list binding with data aggregation,
294
+ * <li> the context is transient but its binding is not a list binding ("upsert") and it
295
+ * therefore must be reset via {@link #resetChanges},
297
296
  * <li> the restrictions for deleting from a recursive hierarchy (see above) are not met.
298
297
  * </ul>
299
298
  *
@@ -322,12 +321,15 @@ sap.ui.define([
322
321
  }
323
322
  this.oBinding.checkSuspended();
324
323
  if (this.isTransient()) {
324
+ if (!this.oBinding.getHeaderContext) { // upsert
325
+ throw new Error("Cannot delete " + this);
326
+ }
325
327
  if (this.iIndex === undefined) {
326
328
  return Promise.resolve(); // already deleted, nothing to do
327
329
  }
328
330
  sGroupId = null;
329
331
  } else if (sGroupId === null) {
330
- if (!(this.isKeepAlive() && this.iIndex === undefined)) {
332
+ if (this.iIndex !== undefined || !this.isKeepAlive()) {
331
333
  throw new Error("Cannot delete " + this);
332
334
  }
333
335
  }
@@ -584,7 +586,7 @@ sap.ui.define([
584
586
  bUpdating);
585
587
  }
586
588
 
587
- if (that.isInactive() && !that.bFiringCreateActivate) {
589
+ if (that.bInactive && !that.bFiringCreateActivate) {
588
590
  // early cache update so that the new value is properly available on the
589
591
  // event listener
590
592
  // runs synchronously - setProperty calls fetchValue with $cached
@@ -596,6 +598,10 @@ sap.ui.define([
596
598
  oCache.setInactive(sEntityPath, that.bInactive);
597
599
  }
598
600
 
601
+ const fnSetUpsertPromise = _Helper.hasPathSuffix(that.sPath, sEntityPath)
602
+ ? that.setCreated.bind(that)
603
+ : null;
604
+
599
605
  // if request is canceled fnPatchSent and fnErrorCallback are not called and
600
606
  // returned Promise is rejected -> no patch events
601
607
  return oCache.update(oGroupLock, oResult.propertyPath, vValue,
@@ -603,7 +609,7 @@ sap.ui.define([
603
609
  // Note: use that.oModel intentionally, fails if already destroyed!
604
610
  oMetaModel.getUnitOrCurrencyPath(that.oModel.resolve(sPath, that)),
605
611
  oBinding.isPatchWithoutSideEffects(), patchSent,
606
- that.isEffectivelyKeptAlive.bind(that)
612
+ that.isEffectivelyKeptAlive.bind(that), fnSetUpsertPromise
607
613
  ).then(function () {
608
614
  firePatchCompleted(true);
609
615
  }, function (oError) {
@@ -673,6 +679,7 @@ sap.ui.define([
673
679
  if (!bAll) {
674
680
  throw new Error("Already expanded: " + this);
675
681
  }
682
+ this.oBinding.collapse(this, /*bAll*/false, /*bSilent*/true);
676
683
  // falls through
677
684
  case false: {
678
685
  const iLevels = bAll ? Number.MAX_SAFE_INTEGER : 1;
@@ -1195,7 +1202,7 @@ sap.ui.define([
1195
1202
  var that = this;
1196
1203
 
1197
1204
  return this.isTransient() && this.isInactive() !== true
1198
- || this.oDeletePromise && this.oDeletePromise.isPending()
1205
+ || this.oDeletePromise?.isPending()
1199
1206
  || this.oBinding.hasPendingChangesForPath(this.sPath)
1200
1207
  || this.oModel.getDependentBindings(this).some(function (oDependentBinding) {
1201
1208
  return oDependentBinding.oCache
@@ -1287,7 +1294,7 @@ sap.ui.define([
1287
1294
  || !mParameters.$$sharedRequest
1288
1295
  && this.oBinding.getHeaderContext?.()
1289
1296
  && this.oBinding.getHeaderContext().isSelected() !== this.isSelected()
1290
- && !(this.oBinding.isRelative() && !mParameters.$$ownRequest)
1297
+ && (mParameters.$$ownRequest || !this.oBinding.isRelative())
1291
1298
  && !_Helper.isDataAggregation(mParameters)
1292
1299
  // check for key predicate in the last path segment
1293
1300
  && this.sPath.indexOf("(", this.sPath.lastIndexOf("/")) > 0;
@@ -1403,7 +1410,7 @@ sap.ui.define([
1403
1410
  * @since 1.43.0
1404
1411
  */
1405
1412
  Context.prototype.isTransient = function () {
1406
- return this.oSyncCreatePromise && this.oSyncCreatePromise.isPending();
1413
+ return this.oSyncCreatePromise?.isPending();
1407
1414
  };
1408
1415
 
1409
1416
  /**
@@ -1475,11 +1482,11 @@ sap.ui.define([
1475
1482
  if (oNextSibling === undefined && oParent === undefined) {
1476
1483
  return Promise.resolve(); // "no move happens"
1477
1484
  }
1478
- if (this.isDeleted() || this.isTransient() || this.iIndex === undefined) {
1485
+ if (this.iIndex === undefined || this.isDeleted() || this.isTransient()) {
1479
1486
  throw new Error("Cannot move " + this);
1480
1487
  }
1481
1488
  if (oParent
1482
- && (oParent.isDeleted() || oParent.isTransient() || oParent.iIndex === undefined)) {
1489
+ && (oParent.iIndex === undefined || oParent.isDeleted() || oParent.isTransient())) {
1483
1490
  throw new Error("Cannot move to " + oParent);
1484
1491
  }
1485
1492
  if (this.isAncestorOf(oParent)) {
@@ -2126,8 +2133,8 @@ sap.ui.define([
2126
2133
  * <li> the binding's root binding is suspended,
2127
2134
  * <li> a change of this context has already been sent to the server and there is no response
2128
2135
  * yet,
2129
- * <li> this context is transient, but not inactive and therefore should rather be reset via
2130
- * {@link #delete}.
2136
+ * <li> this context is a transient row context but not inactive and therefore must be reset
2137
+ * via {@link #delete}.
2131
2138
  * <li> this context is a
2132
2139
  * {@link sap.ui.model.odata.v4.ODataListBinding#getHeaderContext header context}.
2133
2140
  * <li> this context is a
@@ -2144,7 +2151,8 @@ sap.ui.define([
2144
2151
  : [],
2145
2152
  that = this;
2146
2153
 
2147
- if (this.iIndex === iVIRTUAL || this.isTransient() && !this.isInactive()
2154
+ if (this.iIndex === iVIRTUAL
2155
+ || this.oBinding.getHeaderContext && !this.bInactive && this.isTransient()
2148
2156
  || this === this.oBinding.getHeaderContext?.()
2149
2157
  // only operation bindings have a parameter context, for others the function fails
2150
2158
  || this.oBinding.oOperation && this === this.oBinding.getParameterContext()) {
@@ -2180,6 +2188,30 @@ sap.ui.define([
2180
2188
  this.bSelected = false;
2181
2189
  };
2182
2190
 
2191
+ /**
2192
+ * Sets this context's {@link #created created} promise based on the given one.
2193
+ *
2194
+ * Note: this is a private and internal API. Do not call this!
2195
+ *
2196
+ * @param {sap.ui.base.SyncPromise} [oSyncCreatePromise]
2197
+ * A promise which is resolved with the created entity when the PATCH or POST request has been
2198
+ * successfully sent and the entity has been marked as non-transient; used as base for
2199
+ * {@link #created}. If missing, this context's {@link #created created} promise is removed
2200
+ * again. Don't use <code>null</code>!
2201
+ * @throws {Error} If this context is not "created" or still transient
2202
+ *
2203
+ * @private
2204
+ */
2205
+ Context.prototype.setCreated = function (oSyncCreatePromise) {
2206
+ if (oSyncCreatePromise && this.oCreatedPromise) {
2207
+ throw new Error("Already 'created'");
2208
+ }
2209
+ this.oCreatedPromise = oSyncCreatePromise
2210
+ // ensure to return a promise that is resolved w/o data
2211
+ && Promise.resolve(oSyncCreatePromise).then(function () {});
2212
+ this.oSyncCreatePromise = oSyncCreatePromise;
2213
+ };
2214
+
2183
2215
  /**
2184
2216
  * Sets the inactive flag to <code>true</code>
2185
2217
  *
@@ -1157,6 +1157,8 @@ sap.ui.define([
1157
1157
  * @param {string} sCanonicalPath
1158
1158
  * The canonical path of the entity (as a context path with the leading "/")
1159
1159
  *
1160
+ * @abstract
1161
+ * @function
1160
1162
  * @name sap.ui.model.odata.v4.ODataBinding#onDelete
1161
1163
  * @private
1162
1164
  */
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
75
75
  * @public
76
76
  * @since 1.37.0
77
- * @version 1.132.1
77
+ * @version 1.133.0
78
78
  *
79
79
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
80
80
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
@@ -841,6 +841,8 @@ sap.ui.define([
841
841
  /**
842
842
  * Handles setting a parameter property in case of a deferred operation binding, otherwise it
843
843
  * returns <code>undefined</code>.
844
+ *
845
+ * @private
844
846
  */
845
847
  // @override sap.ui.model.odata.v4.ODataParentBinding#doSetProperty
846
848
  ODataContextBinding.prototype.doSetProperty = function (sPath, vValue, oGroupLock) {
@@ -59,7 +59,7 @@ sap.ui.define([
59
59
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
60
60
  * @public
61
61
  * @since 1.37.0
62
- * @version 1.132.1
62
+ * @version 1.133.0
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
64
64
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
65
65
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -738,7 +738,7 @@ sap.ui.define([
738
738
 
739
739
  iCount ??= this.oCache.collapse(
740
740
  _Helper.getRelativePath(oContext.getPath(), this.oHeaderContext.getPath()),
741
- bAll ? this.lockGroup() : undefined);
741
+ bAll ? this.lockGroup() : undefined, bSilent);
742
742
 
743
743
  if (iCount > 0) {
744
744
  const aContexts = this.aContexts;
@@ -1543,7 +1543,8 @@ sap.ui.define([
1543
1543
  oCache ??= _AggregationCache.create(this.oModel.oRequestor, sResourcePath,
1544
1544
  sDeepResourcePath, mQueryOptions, this.mParameters.$$aggregation,
1545
1545
  this.oModel.bAutoExpandSelect || "$$separate" in this.mParameters,
1546
- this.bSharedRequest, this.isGrouped(), this.mParameters.$$separate);
1546
+ this.bSharedRequest, this.isGrouped());
1547
+ oCache.setSeparate?.(this.mParameters.$$separate);
1547
1548
  if (mKeptElementsByPredicate) {
1548
1549
  aKeepAlivePredicates.forEach(function (sPredicate) {
1549
1550
  oCache.addKeptElement(mKeptElementsByPredicate[sPredicate]);
@@ -2065,8 +2066,12 @@ sap.ui.define([
2065
2066
  return oPromise.then((oEntityType) => {
2066
2067
  const oAggregation = this.mParameters.$$aggregation;
2067
2068
  if (oEntityType) {
2068
- oAggregation.$leafLevelAggregated
2069
- = !oEntityType.$Key?.every((sKey) => sKey in oAggregation.group);
2069
+ oAggregation.$leafLevelAggregated = !oEntityType.$Key?.every((sKey) => {
2070
+ // "group" and "additionally" determine groupby()
2071
+ return sKey in oAggregation.group
2072
+ || Object.keys(oAggregation.group).some(
2073
+ (sGroup) => oAggregation.group[sGroup].additionally?.includes(sKey));
2074
+ });
2070
2075
  }
2071
2076
 
2072
2077
  if (!oCombinedFilter) {
@@ -3403,6 +3408,8 @@ sap.ui.define([
3403
3408
  * The insertion index
3404
3409
  * @param {boolean} [bAtEnd]
3405
3410
  * The relative position in the creation area
3411
+ *
3412
+ * @private
3406
3413
  */
3407
3414
  ODataListBinding.prototype.insertContext = function (oContext, iIndex, bAtEnd) {
3408
3415
  if (iIndex !== undefined) {
@@ -3557,6 +3564,7 @@ sap.ui.define([
3557
3564
  *
3558
3565
  * @returns {sap.ui.model.odata.v4.Context[]} The list of kept contexts
3559
3566
  *
3567
+ * @private
3560
3568
  * @see #getCurrentContexts
3561
3569
  */
3562
3570
  ODataListBinding.prototype.keepOnlyVisibleContexts = function () {
@@ -4596,14 +4604,6 @@ sap.ui.define([
4596
4604
  * used to remove the data aggregation object, which allows to set <code>$apply</code>
4597
4605
  * explicitly afterwards. <code>null</code> is not supported.
4598
4606
  * <br>
4599
- * Since 1.89.0, the <b>deprecated</b> property <code>"grandTotal like 1.84" : true</code> can
4600
- * be used to turn on the handling of grand totals like in 1.84.0, using aggregates of
4601
- * aggregates and thus allowing to filter by aggregated properties while grand totals are
4602
- * needed. Beware that methods like "average" or "countdistinct" are not compatible with this
4603
- * approach, and it cannot be combined with group levels. Since 1.129.0, this property is not
4604
- * needed anymore and filtering by aggregated properties is supported even while grand totals
4605
- * or subtotals are needed.
4606
- * <br>
4607
4607
  * Since 1.117.0, either a read-only recursive hierarchy or pure data aggregation is
4608
4608
  * supported, but no mix; <code>hierarchyQualifier</code> is the leading property that decides
4609
4609
  * between those two use cases. Since 1.125.0, maintenance of a recursive hierarchy is
@@ -4701,6 +4701,14 @@ sap.ui.define([
4701
4701
  * separate row after all children, when a group level node is expanded (since 1.86.0);
4702
4702
  * <code>true</code> for bottom only, <code>false</code> for top and bottom, the default is
4703
4703
  * top only (that is, as part of the group level node)
4704
+ * @param {boolean} [oAggregation."grandTotal like 1.84"]
4705
+ * Since 1.89.0, the <b>deprecated</b> property <code>"grandTotal like 1.84" : true</code> can
4706
+ * be used to turn on the handling of grand totals like in 1.84.0, using aggregates of
4707
+ * aggregates and thus allowing to filter by aggregated properties while grand totals are
4708
+ * needed. Beware that methods like "average" or "countdistinct" are not compatible with this
4709
+ * approach, and it cannot be combined with group levels. Since 1.129.0, this property is not
4710
+ * needed anymore and filtering by aggregated properties is supported even while grand totals
4711
+ * or subtotals are needed.
4704
4712
  * @throws {Error} If
4705
4713
  * <ul>
4706
4714
  * <li> the given data aggregation object is unsupported,
@@ -4738,6 +4746,7 @@ sap.ui.define([
4738
4746
  * @public
4739
4747
  * @see #getAggregation
4740
4748
  * @since 1.55.0
4749
+ * @ui5-transform-hint replace-param oAggregation."grandTotal like 1.84" false
4741
4750
  */
4742
4751
  ODataListBinding.prototype.setAggregation = function (oAggregation) {
4743
4752
  var mParameters;
@@ -157,7 +157,7 @@ sap.ui.define([
157
157
  * @hideconstructor
158
158
  * @public
159
159
  * @since 1.37.0
160
- * @version 1.132.1
160
+ * @version 1.133.0
161
161
  */
162
162
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
163
163
  constructor : constructor
@@ -1817,7 +1817,9 @@ sap.ui.define([
1817
1817
  * @param {sap.ui.model.odata.v4.Context} oContext
1818
1818
  * A context, used for building the path and for determining the key predicate
1819
1819
  * @param {boolean} [bNoEditUrl]
1820
- * Whether no edit URL is required
1820
+ * Whether no edit URL is required; must be <code>undefined</code> from APIs for canonical
1821
+ * paths (based on {@link #fetchCanonicalPath}). Since 1.133.0, when a boolean value is given,
1822
+ * the edit URL is allowed to be adjusted for upsert use cases.
1821
1823
  * @returns {sap.ui.base.SyncPromise}
1822
1824
  * A promise that gets resolved with an object having the following properties:
1823
1825
  * <ul>
@@ -1840,7 +1842,9 @@ sap.ui.define([
1840
1842
  function error(sMessage) {
1841
1843
  var oError = new Error(sResolvedPath + ": " + sMessage);
1842
1844
 
1843
- oModel.reportError(sMessage, sODataMetaModel, oError);
1845
+ if (bNoEditUrl !== undefined) {
1846
+ oModel.reportError(sMessage, sODataMetaModel, oError);
1847
+ } // else: do not log to console or message model for APIs
1844
1848
  throw oError;
1845
1849
  }
1846
1850
 
@@ -1865,7 +1869,8 @@ sap.ui.define([
1865
1869
  //sPropertyPath,
1866
1870
  aSegments, // The resource path split in segments (encoded)
1867
1871
  bTransient = false, // Whether the property is within a transient entity
1868
- oType; // The type of the data at sInstancePath
1872
+ oType, // The type of the data at sInstancePath
1873
+ bUpsert = false; // Whether the entity is already or about to be created via upsert
1869
1874
 
1870
1875
  // Determines the predicate from a segment (empty string if there is none)
1871
1876
  function predicate(sSegment) {
@@ -1965,7 +1970,7 @@ sap.ui.define([
1965
1970
  }
1966
1971
 
1967
1972
  // aEditUrl may still contain key predicate requests, run them and wait for the promises
1968
- return SyncPromise.all(aEditUrl.map(function (vSegment) {
1973
+ return SyncPromise.all(aEditUrl.map(function (vSegment, i) {
1969
1974
  if (typeof vSegment === "string") {
1970
1975
  return vSegment;
1971
1976
  }
@@ -1973,6 +1978,12 @@ sap.ui.define([
1973
1978
  return oContext.fetchValue(vSegment.path).then(function (oEntity) {
1974
1979
  var sPredicate;
1975
1980
 
1981
+ if (bNoEditUrl !== undefined && i === aEditUrl.length - 1
1982
+ && (oEntity === null
1983
+ || oEntity && _Helper.hasPrivateAnnotation(oEntity, "upsert"))) {
1984
+ bUpsert = true;
1985
+ return undefined;
1986
+ }
1976
1987
  if (!oEntity) {
1977
1988
  error("No instance to calculate key predicate at " + vSegment.path);
1978
1989
  }
@@ -1986,7 +1997,7 @@ sap.ui.define([
1986
1997
  });
1987
1998
  })).then(function (aFinalEditUrl) {
1988
1999
  return {
1989
- editUrl : aFinalEditUrl.join("/"),
2000
+ editUrl : bUpsert ? sEntityPath.slice(1) : aFinalEditUrl.join("/"),
1990
2001
  entityPath : sEntityPath,
1991
2002
  propertyPath : sPropertyPath
1992
2003
  };
@@ -240,7 +240,7 @@ sap.ui.define([
240
240
  * @extends sap.ui.model.Model
241
241
  * @public
242
242
  * @since 1.37.0
243
- * @version 1.132.1
243
+ * @version 1.133.0
244
244
  */
245
245
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
246
246
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -1883,10 +1883,10 @@ sap.ui.define([
1883
1883
  /**
1884
1884
  * Returns a map of HTTP headers used for data and metadata requests. While the "X-CSRF-Token"
1885
1885
  * header is not used for metadata requests, it is still included here if available. The
1886
- * "SAP-ContextId" header is only included if requested explicitly (@since 1.86.0).
1886
+ * "SAP-ContextId" header is only included if requested explicitly (since 1.86.0).
1887
1887
  *
1888
1888
  * @param {boolean} [bIncludeContextId]
1889
- * Whether to include the "SAP-ContextId" header (@since 1.86.0)
1889
+ * Whether to include the "SAP-ContextId" header (since 1.86.0)
1890
1890
  * @returns {Object<string>}
1891
1891
  * The map of HTTP headers
1892
1892
  *
@@ -599,6 +599,8 @@ sap.ui.define([
599
599
  * @throws {Error}
600
600
  * If the cache promise for this binding is not yet fulfilled, or if the cache is shared
601
601
  *
602
+ * @abstract
603
+ * @function
602
604
  * @name sap.ui.model.odata.v4.ODataParentBinding#delete
603
605
  * @private
604
606
  */
@@ -1020,6 +1022,7 @@ sap.ui.define([
1020
1022
  * @returns {sap.ui.model.odata.v4.Context}
1021
1023
  * A matching context or <code>undefined</code> if there is none
1022
1024
  *
1025
+ * @abstract
1023
1026
  * @function
1024
1027
  * @name sap.ui.model.odata.v4.ODataParentBinding#findContextForCanonicalPath
1025
1028
  * @private
@@ -1029,6 +1032,7 @@ sap.ui.define([
1029
1032
  * Fire event 'patchCompleted' to attached listeners, if the last PATCH request is completed.
1030
1033
  *
1031
1034
  * @param {boolean} bSuccess Whether the current PATCH request has been processed successfully
1035
+ *
1032
1036
  * @private
1033
1037
  */
1034
1038
  ODataParentBinding.prototype.firePatchCompleted = function (bSuccess) {
@@ -1257,6 +1261,8 @@ sap.ui.define([
1257
1261
  * @param {string} sName - The parameter's name
1258
1262
  * @param {any} vOtherValue - The parameter's other value
1259
1263
  * @returns {boolean} Whether the parameter is "unchanged"
1264
+ *
1265
+ * @private
1260
1266
  */
1261
1267
  ODataParentBinding.prototype.isUnchangedParameter = function (sName, vOtherValue) {
1262
1268
  return this.mParameters[sName] === vOtherValue;
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.132.1
45
+ * @version 1.133.0
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -6,7 +6,7 @@
6
6
 
7
7
  //Provides class sap.ui.model.odata.v4.ODataUtils
8
8
  sap.ui.define([
9
- "sap/ui/core/CalendarType",
9
+ "sap/base/i18n/date/CalendarType",
10
10
  "sap/ui/core/format/DateFormat",
11
11
  "sap/ui/model/odata/ODataUtils",
12
12
  "sap/ui/model/odata/v4/lib/_Batch",