@sapui5/sap.fe.templates 1.100.0 → 1.101.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 (132) hide show
  1. package/package.json +4 -5
  2. package/src/sap/fe/templates/.library +1 -2
  3. package/src/sap/fe/templates/AnalyticalListPage/Component.js +24 -12
  4. package/src/sap/fe/templates/AnalyticalListPage/Component.ts +6 -0
  5. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +30 -32
  6. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +25 -0
  7. package/src/sap/fe/templates/Feedback.js +80 -0
  8. package/src/sap/fe/templates/Feedback.ts +67 -0
  9. package/src/sap/fe/templates/ListComponent.js +156 -118
  10. package/src/sap/fe/templates/ListComponent.ts +105 -0
  11. package/src/sap/fe/templates/ListReport/Component.js +82 -53
  12. package/src/sap/fe/templates/ListReport/Component.ts +39 -0
  13. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +123 -112
  14. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +100 -0
  15. package/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -1
  16. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1111 -1081
  17. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +1009 -0
  18. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +54 -53
  19. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +55 -0
  20. package/src/sap/fe/templates/ListReport/overrides/Share.js +134 -137
  21. package/src/sap/fe/templates/ListReport/overrides/Share.ts +134 -0
  22. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +443 -428
  23. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +413 -0
  24. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +25 -25
  25. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +72 -0
  26. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +62 -0
  27. package/src/sap/fe/templates/ListReport/view/fragments/{MultipleMode.fragment.xml → MultipleModeOld.fragment.xml} +24 -23
  28. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +478 -514
  29. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.ts +511 -0
  30. package/src/sap/fe/templates/ObjectPage/Component.js +169 -138
  31. package/src/sap/fe/templates/ObjectPage/Component.ts +131 -0
  32. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +140 -142
  33. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +116 -0
  34. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +3 -9
  35. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1530 -1447
  36. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +1442 -0
  37. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +136 -101
  38. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +84 -0
  39. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +24 -21
  40. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.ts +10 -0
  41. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +98 -53
  42. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +50 -0
  43. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +20 -19
  44. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.ts +15 -0
  45. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +50 -47
  46. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +47 -0
  47. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +34 -34
  48. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +34 -0
  49. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +15 -15
  50. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +13 -0
  51. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +11 -11
  52. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +7 -0
  53. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +55 -52
  54. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +57 -0
  55. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +15 -17
  56. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +13 -0
  57. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +13 -17
  58. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +14 -0
  59. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +23 -21
  60. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +21 -0
  61. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +310 -317
  62. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +316 -0
  63. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +66 -57
  64. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +65 -0
  65. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +1 -1
  66. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +1 -1
  67. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +18 -24
  68. package/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +11 -9
  69. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +4 -4
  70. package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +27 -0
  71. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +851 -817
  72. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +795 -0
  73. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +205 -189
  74. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +178 -0
  75. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +484 -459
  76. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +438 -0
  77. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +16 -14
  78. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +20 -0
  79. package/src/sap/fe/templates/TableScroller.js +45 -53
  80. package/src/sap/fe/templates/TableScroller.ts +48 -0
  81. package/src/sap/fe/templates/controls/Chart.fragment.xml +18 -17
  82. package/src/sap/fe/templates/controls/MacroChart.fragment.xml +22 -0
  83. package/src/sap/fe/templates/library.js +49 -63
  84. package/src/sap/fe/templates/library.ts +57 -0
  85. package/src/sap/fe/templates/messagebundle.properties +19 -7
  86. package/src/sap/fe/templates/messagebundle_ar.properties +6 -2
  87. package/src/sap/fe/templates/messagebundle_bg.properties +6 -2
  88. package/src/sap/fe/templates/messagebundle_ca.properties +6 -2
  89. package/src/sap/fe/templates/messagebundle_cs.properties +6 -2
  90. package/src/sap/fe/templates/messagebundle_cy.properties +6 -2
  91. package/src/sap/fe/templates/messagebundle_da.properties +6 -2
  92. package/src/sap/fe/templates/messagebundle_de.properties +6 -2
  93. package/src/sap/fe/templates/messagebundle_el.properties +6 -2
  94. package/src/sap/fe/templates/messagebundle_en.properties +6 -2
  95. package/src/sap/fe/templates/messagebundle_en_GB.properties +6 -2
  96. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +6 -2
  97. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +6 -2
  98. package/src/sap/fe/templates/messagebundle_es.properties +6 -2
  99. package/src/sap/fe/templates/messagebundle_es_MX.properties +6 -2
  100. package/src/sap/fe/templates/messagebundle_et.properties +6 -2
  101. package/src/sap/fe/templates/messagebundle_fi.properties +6 -2
  102. package/src/sap/fe/templates/messagebundle_fr.properties +6 -2
  103. package/src/sap/fe/templates/messagebundle_fr_CA.properties +6 -2
  104. package/src/sap/fe/templates/messagebundle_hi.properties +6 -2
  105. package/src/sap/fe/templates/messagebundle_hr.properties +6 -2
  106. package/src/sap/fe/templates/messagebundle_hu.properties +6 -2
  107. package/src/sap/fe/templates/messagebundle_id.properties +6 -2
  108. package/src/sap/fe/templates/messagebundle_it.properties +6 -2
  109. package/src/sap/fe/templates/messagebundle_iw.properties +6 -2
  110. package/src/sap/fe/templates/messagebundle_ja.properties +6 -2
  111. package/src/sap/fe/templates/messagebundle_kk.properties +6 -2
  112. package/src/sap/fe/templates/messagebundle_ko.properties +6 -2
  113. package/src/sap/fe/templates/messagebundle_lt.properties +6 -2
  114. package/src/sap/fe/templates/messagebundle_lv.properties +6 -2
  115. package/src/sap/fe/templates/messagebundle_ms.properties +6 -2
  116. package/src/sap/fe/templates/messagebundle_nl.properties +6 -2
  117. package/src/sap/fe/templates/messagebundle_no.properties +6 -2
  118. package/src/sap/fe/templates/messagebundle_pl.properties +6 -2
  119. package/src/sap/fe/templates/messagebundle_pt.properties +6 -2
  120. package/src/sap/fe/templates/messagebundle_pt_PT.properties +6 -2
  121. package/src/sap/fe/templates/messagebundle_ro.properties +6 -2
  122. package/src/sap/fe/templates/messagebundle_ru.properties +6 -2
  123. package/src/sap/fe/templates/messagebundle_sh.properties +6 -2
  124. package/src/sap/fe/templates/messagebundle_sk.properties +6 -2
  125. package/src/sap/fe/templates/messagebundle_sl.properties +6 -2
  126. package/src/sap/fe/templates/messagebundle_sv.properties +6 -2
  127. package/src/sap/fe/templates/messagebundle_th.properties +6 -2
  128. package/src/sap/fe/templates/messagebundle_tr.properties +6 -2
  129. package/src/sap/fe/templates/messagebundle_uk.properties +6 -2
  130. package/src/sap/fe/templates/messagebundle_vi.properties +6 -2
  131. package/src/sap/fe/templates/messagebundle_zh_CN.properties +6 -2
  132. package/src/sap/fe/templates/messagebundle_zh_TW.properties +6 -2
