@openui5/sap.ui.core 1.136.1 → 1.138.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.
- package/.eslintrc.json +3 -3
- package/REUSE.toml +0 -28
- package/THIRDPARTY.txt +1 -25
- package/package.json +1 -1
- package/src/jquery.sap.global.js +1 -1
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +3 -3
- package/src/sap/base/Event.js +1 -1
- package/src/sap/base/Eventing.js +1 -1
- package/src/sap/base/config.js +1 -1
- package/src/sap/base/i18n/LanguageTag.js +1 -1
- package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +3 -3
- package/src/sap/ui/base/BindingInfo.js +12 -8
- package/src/sap/ui/base/BindingParser.js +14 -7
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -8
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +15 -42
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/base/_runWithOwner.js +43 -0
- package/src/sap/ui/core/.library +3 -30
- package/src/sap/ui/core/BusyIndicator.js +8 -8
- package/src/sap/ui/core/Component.js +61 -73
- package/src/sap/ui/core/ComponentContainer.js +22 -2
- package/src/sap/ui/core/ComponentMetadata.js +1 -1
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +1 -1
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +2 -2
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +13 -11
- package/src/sap/ui/core/Element.js +1 -3
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/ExtensionPoint.js +4 -4
- package/src/sap/ui/core/Fragment.js +4 -2
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +1 -1
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +1 -1
- package/src/sap/ui/core/Manifest.js +1 -1
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Popup.js +65 -180
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/Theming.js +2 -2
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +1 -1
- package/src/sap/ui/core/UIComponent.js +11 -56
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +5 -1
- package/src/sap/ui/core/_IconRegistry.js +2 -0
- package/src/sap/ui/core/date/UI5Date.js +1 -1
- package/src/sap/ui/core/delegate/ItemNavigation.js +2 -2
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragDropBase.js +12 -2
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +5 -3
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/format/FormatUtils.js +1 -1
- package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
- package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/i18n/interaction_ar.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_bg.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ca.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_cnr.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_cs.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_cy.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_da.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_de.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_el.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_en.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_en_GB.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_en_US_saprigi.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_es.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_es_MX.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_et.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_fi.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_fr.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_fr_CA.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_hi.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_hr.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_hu.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_id.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_it.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_iw.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ja.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_kk.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ko.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_lt.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_lv.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_mk.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ms.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_nl.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_no.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_pl.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_pt.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_pt_PT.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ro.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_ru.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_sh.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_sk.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_sl.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_sr.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_sv.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_th.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_tr.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_uk.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_vi.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_zh_CN.xml +27 -0
- package/src/sap/ui/core/i18n/interaction_zh_TW.xml +27 -0
- package/src/sap/ui/core/interaction/KeyboardInteractionDisplay.js +43 -7
- package/src/sap/ui/core/library.js +3 -3
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +1 -1
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +6 -6
- package/src/sap/ui/core/messagebundle_ar.properties +21 -1
- package/src/sap/ui/core/messagebundle_bg.properties +21 -1
- package/src/sap/ui/core/messagebundle_ca.properties +21 -1
- package/src/sap/ui/core/messagebundle_cnr.properties +21 -1
- package/src/sap/ui/core/messagebundle_cs.properties +21 -1
- package/src/sap/ui/core/messagebundle_cy.properties +21 -1
- package/src/sap/ui/core/messagebundle_da.properties +21 -1
- package/src/sap/ui/core/messagebundle_de.properties +22 -2
- package/src/sap/ui/core/messagebundle_el.properties +21 -1
- package/src/sap/ui/core/messagebundle_en.properties +21 -1
- package/src/sap/ui/core/messagebundle_en_GB.properties +21 -1
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +21 -1
- package/src/sap/ui/core/messagebundle_es.properties +23 -3
- package/src/sap/ui/core/messagebundle_es_MX.properties +21 -1
- package/src/sap/ui/core/messagebundle_et.properties +21 -1
- package/src/sap/ui/core/messagebundle_fi.properties +22 -2
- package/src/sap/ui/core/messagebundle_fr.properties +21 -1
- package/src/sap/ui/core/messagebundle_fr_CA.properties +21 -1
- package/src/sap/ui/core/messagebundle_hi.properties +21 -1
- package/src/sap/ui/core/messagebundle_hr.properties +21 -1
- package/src/sap/ui/core/messagebundle_hu.properties +21 -1
- package/src/sap/ui/core/messagebundle_id.properties +23 -3
- package/src/sap/ui/core/messagebundle_it.properties +21 -1
- package/src/sap/ui/core/messagebundle_iw.properties +21 -1
- package/src/sap/ui/core/messagebundle_ja.properties +21 -1
- package/src/sap/ui/core/messagebundle_kk.properties +23 -3
- package/src/sap/ui/core/messagebundle_ko.properties +21 -1
- package/src/sap/ui/core/messagebundle_lt.properties +21 -1
- package/src/sap/ui/core/messagebundle_lv.properties +21 -1
- package/src/sap/ui/core/messagebundle_mk.properties +24 -4
- package/src/sap/ui/core/messagebundle_ms.properties +21 -1
- package/src/sap/ui/core/messagebundle_nl.properties +21 -1
- package/src/sap/ui/core/messagebundle_no.properties +21 -1
- package/src/sap/ui/core/messagebundle_pl.properties +21 -1
- package/src/sap/ui/core/messagebundle_pt.properties +21 -1
- package/src/sap/ui/core/messagebundle_pt_PT.properties +21 -1
- package/src/sap/ui/core/messagebundle_ro.properties +21 -1
- package/src/sap/ui/core/messagebundle_ru.properties +23 -3
- package/src/sap/ui/core/messagebundle_sh.properties +21 -1
- package/src/sap/ui/core/messagebundle_sk.properties +21 -1
- package/src/sap/ui/core/messagebundle_sl.properties +23 -3
- package/src/sap/ui/core/messagebundle_sr.properties +21 -1
- package/src/sap/ui/core/messagebundle_sv.properties +21 -1
- package/src/sap/ui/core/messagebundle_th.properties +21 -1
- package/src/sap/ui/core/messagebundle_tr.properties +21 -1
- package/src/sap/ui/core/messagebundle_uk.properties +22 -2
- package/src/sap/ui/core/messagebundle_vi.properties +21 -1
- package/src/sap/ui/core/messagebundle_zh_CN.properties +21 -1
- package/src/sap/ui/core/messagebundle_zh_TW.properties +23 -3
- package/src/sap/ui/core/mvc/Controller.js +3 -1
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +12 -181
- package/src/sap/ui/core/mvc/XMLView.js +2 -1
- package/src/sap/ui/core/mvc/_ViewFactory.js +192 -0
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/Route.js +197 -13
- package/src/sap/ui/core/routing/Router.js +19 -8
- package/src/sap/ui/core/routing/RouterHashChanger.js +12 -3
- package/src/sap/ui/core/routing/Target.js +714 -61
- package/src/sap/ui/core/routing/TargetCache.js +205 -25
- package/src/sap/ui/core/routing/Targets.js +162 -67
- package/src/sap/ui/core/routing/Views.js +1 -0
- package/src/sap/ui/core/routing/sync/Route.js +1 -1
- package/src/sap/ui/core/routing/sync/Target.js +11 -1
- package/src/sap/ui/core/routing/sync/TargetCache.js +3 -3
- package/src/sap/ui/core/routing/sync/Targets.js +1 -1
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -48
- package/src/sap/ui/core/service/ServiceFactory.js +44 -4
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +356 -353
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +4 -2
- package/src/sap/ui/core/themes/base/base.less +71 -29
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
- package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
- package/src/sap/ui/core/themes/base/global.less +4 -0
- package/src/sap/ui/core/themes/base/skeleton.less +9 -4
- package/src/sap/ui/core/theming/ThemeHelper.js +1 -18
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +4 -4
- package/src/sap/ui/core/tmpl/Template.js +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/XMLPreprocessor.js +8 -1
- package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +4 -4
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/webc/WebComponent.js +71 -3
- package/src/sap/ui/core/webc/WebComponentMetadata.js +2 -3
- package/src/sap/ui/core/webc/WebComponentRenderer.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +2 -1
- package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +2 -1
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +2 -1
- package/src/sap/ui/model/analytics/odata4analytics.js +2 -1
- package/src/sap/ui/model/json/JSONModel.js +1 -1
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +2 -1
- package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +3 -3
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/Context.js +4 -7
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +9 -9
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +57 -19
- package/src/sap/ui/model/odata/v4/ODataModel.js +8 -7
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +3 -3
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +118 -90
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +29 -0
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +33 -12
- package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +10 -4
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +5 -3
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +47 -16
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/Opa.js +14 -2
- package/src/sap/ui/test/Opa5.js +61 -10
- package/src/sap/ui/test/TestUtils.js +6 -2
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/thirdparty/datajs.js +13 -10
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/ui5loader-autoconfig.js +1 -18
- package/src/ui5loader.js +1 -1
- package/src/sap/ui/core/routing/async/Route.js +0 -186
- package/src/sap/ui/core/routing/async/Target.js +0 -712
- package/src/sap/ui/core/routing/async/TargetCache.js +0 -196
- package/src/sap/ui/core/routing/async/Targets.js +0 -130
- package/src/sap/ui/thirdparty/iscroll-lite.js +0 -603
- package/src/sap/ui/thirdparty/iscroll.js +0 -1104
- package/src/sap/ui/thirdparty/mobiscroll/css/mobiscroll-core.css +0 -416
- package/src/sap/ui/thirdparty/mobiscroll/js/mobiscroll-core.js +0 -127
- package/src/sap/ui/thirdparty/mobiscroll/js/mobiscroll-datetime.js +0 -818
- package/src/sap/ui/thirdparty/mobiscroll/js/mobiscroll-scroller.js +0 -1264
- package/src/sap/ui/thirdparty/swipe-view.js +0 -560
|
@@ -52,79 +52,23 @@ sap.ui.define([
|
|
|
52
52
|
*/
|
|
53
53
|
function _AggregationCache(oRequestor, sResourcePath, oAggregation, mQueryOptions,
|
|
54
54
|
bHasGrandTotal) {
|
|
55
|
-
var fnCount = function () {}, // no specific handling needed for "UI5__count" here
|
|
56
|
-
fnLeaves = null,
|
|
57
|
-
fnResolve,
|
|
58
|
-
that = this;
|
|
59
|
-
|
|
60
55
|
_Cache.call(this, oRequestor, sResourcePath, mQueryOptions, true);
|
|
61
56
|
|
|
62
|
-
this.oAggregation = oAggregation;
|
|
63
|
-
// #getDownloadUrl must be called early (for recursive hierarchy to determine
|
|
64
|
-
// $DistanceFromRoot and for data aggregation before adding $$leaves)
|
|
65
|
-
this.sToString = this.getDownloadUrl("");
|
|
66
57
|
this.aElements = [];
|
|
67
58
|
this.aElements.$byPredicate = {};
|
|
68
59
|
this.aElements.$count = undefined;
|
|
69
60
|
this.aElements.$created = 0; // required for _Cache#drillDown (see _Cache.from$skip)
|
|
70
|
-
this
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.oCountPromise.$resolve = fnResolve;
|
|
77
|
-
} else if (oAggregation.groupLevels.length) {
|
|
78
|
-
mQueryOptions.$$leaves = true; // do this after #getDownloadUrl
|
|
79
|
-
this.oCountPromise = new SyncPromise(function (resolve) {
|
|
80
|
-
fnLeaves = function (oLeaves) {
|
|
81
|
-
// Note: count has type Edm.Int64, represented as string in OData responses;
|
|
82
|
-
// $count should be a number and the loss of precision is acceptable
|
|
83
|
-
resolve(parseInt(oLeaves.UI5__leaves));
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
this.oFirstLevel = this.createGroupLevelCache(null, bHasGrandTotal || !!fnLeaves);
|
|
61
|
+
// Whether this cache is a unified cache, using oFirstLevel with ExpandLevels instead of
|
|
62
|
+
// separate group level caches
|
|
63
|
+
this.bUnifiedCache = oAggregation.expandTo >= Number.MAX_SAFE_INTEGER
|
|
64
|
+
|| !!oAggregation.createInPlace;
|
|
65
|
+
|
|
66
|
+
this.doReset(oAggregation, mQueryOptions, bHasGrandTotal);
|
|
89
67
|
this.addKeptElement = this.oFirstLevel.addKeptElement; // @borrows ...
|
|
90
68
|
this.removeKeptElement = this.oFirstLevel.removeKeptElement; // @borrows ...
|
|
91
69
|
this.requestSideEffects = this.oFirstLevel.requestSideEffects; // @borrows ...
|
|
92
|
-
this.oGrandTotalPromise = undefined;
|
|
93
|
-
if (bHasGrandTotal) {
|
|
94
|
-
this.oGrandTotalPromise = new SyncPromise(function (resolve) {
|
|
95
|
-
_ConcatHelper.enhanceCache(that.oFirstLevel, oAggregation, [fnLeaves,
|
|
96
|
-
function (oGrandTotal) {
|
|
97
|
-
var oGrandTotalCopy;
|
|
98
|
-
|
|
99
|
-
if (oAggregation["grandTotal like 1.84"]) { // rename measures
|
|
100
|
-
_AggregationHelper.removeUI5grand__(oGrandTotal);
|
|
101
|
-
}
|
|
102
|
-
_AggregationHelper.setAnnotations(oGrandTotal, true, true, 0,
|
|
103
|
-
_AggregationHelper.getAllProperties(oAggregation));
|
|
104
|
-
|
|
105
|
-
if (oAggregation.grandTotalAtBottomOnly === false) {
|
|
106
|
-
// Note: make shallow copy *before* there are private annotations!
|
|
107
|
-
oGrandTotalCopy = Object.assign({}, oGrandTotal, {
|
|
108
|
-
"@$ui5.node.isExpanded" : undefined // treat copy as a leaf
|
|
109
|
-
});
|
|
110
|
-
_Helper.setPrivateAnnotation(oGrandTotal, "copy", oGrandTotalCopy);
|
|
111
|
-
_Helper.setPrivateAnnotation(oGrandTotalCopy, "predicate",
|
|
112
|
-
"($isTotal=true)");
|
|
113
|
-
}
|
|
114
|
-
_Helper.setPrivateAnnotation(oGrandTotal, "predicate", "()");
|
|
115
|
-
|
|
116
|
-
resolve(oGrandTotal);
|
|
117
|
-
}, fnCount]);
|
|
118
|
-
});
|
|
119
|
-
} else if (fnLeaves) {
|
|
120
|
-
_ConcatHelper.enhanceCache(that.oFirstLevel, oAggregation, [fnLeaves, fnCount]);
|
|
121
|
-
}
|
|
122
70
|
this.oTreeState = new _TreeState(oAggregation.$NodeProperty,
|
|
123
71
|
(oNode) => _Helper.getKeyFilter(oNode, this.sMetaPath, this.getTypes()));
|
|
124
|
-
// Whether this cache is a unified cache, using oFirstLevel with ExpandLevels instead of
|
|
125
|
-
// separate group level caches
|
|
126
|
-
this.bUnifiedCache = this.oAggregation.expandTo >= Number.MAX_SAFE_INTEGER
|
|
127
|
-
|| !!this.oAggregation.createInPlace;
|
|
128
72
|
}
|
|
129
73
|
|
|
130
74
|
// make _AggregationCache a _Cache, but actively disinherit some critical methods
|
|
@@ -228,7 +172,6 @@ sap.ui.define([
|
|
|
228
172
|
*/
|
|
229
173
|
_AggregationCache.prototype.addElements = function (vReadElements, iOffset, oCache, iStart) {
|
|
230
174
|
var aElements = this.aElements,
|
|
231
|
-
sHierarchyQualifier = this.oAggregation.hierarchyQualifier,
|
|
232
175
|
sNodeProperty = this.oAggregation.$NodeProperty,
|
|
233
176
|
that = this;
|
|
234
177
|
|
|
@@ -250,7 +193,7 @@ sap.ui.define([
|
|
|
250
193
|
oKeptElement = aElements.$byPredicate[sPredicate];
|
|
251
194
|
if (oKeptElement && oKeptElement !== oElement
|
|
252
195
|
&& !(oKeptElement instanceof SyncPromise)) {
|
|
253
|
-
if (
|
|
196
|
+
if (aElements.includes(oKeptElement)) {
|
|
254
197
|
const sNewPredicate = oCache.fixDuplicatePredicate(oElement, sPredicate);
|
|
255
198
|
if (sNewPredicate) {
|
|
256
199
|
sPredicate = sNewPredicate;
|
|
@@ -426,7 +369,7 @@ sap.ui.define([
|
|
|
426
369
|
iRemaining -= this.collapse(
|
|
427
370
|
_Helper.getPrivateAnnotation(oElement, "predicate"), oGroupLock, bSilent, true);
|
|
428
371
|
}
|
|
429
|
-
// exceptions of selection are effectively kept alive
|
|
372
|
+
// exceptions of selection are effectively kept alive
|
|
430
373
|
if (!this.isSelectionDifferent(oElement)) {
|
|
431
374
|
delete aElements.$byPredicate[_Helper.getPrivateAnnotation(oElement, "predicate")];
|
|
432
375
|
delete aElements.$byPredicate[
|
|
@@ -719,6 +662,67 @@ sap.ui.define([
|
|
|
719
662
|
return oCache;
|
|
720
663
|
};
|
|
721
664
|
|
|
665
|
+
/**
|
|
666
|
+
* Hook method for both {@link #constructor} and {@link #reset}. Creates the promises needed
|
|
667
|
+
* for the leaf count and grand total, if applicable. Creates a first level cache and
|
|
668
|
+
* calculates the result of {@link #toString}. Remembers <code>oAggregation</code>, enhancing
|
|
669
|
+
* it with "$NodeProperty" etc. in case of a recursive hierarchy (see
|
|
670
|
+
* {@link sap.ui.model.odata.v4.lib._AggregationHelper.buildApply4Hierarchy} for details).
|
|
671
|
+
*
|
|
672
|
+
* @param {object} oAggregation
|
|
673
|
+
* An object holding the information needed for data aggregation; see also "OData Extension
|
|
674
|
+
* for Data Aggregation Version 4.0"; must already be normalized by
|
|
675
|
+
* {@link _AggregationHelper.buildApply} - it's MODIFIED here!
|
|
676
|
+
* @param {object} mQueryOptions
|
|
677
|
+
* A map of key-value pairs representing the query string - it's MODIFIED here!
|
|
678
|
+
* @param {boolean} bHasGrandTotal
|
|
679
|
+
* Whether a grand total is needed
|
|
680
|
+
*
|
|
681
|
+
* @private
|
|
682
|
+
*/
|
|
683
|
+
_AggregationCache.prototype.doReset = function (oAggregation, mQueryOptions, bHasGrandTotal) {
|
|
684
|
+
this.oAggregation = oAggregation;
|
|
685
|
+
// early call of _AggregationHelper.buildApply to determine $NodeProperty etc.
|
|
686
|
+
this.sToString = this.getDownloadUrl("");
|
|
687
|
+
|
|
688
|
+
const aAdditionalRowHandlers = [];
|
|
689
|
+
this.oCountPromise = undefined;
|
|
690
|
+
if (mQueryOptions.$count) {
|
|
691
|
+
if (oAggregation.hierarchyQualifier) {
|
|
692
|
+
let fnResolve;
|
|
693
|
+
this.oCountPromise = new SyncPromise(function (resolve) {
|
|
694
|
+
fnResolve = resolve;
|
|
695
|
+
});
|
|
696
|
+
this.oCountPromise.$resolve = fnResolve;
|
|
697
|
+
} else if (oAggregation.groupLevels.length) {
|
|
698
|
+
mQueryOptions.$$leaves = true;
|
|
699
|
+
this.oCountPromise = new SyncPromise(function (resolve) {
|
|
700
|
+
aAdditionalRowHandlers.push((oLeaves) => {
|
|
701
|
+
// Note: count has type Edm.Int64, represented as string in OData responses;
|
|
702
|
+
// $count should be a number and the loss of precision is acceptable
|
|
703
|
+
resolve(parseInt(oLeaves.UI5__leaves));
|
|
704
|
+
});
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
this.oGrandTotalPromise = bHasGrandTotal
|
|
709
|
+
? new SyncPromise((resolve) => {
|
|
710
|
+
aAdditionalRowHandlers.push((oGrandTotal) => {
|
|
711
|
+
_AggregationHelper.handleGrandTotal(oAggregation, oGrandTotal);
|
|
712
|
+
resolve(oGrandTotal);
|
|
713
|
+
});
|
|
714
|
+
})
|
|
715
|
+
: undefined;
|
|
716
|
+
|
|
717
|
+
const bHasConcatHelper = aAdditionalRowHandlers.length > 0;
|
|
718
|
+
this.oFirstLevel = this.createGroupLevelCache(null, bHasConcatHelper);
|
|
719
|
+
if (bHasConcatHelper) {
|
|
720
|
+
// no specific handling needed for "UI5__count" here
|
|
721
|
+
aAdditionalRowHandlers.push(function () {});
|
|
722
|
+
_ConcatHelper.enhanceCache(this.oFirstLevel, oAggregation, aAdditionalRowHandlers);
|
|
723
|
+
}
|
|
724
|
+
};
|
|
725
|
+
|
|
722
726
|
/**
|
|
723
727
|
* Expands the given group node by the given number of levels.
|
|
724
728
|
*
|
|
@@ -1261,6 +1265,24 @@ sap.ui.define([
|
|
|
1261
1265
|
} // else: iSiblingRank === undefined => return undefined;
|
|
1262
1266
|
};
|
|
1263
1267
|
|
|
1268
|
+
/**
|
|
1269
|
+
* @override
|
|
1270
|
+
* @see sap.ui.model.odata.v4.lib._Cache#getQueryOptions4Single
|
|
1271
|
+
*/
|
|
1272
|
+
_AggregationCache.prototype.getQueryOptions4Single = function (sPath) {
|
|
1273
|
+
if (sPath !== "") {
|
|
1274
|
+
throw new Error("Unsupported path: " + sPath);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
const mQueryOptions = _Helper.clone(this.mLateQueryOptions ?? this.mQueryOptions);
|
|
1278
|
+
const iIndex = mQueryOptions.$select.indexOf(this.oAggregation.$NodeProperty);
|
|
1279
|
+
if (iIndex >= 0) {
|
|
1280
|
+
mQueryOptions.$select.splice(iIndex, 1);
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
return mQueryOptions;
|
|
1284
|
+
};
|
|
1285
|
+
|
|
1264
1286
|
/**
|
|
1265
1287
|
* @override
|
|
1266
1288
|
* @see sap.ui.model.odata.v4.lib._Cache#getValue
|
|
@@ -1411,18 +1433,15 @@ sap.ui.define([
|
|
|
1411
1433
|
|
|
1412
1434
|
/**
|
|
1413
1435
|
* Determines if the "@$ui5.context.isSelected" annotation of the given element differs from the
|
|
1414
|
-
* annotation at the collection.
|
|
1415
|
-
* annotation is treated as <code>false</code>.
|
|
1436
|
+
* annotation at the collection. Note: A missing annotation is treated as <code>false</code>.
|
|
1416
1437
|
*
|
|
1417
1438
|
* @param {object} oElement - The element
|
|
1418
|
-
* @returns {boolean} Whether
|
|
1419
|
-
* differs from the collection
|
|
1439
|
+
* @returns {boolean} Whether the selection state of the element differs from the collection
|
|
1420
1440
|
*
|
|
1421
1441
|
* @private
|
|
1422
1442
|
*/
|
|
1423
1443
|
_AggregationCache.prototype.isSelectionDifferent = function (oElement) {
|
|
1424
|
-
return
|
|
1425
|
-
&& (oElement["@$ui5.context.isSelected"] ?? false)
|
|
1444
|
+
return (oElement["@$ui5.context.isSelected"] ?? false)
|
|
1426
1445
|
!== (this.aElements["@$ui5.context.isSelected"] ?? false);
|
|
1427
1446
|
};
|
|
1428
1447
|
|
|
@@ -1955,7 +1974,7 @@ sap.ui.define([
|
|
|
1955
1974
|
|
|
1956
1975
|
that.aElements.length = that.aElements.$count = oResult.value.$count;
|
|
1957
1976
|
|
|
1958
|
-
if (that.oGrandTotalPromise) {
|
|
1977
|
+
if (that.aElements.length && that.oGrandTotalPromise) {
|
|
1959
1978
|
that.aElements.$count += 1;
|
|
1960
1979
|
that.aElements.length += 1;
|
|
1961
1980
|
oGrandTotal = that.oGrandTotalPromise.getResult();
|
|
@@ -2092,12 +2111,30 @@ sap.ui.define([
|
|
|
2092
2111
|
*/
|
|
2093
2112
|
_AggregationCache.prototype.refreshKeptElements = function (oGroupLock, fnOnRemove,
|
|
2094
2113
|
bIgnorePendingChanges, _bDropApply) {
|
|
2114
|
+
if (!this.oAggregation.hierarchyQualifier) {
|
|
2115
|
+
return; // no own request for data aggregation
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2095
2118
|
// "super" call (like @borrows ...)
|
|
2096
2119
|
const fnSuper = this.oFirstLevel.refreshKeptElements;
|
|
2097
2120
|
return fnSuper.call(this, oGroupLock, fnOnRemove, bIgnorePendingChanges,
|
|
2098
2121
|
/*bDropApply*/true);
|
|
2099
2122
|
};
|
|
2100
2123
|
|
|
2124
|
+
/**
|
|
2125
|
+
* @override
|
|
2126
|
+
* @see sap.ui.model.odata.v4.lib._Cache#replaceElement
|
|
2127
|
+
*/
|
|
2128
|
+
_AggregationCache.prototype.replaceElement = function (aElements, _iIndex, sPredicate,
|
|
2129
|
+
oElement, mTypeForMetaPath, sPath, bKeepReportedMessagesPath) {
|
|
2130
|
+
// Note: iStart is not needed here because we know we have a key predicate
|
|
2131
|
+
this.visitResponse(oElement, mTypeForMetaPath,
|
|
2132
|
+
_Helper.getMetaPath(_Helper.buildPath(this.sMetaPath, sPath)), sPath + sPredicate,
|
|
2133
|
+
undefined, bKeepReportedMessagesPath);
|
|
2134
|
+
|
|
2135
|
+
_Helper.updateAll({/*mChangeListeners*/}, "", aElements.$byPredicate[sPredicate], oElement);
|
|
2136
|
+
};
|
|
2137
|
+
|
|
2101
2138
|
/**
|
|
2102
2139
|
* Sends a request for the elements identified by the given key predicates. Returns predicates
|
|
2103
2140
|
* for elements matching the current filter.
|
|
@@ -2363,15 +2400,12 @@ sap.ui.define([
|
|
|
2363
2400
|
*/
|
|
2364
2401
|
_AggregationCache.prototype.reset = function (aKeptElementPredicates, sGroupId, mQueryOptions,
|
|
2365
2402
|
oAggregation, bIsGrouped) {
|
|
2366
|
-
var fnResolve,
|
|
2367
|
-
that = this;
|
|
2368
|
-
|
|
2369
2403
|
if (bIsGrouped) {
|
|
2370
2404
|
throw new Error("Unsupported grouping via sorter");
|
|
2371
2405
|
}
|
|
2372
2406
|
|
|
2373
|
-
aKeptElementPredicates.forEach(
|
|
2374
|
-
var oKeptElement =
|
|
2407
|
+
aKeptElementPredicates.forEach((sPredicate) => {
|
|
2408
|
+
var oKeptElement = this.aElements.$byPredicate[sPredicate];
|
|
2375
2409
|
|
|
2376
2410
|
if (_Helper.hasPrivateAnnotation(oKeptElement, "placeholder")) {
|
|
2377
2411
|
throw new Error("Unexpected placeholder");
|
|
@@ -2382,29 +2416,22 @@ sap.ui.define([
|
|
|
2382
2416
|
_Helper.setPrivateAnnotation(oKeptElement, "predicate", sPredicate);
|
|
2383
2417
|
});
|
|
2384
2418
|
|
|
2385
|
-
this.oAggregation = oAggregation;
|
|
2386
2419
|
// "super" call (like @borrows ...)
|
|
2387
2420
|
const fnSuper = this.oFirstLevel.reset;
|
|
2388
2421
|
fnSuper.call(this, aKeptElementPredicates, sGroupId, mQueryOptions);
|
|
2389
|
-
// reset modifies the cache's query options => recalculate result of #toString
|
|
2390
|
-
this.sToString = this.getDownloadUrl("");
|
|
2391
2422
|
if (sGroupId) { // sGroupId means we are in a side-effects refresh
|
|
2392
2423
|
this.oBackup.oCountPromise = this.oCountPromise;
|
|
2393
2424
|
this.oBackup.oFirstLevel = this.oFirstLevel;
|
|
2425
|
+
this.oBackup.oGrandTotalPromise = this.oGrandTotalPromise;
|
|
2394
2426
|
this.oBackup.bUnifiedCache = this.bUnifiedCache;
|
|
2395
2427
|
this.bUnifiedCache = true;
|
|
2396
2428
|
} else {
|
|
2397
2429
|
this.oTreeState.reset();
|
|
2398
2430
|
}
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
fnResolve = resolve;
|
|
2404
|
-
});
|
|
2405
|
-
this.oCountPromise.$resolve = fnResolve;
|
|
2406
|
-
}
|
|
2407
|
-
this.oFirstLevel = this.createGroupLevelCache();
|
|
2431
|
+
oAggregation.$ExpandLevels = this.oTreeState.getExpandLevels();
|
|
2432
|
+
|
|
2433
|
+
this.doReset(oAggregation, mQueryOptions,
|
|
2434
|
+
_AggregationHelper.hasGrandTotal(oAggregation.aggregate));
|
|
2408
2435
|
};
|
|
2409
2436
|
|
|
2410
2437
|
/**
|
|
@@ -2424,6 +2451,7 @@ sap.ui.define([
|
|
|
2424
2451
|
if (bReally) {
|
|
2425
2452
|
this.oCountPromise = this.oBackup.oCountPromise;
|
|
2426
2453
|
this.oFirstLevel = this.oBackup.oFirstLevel;
|
|
2454
|
+
this.oGrandTotalPromise = this.oBackup.oGrandTotalPromise;
|
|
2427
2455
|
this.bUnifiedCache = this.oBackup.bUnifiedCache;
|
|
2428
2456
|
}
|
|
2429
2457
|
// "super" call (like @borrows ...)
|
|
@@ -2857,7 +2885,7 @@ sap.ui.define([
|
|
|
2857
2885
|
sDeepResourcePath, bSharedRequest);
|
|
2858
2886
|
};
|
|
2859
2887
|
|
|
2860
|
-
// @override sap.ui.model.odata.v4.lib.
|
|
2888
|
+
// @override sap.ui.model.odata.v4.lib._CollectionCache#fixDuplicatePredicate
|
|
2861
2889
|
_AggregationCache.fixDuplicatePredicate = function (oElement, sPredicate) {
|
|
2862
2890
|
if (sPredicate === "('')" || sPredicate.includes("=''")) {
|
|
2863
2891
|
Log.warning("Duplicate key predicate: " + sPredicate, this.toString(),
|
|
@@ -1123,6 +1123,35 @@ sap.ui.define([
|
|
|
1123
1123
|
return mQueryOptions;
|
|
1124
1124
|
},
|
|
1125
1125
|
|
|
1126
|
+
/**
|
|
1127
|
+
* Handles the given server response for a grand total row and updates it as needed by the
|
|
1128
|
+
* client.
|
|
1129
|
+
*
|
|
1130
|
+
* @param {object} oAggregation
|
|
1131
|
+
* An object holding the information needed for data aggregation; see {@link .buildApply}
|
|
1132
|
+
* @param {object} oGrandTotal
|
|
1133
|
+
* An object representing a grand total row response from the server
|
|
1134
|
+
*
|
|
1135
|
+
* @public
|
|
1136
|
+
*/
|
|
1137
|
+
handleGrandTotal : function (oAggregation, oGrandTotal) {
|
|
1138
|
+
if (oAggregation["grandTotal like 1.84"]) { // rename measures
|
|
1139
|
+
_AggregationHelper.removeUI5grand__(oGrandTotal);
|
|
1140
|
+
}
|
|
1141
|
+
_AggregationHelper.setAnnotations(oGrandTotal, true, true, 0,
|
|
1142
|
+
_AggregationHelper.getAllProperties(oAggregation));
|
|
1143
|
+
|
|
1144
|
+
if (oAggregation.grandTotalAtBottomOnly === false) {
|
|
1145
|
+
// Note: make shallow copy *before* there are private annotations!
|
|
1146
|
+
const oGrandTotalCopy = Object.assign({}, oGrandTotal, {
|
|
1147
|
+
"@$ui5.node.isExpanded" : undefined // treat copy as a leaf
|
|
1148
|
+
});
|
|
1149
|
+
_Helper.setPrivateAnnotation(oGrandTotal, "copy", oGrandTotalCopy);
|
|
1150
|
+
_Helper.setPrivateAnnotation(oGrandTotalCopy, "predicate", "($isTotal=true)");
|
|
1151
|
+
}
|
|
1152
|
+
_Helper.setPrivateAnnotation(oGrandTotal, "predicate", "()");
|
|
1153
|
+
},
|
|
1154
|
+
|
|
1126
1155
|
/**
|
|
1127
1156
|
* Tells whether grand total values are needed for at least one aggregatable property.
|
|
1128
1157
|
*
|
|
@@ -1322,6 +1322,22 @@ sap.ui.define([
|
|
|
1322
1322
|
return this.mQueryOptions;
|
|
1323
1323
|
};
|
|
1324
1324
|
|
|
1325
|
+
/**
|
|
1326
|
+
* Returns this cache's query options corresponding to the given path (already cloned!) as
|
|
1327
|
+
* suitable for a single-entity GET request.
|
|
1328
|
+
*
|
|
1329
|
+
* @param {string} sPath
|
|
1330
|
+
* The entity collection's path within this cache, may be <code>""</code>
|
|
1331
|
+
* @returns {object|undefined} The query options as a clone, if any
|
|
1332
|
+
*
|
|
1333
|
+
* @protected
|
|
1334
|
+
* @see #getQueryOptions
|
|
1335
|
+
* @see #refreshSingle
|
|
1336
|
+
*/
|
|
1337
|
+
_Cache.prototype.getQueryOptions4Single = function (sPath) {
|
|
1338
|
+
return _Helper.clone(_Helper.getQueryOptionsForPath(this.mQueryOptions, sPath));
|
|
1339
|
+
};
|
|
1340
|
+
|
|
1325
1341
|
/**
|
|
1326
1342
|
* Gets the cache's resource path.
|
|
1327
1343
|
*
|
|
@@ -1485,8 +1501,7 @@ sap.ui.define([
|
|
|
1485
1501
|
&& that.oRequestor.getModelInterface().fetchMetadata(
|
|
1486
1502
|
that.sMetaPath + "/@com.sap.vocabularies.Common.v1.Messages/$Path"
|
|
1487
1503
|
).getResult(),
|
|
1488
|
-
mQueryOptions =
|
|
1489
|
-
_Helper.getQueryOptionsForPath(that.mQueryOptions, sPath)),
|
|
1504
|
+
mQueryOptions = that.getQueryOptions4Single(sPath),
|
|
1490
1505
|
sReadUrl;
|
|
1491
1506
|
|
|
1492
1507
|
if (iIndex >= 0) {
|
|
@@ -1820,7 +1835,7 @@ sap.ui.define([
|
|
|
1820
1835
|
* @param {boolean} [bKeepReportedMessagesPath]
|
|
1821
1836
|
* Whether <code>this.sReportedMessagesPath</code> should be kept unchanged
|
|
1822
1837
|
*
|
|
1823
|
-
* @
|
|
1838
|
+
* @protected
|
|
1824
1839
|
*/
|
|
1825
1840
|
_Cache.prototype.replaceElement = function (aElements, iIndex, sPredicate, oElement,
|
|
1826
1841
|
mTypeForMetaPath, sPath, bKeepReportedMessagesPath) {
|
|
@@ -3805,8 +3820,9 @@ sap.ui.define([
|
|
|
3805
3820
|
end : iEnd,
|
|
3806
3821
|
promise : new SyncPromise(function (resolve, reject) {
|
|
3807
3822
|
fnResolve = resolve;
|
|
3808
|
-
fnReject = function () {
|
|
3809
|
-
const oError = new Error("$$separate: canceled " + sProperty
|
|
3823
|
+
fnReject = function (oError0) {
|
|
3824
|
+
const oError = new Error("$$separate: canceled " + sProperty,
|
|
3825
|
+
{cause : oError0});
|
|
3810
3826
|
oError.canceled = true;
|
|
3811
3827
|
reject(oError);
|
|
3812
3828
|
};
|
|
@@ -3819,9 +3835,9 @@ sap.ui.define([
|
|
|
3819
3835
|
const oResult = await this.oRequestor.request("GET", sReadUrl,
|
|
3820
3836
|
this.oRequestor.lockGroup("$single", this));
|
|
3821
3837
|
|
|
3822
|
-
let
|
|
3823
|
-
await oMainPromise.catch(() => { /* handled by caller */
|
|
3824
|
-
|
|
3838
|
+
let oMainError;
|
|
3839
|
+
await oMainPromise.catch((oError) => { /* handled by caller */
|
|
3840
|
+
oMainError = oError;
|
|
3825
3841
|
});
|
|
3826
3842
|
|
|
3827
3843
|
const iIndex = this.mSeparateProperty2ReadRequests[sProperty].indexOf(oReadRange);
|
|
@@ -3831,8 +3847,8 @@ sap.ui.define([
|
|
|
3831
3847
|
}
|
|
3832
3848
|
|
|
3833
3849
|
this.mSeparateProperty2ReadRequests[sProperty].splice(iIndex, 1);
|
|
3834
|
-
if (
|
|
3835
|
-
fnReject();
|
|
3850
|
+
if (oMainError) {
|
|
3851
|
+
fnReject(oMainError);
|
|
3836
3852
|
return;
|
|
3837
3853
|
}
|
|
3838
3854
|
|
|
@@ -3842,6 +3858,10 @@ sap.ui.define([
|
|
|
3842
3858
|
const oElement = this.aElements.$byPredicate[sPredicate];
|
|
3843
3859
|
if (oElement) {
|
|
3844
3860
|
if (oElement["@odata.etag"] === oSeparateData["@odata.etag"]) {
|
|
3861
|
+
if (oElement[sProperty]?.["@odata.etag"]
|
|
3862
|
+
!== oSeparateData[sProperty]?.["@odata.etag"]) {
|
|
3863
|
+
delete oElement[sProperty];
|
|
3864
|
+
}
|
|
3845
3865
|
_Helper.updateSelected(this.mChangeListeners, sPredicate, oElement,
|
|
3846
3866
|
oSeparateData, [sProperty]);
|
|
3847
3867
|
} else {
|
|
@@ -3853,7 +3873,7 @@ sap.ui.define([
|
|
|
3853
3873
|
fnResolve();
|
|
3854
3874
|
fnSeparateReceived(sProperty, iStart, iEnd);
|
|
3855
3875
|
} catch (oError) {
|
|
3856
|
-
fnReject();
|
|
3876
|
+
fnReject(oError);
|
|
3857
3877
|
// do not clean up mSeparateProperty2ReadRequests to avoid late property requests
|
|
3858
3878
|
fnSeparateReceived(sProperty, iStart, iEnd, oError);
|
|
3859
3879
|
}
|
|
@@ -4537,7 +4557,8 @@ sap.ui.define([
|
|
|
4537
4557
|
|
|
4538
4558
|
if (bConfirm) {
|
|
4539
4559
|
delete mHeaders["Prefer"];
|
|
4540
|
-
|
|
4560
|
+
// decomposed error indicates request inside change set (but not alone)
|
|
4561
|
+
return post(oGroupLock0.getUnlockedCopy(!oError.decomposed));
|
|
4541
4562
|
}
|
|
4542
4563
|
|
|
4543
4564
|
oCanceledError = Error("Action canceled due to strict handling");
|
|
@@ -28,7 +28,8 @@ sap.ui.define([
|
|
|
28
28
|
* @param {boolean} [bModifying]
|
|
29
29
|
* Whether the reason for the group lock is a modifying request
|
|
30
30
|
* @param {number} [iSerialNumber=Infinity]
|
|
31
|
-
* A serial number which may be used on unlock
|
|
31
|
+
* A {@link #getSerialNumber serial number} which may be used on unlock, or <code>NaN</code>
|
|
32
|
+
* if none should be used
|
|
32
33
|
* @param {function} [fnCancel]
|
|
33
34
|
* Function that is called when the group lock is canceled
|
|
34
35
|
* @throws {Error}
|
|
@@ -99,9 +100,10 @@ sap.ui.define([
|
|
|
99
100
|
* Returns the serial number.
|
|
100
101
|
*
|
|
101
102
|
* @returns {number}
|
|
102
|
-
* The serial number
|
|
103
|
+
* The serial number or <code>NaN</code> if none should be used
|
|
103
104
|
*
|
|
104
105
|
* @public
|
|
106
|
+
* @see #getUnlockedCopy
|
|
105
107
|
*/
|
|
106
108
|
_GroupLock.prototype.getSerialNumber = function () {
|
|
107
109
|
return this.iSerialNumber;
|
|
@@ -112,13 +114,17 @@ sap.ui.define([
|
|
|
112
114
|
* lock on which {@link #unlock} has already been called (e.g. when one group is used to create
|
|
113
115
|
* multiple requests).
|
|
114
116
|
*
|
|
117
|
+
* @param {boolean} [bNoSerialNumber]
|
|
118
|
+
* Whether to replace the old serial number with <code>NaN</code> instead of keeping it
|
|
115
119
|
* @returns {sap.ui.model.odata.v4.lib._GroupLock}
|
|
116
120
|
* The group lock
|
|
117
121
|
*
|
|
118
122
|
* @public
|
|
123
|
+
* @see #getSerialNumber
|
|
119
124
|
*/
|
|
120
|
-
_GroupLock.prototype.getUnlockedCopy = function () {
|
|
121
|
-
return new _GroupLock(this.sGroupId, this.oOwner, false, false,
|
|
125
|
+
_GroupLock.prototype.getUnlockedCopy = function (bNoSerialNumber) {
|
|
126
|
+
return new _GroupLock(this.sGroupId, this.oOwner, false, false,
|
|
127
|
+
bNoSerialNumber ? NaN : this.iSerialNumber);
|
|
122
128
|
};
|
|
123
129
|
|
|
124
130
|
/**
|
|
@@ -591,8 +591,6 @@ sap.ui.define([
|
|
|
591
591
|
* response JSON object (if available)
|
|
592
592
|
* <li> <code>isConcurrentModification</code>: (optional) <code>true</code> In case of a
|
|
593
593
|
* concurrent modification detected via ETags (i.e. HTTP status code 412)
|
|
594
|
-
* <li> <code>strictHandlingFailed</code>: (optional) <code>true</code> In case of HTTP
|
|
595
|
-
* status code 412 and response header "Preference-Applied:handling=strict"
|
|
596
594
|
* <li> <code>message</code>: Error message
|
|
597
595
|
* <li> <code>requestUrl</code>: (optional) The absolute request URL
|
|
598
596
|
* <li> <code>resourcePath</code>: (optional) The path by which this resource has
|
|
@@ -602,6 +600,8 @@ sap.ui.define([
|
|
|
602
600
|
* that header value was an HTTP date or a delay in seconds.
|
|
603
601
|
* <li> <code>status</code>: HTTP status code
|
|
604
602
|
* <li> <code>statusText</code>: (optional) HTTP status text
|
|
603
|
+
* <li> <code>strictHandlingFailed</code>: (optional) <code>true</code> In case of HTTP
|
|
604
|
+
* status code 412 and response header "Preference-Applied:handling=strict"
|
|
605
605
|
* </ul>
|
|
606
606
|
* @see <a href=
|
|
607
607
|
* "http://docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html#_Representing_Errors_in"
|
|
@@ -807,7 +807,8 @@ sap.ui.define([
|
|
|
807
807
|
* URL of the service document used to resolve relative request URLs
|
|
808
808
|
* @returns {Error[]}
|
|
809
809
|
* One error for each request given, suitable for
|
|
810
|
-
* {@link sap.ui.model.odata.v4.ODataModel#reportError}
|
|
810
|
+
* {@link sap.ui.model.odata.v4.ODataModel#reportError} and marked as
|
|
811
|
+
* <code>decomposed</code>
|
|
811
812
|
*
|
|
812
813
|
* @public
|
|
813
814
|
*/
|
|
@@ -842,6 +843,7 @@ sap.ui.define([
|
|
|
842
843
|
return sContentID === oRequest.$ContentID;
|
|
843
844
|
}
|
|
844
845
|
|
|
846
|
+
oClone.decomposed = true;
|
|
845
847
|
oClone.error = _Helper.clone(oError.error);
|
|
846
848
|
oClone.requestUrl = sServiceUrl + oRequest.url;
|
|
847
849
|
oClone.resourcePath = oRequest.$resourcePath;
|
|
@@ -450,34 +450,53 @@ sap.ui.define([
|
|
|
450
450
|
|
|
451
451
|
/**
|
|
452
452
|
* Throws an error if the new request uses strict handling and there is a change set containing
|
|
453
|
-
* a strict handling request except the one at index <code>iChangeSetNo</code>.
|
|
453
|
+
* a strict handling request except the one at index <code>iChangeSetNo</code>. On the other
|
|
454
|
+
* hand, in case of the "odata.continue-on-error" preference, every request using strict
|
|
455
|
+
* handling must belong to its own change set.
|
|
454
456
|
*
|
|
455
457
|
* @param {object} oRequest
|
|
456
|
-
* The new request
|
|
458
|
+
* The new request or <code>null</code> to re-check all change sets as a preparation for the
|
|
459
|
+
* "odata.continue-on-error" preference
|
|
457
460
|
* @param {object[]} aRequests
|
|
458
461
|
* The batch queue
|
|
459
|
-
* @param {number} iChangeSetNo
|
|
460
|
-
* The index of the irrelevant change set
|
|
462
|
+
* @param {number} [iChangeSetNo]
|
|
463
|
+
* The index of the irrelevant change set; ignored for a <code>null</code> request
|
|
461
464
|
* @throws {Error}
|
|
462
465
|
* If there is a conflicting change set
|
|
463
466
|
*
|
|
464
467
|
* @private
|
|
465
468
|
*/
|
|
466
469
|
_Requestor.prototype.checkConflictingStrictRequest = function (oRequest, aRequests,
|
|
467
|
-
|
|
470
|
+
iChangeSetNo) {
|
|
471
|
+
function hasManyWithStrictHandling(aChangeSet) {
|
|
472
|
+
return aChangeSet.filter(isUsingStrictHandling).length > 1;
|
|
473
|
+
}
|
|
474
|
+
|
|
468
475
|
function isOtherChangeSetWithStrictHandling(aChangeSet, i) {
|
|
469
476
|
return iChangeSetNo !== i && aChangeSet.some(isUsingStrictHandling);
|
|
470
477
|
}
|
|
471
478
|
|
|
472
479
|
function isUsingStrictHandling(oRequest0) {
|
|
473
|
-
return oRequest0.headers.Prefer
|
|
480
|
+
return oRequest0.headers.Prefer?.includes("handling=strict");
|
|
474
481
|
}
|
|
475
482
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
483
|
+
const sMessage = "Each request with strict handling must belong to its own change set due"
|
|
484
|
+
+ ' to the "odata.continue-on-error" preference';
|
|
485
|
+
const aChangeSets = aRequests.slice(0, aRequests.iChangeSet + 1);
|
|
486
|
+
if (oRequest === null) {
|
|
487
|
+
if (aChangeSets.some(hasManyWithStrictHandling)) {
|
|
488
|
+
throw new Error(sMessage);
|
|
489
|
+
}
|
|
490
|
+
} else if (aRequests.bContinueOnError) {
|
|
491
|
+
if (aChangeSets[iChangeSetNo].length
|
|
492
|
+
&& (isUsingStrictHandling(oRequest)
|
|
493
|
+
|| isUsingStrictHandling(aChangeSets[iChangeSetNo][0]))) {
|
|
494
|
+
throw new Error(sMessage);
|
|
495
|
+
}
|
|
496
|
+
} else if (isUsingStrictHandling(oRequest)
|
|
497
|
+
&& aChangeSets.some(isOtherChangeSetWithStrictHandling)) {
|
|
498
|
+
throw new Error(
|
|
499
|
+
"All requests with strict handling must belong to the same change set");
|
|
481
500
|
}
|
|
482
501
|
};
|
|
483
502
|
|
|
@@ -1793,7 +1812,8 @@ sap.ui.define([
|
|
|
1793
1812
|
* other group ID values, the request is added to the given group and you can use
|
|
1794
1813
|
* {@link #submitBatch} to send all requests in that group. This group lock will be unlocked
|
|
1795
1814
|
* immediately, even if the request itself is queued. The request is rejected if the lock is
|
|
1796
|
-
* already canceled.
|
|
1815
|
+
* already canceled. For a group lock w/o a serial number, a non-GET is put into a change set
|
|
1816
|
+
* of its own (unless <code>bAtFront</code> is used).
|
|
1797
1817
|
* @param {object} [mHeaders]
|
|
1798
1818
|
* Map of request-specific headers, overriding both the mandatory OData V4 headers and the
|
|
1799
1819
|
* default headers given to the factory. This map of headers must not contain
|
|
@@ -1843,8 +1863,10 @@ sap.ui.define([
|
|
|
1843
1863
|
* <code>oGroupLock</code> is already canceled.
|
|
1844
1864
|
* @throws {Error} If
|
|
1845
1865
|
* <ul>
|
|
1846
|
-
* <li>group ID is '$cached'
|
|
1847
|
-
* <li>group ID is '$single' and there is already an existing batch queue for this group
|
|
1866
|
+
* <li>group ID is '$cached'; the error has a property <code>$cached = true</code>,
|
|
1867
|
+
* <li>group ID is '$single' and there is already an existing batch queue for this group,
|
|
1868
|
+
* <li>the {@link #checkConflictingStrictRequest rules for strict handling} w.r.t. change
|
|
1869
|
+
* sets are violated
|
|
1848
1870
|
* </ul>
|
|
1849
1871
|
* @public
|
|
1850
1872
|
*/
|
|
@@ -1911,13 +1933,18 @@ sap.ui.define([
|
|
|
1911
1933
|
} else if (bAtFront) { // add at front of first change set
|
|
1912
1934
|
aRequests[0].unshift(oRequest);
|
|
1913
1935
|
} else { // push into change set which was current when the request was initiated
|
|
1936
|
+
if (!iRequestSerialNumber && aRequests[aRequests.iChangeSet].length) {
|
|
1937
|
+
that.addChangeSet(sGroupId);
|
|
1938
|
+
}
|
|
1914
1939
|
iChangeSetNo = aRequests.iChangeSet;
|
|
1915
1940
|
while (aRequests[iChangeSetNo].iSerialNumber > iRequestSerialNumber) {
|
|
1916
1941
|
iChangeSetNo -= 1;
|
|
1917
1942
|
}
|
|
1918
1943
|
that.checkConflictingStrictRequest(oRequest, aRequests, iChangeSetNo);
|
|
1919
|
-
|
|
1920
1944
|
aRequests[iChangeSetNo].push(oRequest);
|
|
1945
|
+
if (!iRequestSerialNumber) {
|
|
1946
|
+
that.addChangeSet(sGroupId);
|
|
1947
|
+
}
|
|
1921
1948
|
}
|
|
1922
1949
|
if (sGroupId === "$single") {
|
|
1923
1950
|
that.submitBatch("$single").catch(that.oModelInterface.getReporter());
|
|
@@ -2146,11 +2173,15 @@ sap.ui.define([
|
|
|
2146
2173
|
*
|
|
2147
2174
|
* @param {string} sGroupId
|
|
2148
2175
|
* The group ID
|
|
2176
|
+
* @throws {Error} If the {@link #checkConflictingStrictRequest rules for strict handling}
|
|
2177
|
+
* w.r.t. change sets are violated
|
|
2149
2178
|
*
|
|
2150
2179
|
* @public
|
|
2151
2180
|
*/
|
|
2152
2181
|
_Requestor.prototype.setContinueOnError = function (sGroupId) {
|
|
2153
|
-
this.getOrCreateBatchQueue(sGroupId)
|
|
2182
|
+
const aRequests = this.getOrCreateBatchQueue(sGroupId);
|
|
2183
|
+
this.checkConflictingStrictRequest(null, aRequests);
|
|
2184
|
+
aRequests.bContinueOnError = true;
|
|
2154
2185
|
};
|
|
2155
2186
|
|
|
2156
2187
|
/**
|