@@ -1,145 +1,143 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(["sap/fe/core/ExtensionAPI", "sap/fe/core/CommonUtils", "sap/fe/core/converters/helpers/ID"], function(
7
- ExtensionAPI,
8
- CommonUtils,
9
- ID
10
- ) {
11
- "use strict";
12
-
13
- /**
14
- * @class Extension API for object pages on SAP Fiori elements for OData V4.
15
- * @alias sap.fe.templates.ObjectPage.ExtensionAPI
16
- * @extends sap.fe.core.ExtensionAPI
17
- * @public
18
- * @hideconstructor
19
- * @final
20
- * @since 1.79.0
21
- */
22
- var extensionAPI = ExtensionAPI.extend("sap.fe.templates.ObjectPage.ExtensionAPI", {
23
- /**
24
- * @private
25
- * @name sap.fe.templates.ObjectPage.ExtensionAPI.getMetadata
26
- * @function
27
- */
28
- /**
29
- * @private
30
- * @name sap.fe.templates.ObjectPage.ExtensionAPI.extend
31
- * @function
32
- */
33
-
34
- /**
35
- * Refreshes either the whole object page or only parts of it.
36
- *
37
- * @alias sap.fe.templates.ObjectPage.ExtensionAPI#refresh
38
- * @param {string | string[]} [vPath] Path or array of paths referring to entities or properties to be refreshed.
39
- * If omitted, the whole object page is refreshed. The path "" refreshes the entity assigned to the object page
40
- * without navigations
41
- * @returns {Promise} Resolved once the data is refreshed or rejected if the request failed
42
- *
43
- * @public
44
- */
45
- refresh: function(vPath) {
46
- var oBindingContext = this._view.getBindingContext(),
47
- oAppComponent = CommonUtils.getAppComponent(this._view),
48
- oSideEffectsService = oAppComponent.getSideEffectsService(),
49
- oMetaModel = oBindingContext.getModel().getMetaModel(),
50
- aPaths,
51
- oSideEffects = {
52
- TargetProperties: [],
53
- TargetEntities: []
54
- },
55
- sPath,
56
- sBaseEntitySet,
57
- sKind;
58
-
59
- if (vPath === undefined || vPath === null) {
60
- // we just add an empty path which should refresh the page with all dependent bindings
61
- oSideEffects.TargetEntities.push({
62
- $NavigationPropertyPath: ""
63
- });
64
- } else {
65
- aPaths = Array.isArray(vPath) ? vPath : [vPath];
66
- sBaseEntitySet = this._controller.getOwnerComponent().getEntitySet();
67
-
68
- for (var i = 0; i < aPaths.length; i++) {
69
- sPath = aPaths[i];
70
- if (sPath === "") {
71
- // an empty path shall refresh the entity without dependencies which means * for the model
72
- oSideEffects.TargetProperties.push({
73
- $PropertyPath: "*"
74
- });
75
- } else {
76
- sKind = oMetaModel.getObject("/" + sBaseEntitySet + "/" + sPath + "/$kind");
77
-
78
- if (sKind === "NavigationProperty") {
79
- oSideEffects.TargetEntities.push({
80
- $NavigationPropertyPath: sPath
81
- });
82
- } else if (sKind) {
83
- oSideEffects.TargetProperties.push({
84
- $PropertyPath: sPath
85
- });
86
- } else {
87
- return Promise.reject(sPath + " is not a valid path to be refreshed");
88
- }
89
- }
90
- }
91
- }
92
- return oSideEffectsService.requestSideEffects(
93
- oSideEffects.TargetEntities.concat(oSideEffects.TargetProperties),
94
- oBindingContext
95
- );
96
- },
97
-
98
- /**
99
- * Gets the list entries currently selected for the table.
100
- *
101
- * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getSelectedContexts
102
- * @param {string} sTableId The ID identifying the table the selected context is requested for
103
- * @returns {sap.ui.model.odata.v4.Context[]} Array containing the selected contexts
104
- *
105
- * @public
106
- */
107
- getSelectedContexts: function(sTableId) {
108
- var oTable = this._view.byId(sTableId);
109
- if (oTable && oTable.isA("sap.fe.macros.TableAPI")) {
110
- oTable = oTable.getContent();
111
- }
112
- return (oTable && oTable.isA("sap.ui.mdc.Table") && oTable.getSelectedContexts()) || [];
113
- },
114
-
115
- /**
116
- * Displays or hides the side content of an object page block.
117
- *
118
- * @alias sap.fe.templates.ObjectPage.ExtensionAPI#showSideContent
119
- * @param {string} sSubSectionKey Key of the side content fragment as defined in the manifest.json
120
- * @param {boolean} [bShow] Optional Boolean flag to show or hide the side content
121
- *
122
- * @public
123
- */
124
- showSideContent: function(sSubSectionKey, bShow) {
125
- var sBlockID = ID.SideContentLayoutID(sSubSectionKey),
126
- oBlock = this._view.byId(sBlockID),
127
- bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
128
- oBlock.setShowSideContent(bBlockState);
129
- },
130
-
131
- /**
132
- * Gets the bound context of the current object page.
133
- *
134
- * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getBindingContext
135
- * @returns {sap.ui.model.odata.v4.Context} Context bound to the object page
136
- *
137
- * @public
138
- */
139
- getBindingContext: function() {
140
- return this._view.getBindingContext();
141
- }
142
- });
143
-
144
- return extensionAPI;
145
- });
5
+ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/helpers/ID", "sap/fe/core/ExtensionAPI", "sap/fe/core/helpers/ClassSupport"], function (CommonUtils, ID, ExtensionAPI, ClassSupport) {
6
+ "use strict";
7
+
8
+ var defineUI5Class = ClassSupport.defineUI5Class;
9
+ var SideContentLayoutID = ID.SideContentLayoutID;
10
+
11
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
12
+
13
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
14
+
15
+ defineUI5Class("sap.fe.templates.ObjectPage.ExtensionAPI");
16
+
17
+ var ObjectPageExtensionAPI = /*#__PURE__*/function (_ExtensionAPI) {
18
+ _inheritsLoose(ObjectPageExtensionAPI, _ExtensionAPI);
19
+
20
+ function ObjectPageExtensionAPI() {
21
+ return _ExtensionAPI.apply(this, arguments) || this;
22
+ }
23
+
24
+ var _proto = ObjectPageExtensionAPI.prototype;
25
+
26
+ /**
27
+ * Refreshes either the whole object page or only parts of it.
28
+ *
29
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#refresh
30
+ * @param {string | string[]} [vPath] Path or array of paths referring to entities or properties to be refreshed.
31
+ * If omitted, the whole object page is refreshed. The path "" refreshes the entity assigned to the object page
32
+ * without navigations
33
+ * @returns {Promise} Resolved once the data is refreshed or rejected if the request failed
34
+ *
35
+ * @public
36
+ */
37
+ _proto.refresh = function refresh(vPath) {
38
+ var oBindingContext = this._view.getBindingContext(),
39
+ oAppComponent = CommonUtils.getAppComponent(this._view),
40
+ oSideEffectsService = oAppComponent.getSideEffectsService(),
41
+ oMetaModel = oBindingContext.getModel().getMetaModel(),
42
+ oSideEffects = {
43
+ TargetProperties: [],
44
+ TargetEntities: []
45
+ };
46
+
47
+ var aPaths, sPath, sBaseEntitySet, sKind;
48
+
49
+ if (vPath === undefined || vPath === null) {
50
+ // we just add an empty path which should refresh the page with all dependent bindings
51
+ oSideEffects.TargetEntities.push({
52
+ $NavigationPropertyPath: ""
53
+ });
54
+ } else {
55
+ aPaths = Array.isArray(vPath) ? vPath : [vPath];
56
+ sBaseEntitySet = this._controller.getOwnerComponent().getEntitySet();
57
+
58
+ for (var i = 0; i < aPaths.length; i++) {
59
+ sPath = aPaths[i];
60
+
61
+ if (sPath === "") {
62
+ // an empty path shall refresh the entity without dependencies which means * for the model
63
+ oSideEffects.TargetProperties.push({
64
+ $PropertyPath: "*"
65
+ });
66
+ } else {
67
+ sKind = oMetaModel.getObject("/" + sBaseEntitySet + "/" + sPath + "/$kind");
68
+
69
+ if (sKind === "NavigationProperty") {
70
+ oSideEffects.TargetEntities.push({
71
+ $NavigationPropertyPath: sPath
72
+ });
73
+ } else if (sKind) {
74
+ oSideEffects.TargetProperties.push({
75
+ $PropertyPath: sPath
76
+ });
77
+ } else {
78
+ return Promise.reject(sPath + " is not a valid path to be refreshed");
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ return oSideEffectsService.requestSideEffects(oSideEffects.TargetEntities.concat(oSideEffects.TargetProperties), oBindingContext);
85
+ }
86
+ /**
87
+ * Gets the list entries currently selected for the table.
88
+ *
89
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getSelectedContexts
90
+ * @param {string} sTableId The ID identifying the table the selected context is requested for
91
+ * @returns {sap.ui.model.odata.v4.Context[]} Array containing the selected contexts
92
+ *
93
+ * @public
94
+ */
95
+ ;
96
+
97
+ _proto.getSelectedContexts = function getSelectedContexts(sTableId) {
98
+ var oTable = this._view.byId(sTableId);
99
+
100
+ if (oTable && oTable.isA("sap.fe.macros.TableAPI")) {
101
+ oTable = oTable.getContent();
102
+ }
103
+
104
+ return oTable && oTable.isA("sap.ui.mdc.Table") && oTable.getSelectedContexts() || [];
105
+ }
106
+ /**
107
+ * Displays or hides the side content of an object page block.
108
+ *
109
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#showSideContent
110
+ * @param {string} sSubSectionKey Key of the side content fragment as defined in the manifest.json
111
+ * @param {boolean} [bShow] Optional Boolean flag to show or hide the side content
112
+ *
113
+ * @public
114
+ */
115
+ ;
116
+
117
+ _proto.showSideContent = function showSideContent(sSubSectionKey, bShow) {
118
+ var sBlockID = SideContentLayoutID(sSubSectionKey),
119
+ oBlock = this._view.byId(sBlockID),
120
+ bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
121
+
122
+ oBlock.setShowSideContent(bBlockState, false);
123
+ }
124
+ /**
125
+ * Gets the bound context of the current object page.
126
+ *
127
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getBindingContext
128
+ * @returns {sap.ui.model.odata.v4.Context} Context bound to the object page
129
+ *
130
+ * @public
131
+ */
132
+ ;
133
+
134
+ _proto.getBindingContext = function getBindingContext() {
135
+ return this._view.getBindingContext();
136
+ };
137
+
138
+ return ObjectPageExtensionAPI;
139
+ }(ExtensionAPI);
140
+
141
+ return ObjectPageExtensionAPI;
142
+ }, false);
143
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJuYW1lcyI6WyJkZWZpbmVVSTVDbGFzcyIsIk9iamVjdFBhZ2VFeHRlbnNpb25BUEkiLCJyZWZyZXNoIiwidlBhdGgiLCJvQmluZGluZ0NvbnRleHQiLCJfdmlldyIsImdldEJpbmRpbmdDb250ZXh0Iiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9TaWRlRWZmZWN0cyIsIlRhcmdldFByb3BlcnRpZXMiLCJUYXJnZXRFbnRpdGllcyIsImFQYXRocyIsInNQYXRoIiwic0Jhc2VFbnRpdHlTZXQiLCJzS2luZCIsInVuZGVmaW5lZCIsInB1c2giLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9jb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRFbnRpdHlTZXQiLCJpIiwibGVuZ3RoIiwiJFByb3BlcnR5UGF0aCIsImdldE9iamVjdCIsIlByb21pc2UiLCJyZWplY3QiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJjb25jYXQiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwic1RhYmxlSWQiLCJvVGFibGUiLCJieUlkIiwiaXNBIiwiZ2V0Q29udGVudCIsInNob3dTaWRlQ29udGVudCIsInNTdWJTZWN0aW9uS2V5IiwiYlNob3ciLCJzQmxvY2tJRCIsIlNpZGVDb250ZW50TGF5b3V0SUQiLCJvQmxvY2siLCJiQmxvY2tTdGF0ZSIsImdldFNob3dTaWRlQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIkV4dGVuc2lvbkFQSSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUFNQUEsRUFBQUEsY0FBYyxDQUFDLDBDQUFELENBQWQ7O01BRU1DLHNCOzs7Ozs7Ozs7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O0FBQ25ERixRQUFBQSxNQUFNLEdBQUlBLE1BQUQsQ0FBcUNHLFVBQXJDLEVBQVQ7QUFDQTs7QUFDRCxhQUFRSCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsR0FBUCxDQUFXLGtCQUFYLENBQVYsSUFBNkNGLE1BQUQsQ0FBZ0JGLG1CQUFoQixFQUE3QyxJQUF1RixFQUE5RjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ00sZSxHQUFBLHlCQUFnQkMsY0FBaEIsRUFBd0NDLEtBQXhDLEVBQW9FO0FBQ25FLFVBQU1DLFFBQVEsR0FBR0MsbUJBQW1CLENBQUNILGNBQUQsQ0FBcEM7QUFBQSxVQUNDSSxNQUFNLEdBQUcsS0FBSzVDLEtBQUwsQ0FBV29DLElBQVgsQ0FBZ0JNLFFBQWhCLENBRFY7QUFBQSxVQUVDRyxXQUFXLEdBQUdKLEtBQUssS0FBS3hCLFNBQVYsR0FBc0IsQ0FBRTJCLE1BQUQsQ0FBK0JFLGtCQUEvQixFQUF2QixHQUE2RUwsS0FGNUY7O0FBR0NHLE1BQUFBLE1BQUQsQ0FBK0JHLGtCQUEvQixDQUFrREYsV0FBbEQsRUFBK0QsS0FBL0Q7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDNUMsaUIsR0FBQSw2QkFBb0I7QUFDbkIsYUFBTyxLQUFLRCxLQUFMLENBQVdDLGlCQUFYLEVBQVA7QUFDQSxLOzs7SUF0R21DK0MsWTs7U0F5R3RCcEQsc0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IFNpZGVDb250ZW50TGF5b3V0SUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlQVBJXCI7XG5pbXBvcnQgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJXCIpO1xuXG5jbGFzcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGV4dGVuZHMgRXh0ZW5zaW9uQVBJIHtcblx0LyoqXG5cdCAqIFJlZnJlc2hlcyBlaXRoZXIgdGhlIHdob2xlIG9iamVjdCBwYWdlIG9yIG9ubHkgcGFydHMgb2YgaXQuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJI3JlZnJlc2hcblx0ICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gW3ZQYXRoXSBQYXRoIG9yIGFycmF5IG9mIHBhdGhzIHJlZmVycmluZyB0byBlbnRpdGllcyBvciBwcm9wZXJ0aWVzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogSWYgb21pdHRlZCwgdGhlIHdob2xlIG9iamVjdCBwYWdlIGlzIHJlZnJlc2hlZC4gVGhlIHBhdGggXCJcIiByZWZyZXNoZXMgdGhlIGVudGl0eSBhc3NpZ25lZCB0byB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogd2l0aG91dCBuYXZpZ2F0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZWQgb25jZSB0aGUgZGF0YSBpcyByZWZyZXNoZWQgb3IgcmVqZWN0ZWQgaWYgdGhlIHJlcXVlc3QgZmFpbGVkXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlZnJlc2godlBhdGg6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQsXG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpLFxuXHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRvU2lkZUVmZmVjdHM6IGFueSA9IHtcblx0XHRcdFx0VGFyZ2V0UHJvcGVydGllczogW10sXG5cdFx0XHRcdFRhcmdldEVudGl0aWVzOiBbXVxuXHRcdFx0fTtcblx0XHRsZXQgYVBhdGhzLCBzUGF0aCwgc0Jhc2VFbnRpdHlTZXQsIHNLaW5kO1xuXG5cdFx0aWYgKHZQYXRoID09PSB1bmRlZmluZWQgfHwgdlBhdGggPT09IG51bGwpIHtcblx0XHRcdC8vIHdlIGp1c3QgYWRkIGFuIGVtcHR5IHBhdGggd2hpY2ggc2hvdWxkIHJlZnJlc2ggdGhlIHBhZ2Ugd2l0aCBhbGwgZGVwZW5kZW50IGJpbmRpbmdzXG5cdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMucHVzaCh7XG5cdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBhdGhzID0gQXJyYXkuaXNBcnJheSh2UGF0aCkgPyB2UGF0aCA6IFt2UGF0aF07XG5cdFx0XHRzQmFzZUVudGl0eVNldCA9ICh0aGlzLl9jb250cm9sbGVyLmdldE93bmVyQ29tcG9uZW50KCkgYXMgYW55KS5nZXRFbnRpdHlTZXQoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhUGF0aHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c1BhdGggPSBhUGF0aHNbaV07XG5cdFx0XHRcdGlmIChzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdC8vIGFuIGVtcHR5IHBhdGggc2hhbGwgcmVmcmVzaCB0aGUgZW50aXR5IHdpdGhvdXQgZGVwZW5kZW5jaWVzIHdoaWNoIG1lYW5zICogZm9yIHRoZSBtb2RlbFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCIqXCJcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzS2luZCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiICsgc0Jhc2VFbnRpdHlTZXQgKyBcIi9cIiArIHNQYXRoICsgXCIvJGtpbmRcIik7XG5cblx0XHRcdFx0XHRpZiAoc0tpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy5UYXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNQYXRoXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNLaW5kKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogc1BhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc1BhdGggKyBcIiBpcyBub3QgYSB2YWxpZCBwYXRoIHRvIGJlIHJlZnJlc2hlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0cy5UYXJnZXRFbnRpdGllcy5jb25jYXQob1NpZGVFZmZlY3RzLlRhcmdldFByb3BlcnRpZXMpLCBvQmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxpc3QgZW50cmllcyBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUEkjZ2V0U2VsZWN0ZWRDb250ZXh0c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1RhYmxlSWQgVGhlIElEIGlkZW50aWZ5aW5nIHRoZSB0YWJsZSB0aGUgc2VsZWN0ZWQgY29udGV4dCBpcyByZXF1ZXN0ZWQgZm9yXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFtdfSBBcnJheSBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKHNUYWJsZUlkOiBzdHJpbmcpIHtcblx0XHRsZXQgb1RhYmxlID0gdGhpcy5fdmlldy5ieUlkKHNUYWJsZUlkKTtcblx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRvVGFibGUgPSAob1RhYmxlIGFzIEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPikuZ2V0Q29udGVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gKG9UYWJsZSAmJiBvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpKSB8fCBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBvciBoaWRlcyB0aGUgc2lkZSBjb250ZW50IG9mIGFuIG9iamVjdCBwYWdlIGJsb2NrLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNzaG93U2lkZUNvbnRlbnRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTdWJTZWN0aW9uS2V5IEtleSBvZiB0aGUgc2lkZSBjb250ZW50IGZyYWdtZW50IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0Lmpzb25cblx0ICogQHBhcmFtIHtib29sZWFufSBbYlNob3ddIE9wdGlvbmFsIEJvb2xlYW4gZmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIHNpZGUgY29udGVudFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzaG93U2lkZUNvbnRlbnQoc1N1YlNlY3Rpb25LZXk6IHN0cmluZywgYlNob3c6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzQmxvY2tJRCA9IFNpZGVDb250ZW50TGF5b3V0SUQoc1N1YlNlY3Rpb25LZXkpLFxuXHRcdFx0b0Jsb2NrID0gdGhpcy5fdmlldy5ieUlkKHNCbG9ja0lEKSxcblx0XHRcdGJCbG9ja1N0YXRlID0gYlNob3cgPT09IHVuZGVmaW5lZCA/ICEob0Jsb2NrIGFzIER5bmFtaWNTaWRlQ29udGVudCkuZ2V0U2hvd1NpZGVDb250ZW50KCkgOiBiU2hvdztcblx0XHQob0Jsb2NrIGFzIER5bmFtaWNTaWRlQ29udGVudCkuc2V0U2hvd1NpZGVDb250ZW50KGJCbG9ja1N0YXRlLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYm91bmQgY29udGV4dCBvZiB0aGUgY3VycmVudCBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUEkjZ2V0QmluZGluZ0NvbnRleHRcblx0ICogQHJldHVybnMge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBDb250ZXh0IGJvdW5kIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG4iXX0=
@@ -0,0 +1,116 @@
1
+ import CommonUtils from "sap/fe/core/CommonUtils";
2
+ import { SideContentLayoutID } from "sap/fe/core/converters/helpers/ID";
3
+ import ExtensionAPI from "sap/fe/core/ExtensionAPI";
4
+ import { defineUI5Class, EnhanceWithUI5 } from "sap/fe/core/helpers/ClassSupport";
5
+ import TableAPI from "sap/fe/macros/TableAPI";
6
+ import DynamicSideContent from "sap/ui/layout/DynamicSideContent";
7
+ import Context from "sap/ui/model/odata/v4/Context";
8
+ import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
9
+ defineUI5Class("sap.fe.templates.ObjectPage.ExtensionAPI");
10
+
11
+ class ObjectPageExtensionAPI extends ExtensionAPI {
12
+ /**
13
+ * Refreshes either the whole object page or only parts of it.
14
+ *
15
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#refresh
16
+ * @param {string | string[]} [vPath] Path or array of paths referring to entities or properties to be refreshed.
17
+ * If omitted, the whole object page is refreshed. The path "" refreshes the entity assigned to the object page
18
+ * without navigations
19
+ * @returns {Promise} Resolved once the data is refreshed or rejected if the request failed
20
+ *
21
+ * @public
22
+ */
23
+ refresh(vPath: string | string[] | undefined) {
24
+ const oBindingContext = this._view.getBindingContext() as Context,
25
+ oAppComponent = CommonUtils.getAppComponent(this._view),
26
+ oSideEffectsService = oAppComponent.getSideEffectsService(),
27
+ oMetaModel = oBindingContext.getModel().getMetaModel() as ODataMetaModel,
28
+ oSideEffects: any = {
29
+ TargetProperties: [],
30
+ TargetEntities: []
31
+ };
32
+ let aPaths, sPath, sBaseEntitySet, sKind;
33
+
34
+ if (vPath === undefined || vPath === null) {
35
+ // we just add an empty path which should refresh the page with all dependent bindings
36
+ oSideEffects.TargetEntities.push({
37
+ $NavigationPropertyPath: ""
38
+ });
39
+ } else {
40
+ aPaths = Array.isArray(vPath) ? vPath : [vPath];
41
+ sBaseEntitySet = (this._controller.getOwnerComponent() as any).getEntitySet();
42
+
43
+ for (let i = 0; i < aPaths.length; i++) {
44
+ sPath = aPaths[i];
45
+ if (sPath === "") {
46
+ // an empty path shall refresh the entity without dependencies which means * for the model
47
+ oSideEffects.TargetProperties.push({
48
+ $PropertyPath: "*"
49
+ });
50
+ } else {
51
+ sKind = oMetaModel.getObject("/" + sBaseEntitySet + "/" + sPath + "/$kind");
52
+
53
+ if (sKind === "NavigationProperty") {
54
+ oSideEffects.TargetEntities.push({
55
+ $NavigationPropertyPath: sPath
56
+ });
57
+ } else if (sKind) {
58
+ oSideEffects.TargetProperties.push({
59
+ $PropertyPath: sPath
60
+ });
61
+ } else {
62
+ return Promise.reject(sPath + " is not a valid path to be refreshed");
63
+ }
64
+ }
65
+ }
66
+ }
67
+ return oSideEffectsService.requestSideEffects(oSideEffects.TargetEntities.concat(oSideEffects.TargetProperties), oBindingContext);
68
+ }
69
+
70
+ /**
71
+ * Gets the list entries currently selected for the table.
72
+ *
73
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getSelectedContexts
74
+ * @param {string} sTableId The ID identifying the table the selected context is requested for
75
+ * @returns {sap.ui.model.odata.v4.Context[]} Array containing the selected contexts
76
+ *
77
+ * @public
78
+ */
79
+ getSelectedContexts(sTableId: string) {
80
+ let oTable = this._view.byId(sTableId);
81
+ if (oTable && oTable.isA("sap.fe.macros.TableAPI")) {
82
+ oTable = (oTable as EnhanceWithUI5<TableAPI>).getContent();
83
+ }
84
+ return (oTable && oTable.isA("sap.ui.mdc.Table") && (oTable as any).getSelectedContexts()) || [];
85
+ }
86
+
87
+ /**
88
+ * Displays or hides the side content of an object page block.
89
+ *
90
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#showSideContent
91
+ * @param {string} sSubSectionKey Key of the side content fragment as defined in the manifest.json
92
+ * @param {boolean} [bShow] Optional Boolean flag to show or hide the side content
93
+ *
94
+ * @public
95
+ */
96
+ showSideContent(sSubSectionKey: string, bShow: boolean | undefined) {
97
+ const sBlockID = SideContentLayoutID(sSubSectionKey),
98
+ oBlock = this._view.byId(sBlockID),
99
+ bBlockState = bShow === undefined ? !(oBlock as DynamicSideContent).getShowSideContent() : bShow;
100
+ (oBlock as DynamicSideContent).setShowSideContent(bBlockState, false);
101
+ }
102
+
103
+ /**
104
+ * Gets the bound context of the current object page.
105
+ *
106
+ * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getBindingContext
107
+ * @returns {sap.ui.model.odata.v4.Context} Context bound to the object page
108
+ *
109
+ * @public
110
+ */
111
+ getBindingContext() {
112
+ return this._view.getBindingContext();
113
+ }
114
+ }
115
+
116
+ export default ObjectPageExtensionAPI;
@@ -67,21 +67,17 @@
67
67
  enabled="{= OP.getDeleteCommandExecutionEnabled(${converterContext>header/actions}) }"
68
68
  command="DeleteObject"
69
69
  />
70
- <control:CommandExecution
71
- execute="._saveDocument(${$view>/getBindingContext})"
72
- visible="{= ${ui>/editMode} === 'Editable' }"
73
- command="Save"
74
- />
70
+ <control:CommandExecution execute="._saveDocument(${$view>/getBindingContext})" visible="{ui>/isEditable}" command="Save" />
75
71
  <control:CommandExecution
76
72
  execute="._cancelDocument(${$view>/getBindingContext},{cancelButton:'fe::FooterBar::StandardAction::Cancel'})"
77
- visible="{= ${ui>/editMode} === 'Editable' }"
73
+ visible="{ui>/isEditable}"
78
74
  command="Cancel"
79
75
  />
80
76
  </uxap:dependents>
81
77
  <template:if test="{converterContext>header/visible}">
82
78
  <template:with path="converterContext>header" var="header">
83
79
  <uxap:headerTitle>
84
- <uxap:ObjectPageDynamicHeaderTitle primaryArea="Begin">
80
+ <uxap:ObjectPageDynamicHeaderTitle primaryArea="Begin" areaShrinkRatio="0:0:1">
85
81
  <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.Heading" type="XML" />
86
82
  <uxap:expandedContent>
87
83
  <FlexBox>
@@ -91,7 +87,6 @@
91
87
  wrapping="true"
92
88
  />
93
89
  </template:if>
94
- <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.CollaborationDraft" type="XML" />
95
90
  </FlexBox>
96
91
  </uxap:expandedContent>
97
92
  <uxap:snappedContent>
@@ -102,7 +97,6 @@
102
97
  wrapping="true"
103
98
  />
104
99
  </template:if>
105
- <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.CollaborationDraft" type="XML" />
106
100
  </FlexBox>
107
101
  </uxap:snappedContent>
108
102
  <uxap:content>