@openui5/sap.ui.fl 1.120.7 → 1.121.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 (192) hide show
  1. package/.reuse/dep5 +23 -21
  2. package/THIRDPARTY.txt +6 -43
  3. package/package.json +3 -3
  4. package/src/sap/ui/fl/.library +1 -1
  5. package/src/sap/ui/fl/ChangePersistence.js +38 -133
  6. package/src/sap/ui/fl/ChangePersistenceFactory.js +1 -1
  7. package/src/sap/ui/fl/FakeLrepConnectorLocalStorage.js +1 -1
  8. package/src/sap/ui/fl/FakeLrepConnectorSessionStorage.js +1 -1
  9. package/src/sap/ui/fl/FakeLrepLocalStorage.js +1 -1
  10. package/src/sap/ui/fl/FlexController.js +28 -15
  11. package/src/sap/ui/fl/FlexControllerFactory.js +1 -1
  12. package/src/sap/ui/fl/LayerUtils.js +5 -5
  13. package/src/sap/ui/fl/Utils.js +15 -18
  14. package/src/sap/ui/fl/apply/_internal/DelegateMediator.js +1 -1
  15. package/src/sap/ui/fl/apply/_internal/changes/Applier.js +19 -20
  16. package/src/sap/ui/fl/apply/_internal/changes/FlexCustomData.js +1 -1
  17. package/src/sap/ui/fl/apply/_internal/changes/Utils.js +1 -1
  18. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Preprocessor.js +1 -1
  19. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Registration.js +1 -1
  20. package/src/sap/ui/fl/apply/_internal/changes/descriptor/RegistrationBuild.js +1 -1
  21. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddAnnotationsToOData.js +1 -1
  22. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddNewInbound.js +1 -1
  23. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeDataSource.js +6 -2
  24. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeInbound.js +9 -3
  25. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/RemoveAllInboundsExceptOne.js +1 -1
  26. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/SetTitle.js +1 -1
  27. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetAbstract.js +1 -1
  28. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetRegistrationIds.js +1 -1
  29. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/AddNewCard.js +1 -1
  30. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/ChangeCard.js +2 -2
  31. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/DeleteCard.js +1 -1
  32. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddComponentUsages.js +1 -1
  33. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddLibrary.js +1 -1
  34. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModel.js +1 -1
  35. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModelEnhanceWith.js +1 -1
  36. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetFlexExtensionPointEnabled.js +1 -1
  37. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetMinUI5Version.js +1 -1
  38. package/src/sap/ui/fl/apply/_internal/connectors/ObjectStorageUtils.js +1 -1
  39. package/src/sap/ui/fl/apply/_internal/controlVariants/URLHandler.js +17 -11
  40. package/src/sap/ui/fl/apply/_internal/extensionPoint/Processor.js +7 -19
  41. package/src/sap/ui/fl/{write → apply}/_internal/extensionPoint/Registry.js +2 -2
  42. package/src/sap/ui/fl/apply/_internal/flexObjects/AppDescriptorChange.js +1 -1
  43. package/src/sap/ui/fl/apply/_internal/flexObjects/CompVariant.js +1 -1
  44. package/src/sap/ui/fl/apply/_internal/flexObjects/ControllerExtensionChange.js +1 -1
  45. package/src/sap/ui/fl/apply/_internal/flexObjects/FlVariant.js +1 -3
  46. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObject.js +1 -1
  47. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObjectFactory.js +13 -7
  48. package/src/sap/ui/fl/apply/_internal/flexObjects/UIChange.js +3 -2
  49. package/src/sap/ui/fl/apply/_internal/flexObjects/Variant.js +8 -1
  50. package/src/sap/ui/fl/apply/_internal/flexObjects/getVariantAuthor.js +47 -0
  51. package/src/sap/ui/fl/apply/_internal/flexState/DataSelector.js +124 -34
  52. package/src/sap/ui/fl/apply/_internal/flexState/FlexState.js +118 -45
  53. package/src/sap/ui/fl/apply/_internal/flexState/InitialPrepareFunctions.js +25 -9
  54. package/src/sap/ui/fl/apply/_internal/flexState/Loader.js +17 -3
  55. package/src/sap/ui/fl/apply/_internal/flexState/ManifestUtils.js +21 -1
  56. package/src/sap/ui/fl/apply/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  57. package/src/sap/ui/fl/apply/_internal/flexState/changes/DependencyHandler.js +108 -104
  58. package/src/sap/ui/fl/apply/_internal/flexState/changes/ExtensionPointState.js +93 -34
  59. package/src/sap/ui/fl/apply/_internal/flexState/changes/UIChangesState.js +195 -0
  60. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/CompVariantMerger.js +7 -6
  61. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/Utils.js +1 -1
  62. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/prepareCompVariantsMap.js +6 -6
  63. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/Switcher.js +2 -2
  64. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/VariantManagementState.js +89 -11
  65. package/src/sap/ui/fl/apply/_internal/preprocessors/ComponentLifecycleHooks.js +20 -28
  66. package/src/sap/ui/fl/apply/_internal/preprocessors/ControllerExtension.js +1 -1
  67. package/src/sap/ui/fl/apply/_internal/preprocessors/EventHistory.js +1 -1
  68. package/src/sap/ui/fl/apply/_internal/preprocessors/RegistrationDelegator.js +1 -1
  69. package/src/sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor.js +1 -1
  70. package/src/sap/ui/fl/apply/api/ControlVariantApplyAPI.js +1 -1
  71. package/src/sap/ui/fl/{write → apply}/api/ExtensionPointRegistryAPI.js +3 -3
  72. package/src/sap/ui/fl/apply/api/FlexRuntimeInfoAPI.js +49 -8
  73. package/src/sap/ui/fl/apply/api/SmartVariantManagementApplyAPI.js +1 -1
  74. package/src/sap/ui/fl/changeHandler/AddIFrame.js +1 -1
  75. package/src/sap/ui/fl/changeHandler/AddXML.js +1 -1
  76. package/src/sap/ui/fl/changeHandler/AddXMLAtExtensionPoint.js +7 -6
  77. package/src/sap/ui/fl/changeHandler/Base.js +1 -1
  78. package/src/sap/ui/fl/changeHandler/BaseAddViaDelegate.js +1 -1
  79. package/src/sap/ui/fl/changeHandler/BaseAddXml.js +1 -1
  80. package/src/sap/ui/fl/changeHandler/BaseRename.js +1 -1
  81. package/src/sap/ui/fl/changeHandler/HideControl.js +1 -1
  82. package/src/sap/ui/fl/changeHandler/MoveControls.js +1 -1
  83. package/src/sap/ui/fl/changeHandler/MoveElements.js +1 -1
  84. package/src/sap/ui/fl/changeHandler/PropertyBindingChange.js +1 -1
  85. package/src/sap/ui/fl/changeHandler/PropertyChange.js +1 -1
  86. package/src/sap/ui/fl/changeHandler/StashControl.js +2 -2
  87. package/src/sap/ui/fl/changeHandler/UnhideControl.js +1 -1
  88. package/src/sap/ui/fl/changeHandler/UnstashControl.js +4 -4
  89. package/src/sap/ui/fl/changeHandler/UpdateIFrame.js +1 -1
  90. package/src/sap/ui/fl/descriptorRelated/api/DescriptorChangeFactory.js +4 -4
  91. package/src/sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js +1 -1
  92. package/src/sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js +1 -1
  93. package/src/sap/ui/fl/designtime/util/IFrame.designtime.js +3 -91
  94. package/src/sap/ui/fl/designtime/util/editIFrame.js +94 -0
  95. package/src/sap/ui/fl/initial/_internal/FlexConfiguration.js +1 -1
  96. package/src/sap/ui/fl/initial/_internal/FlexInfoSession.js +2 -23
  97. package/src/sap/ui/fl/initial/_internal/Storage.js +106 -39
  98. package/src/sap/ui/fl/{write → initial}/_internal/StorageFeaturesMerger.js +10 -7
  99. package/src/sap/ui/fl/initial/_internal/StorageUtils.js +14 -8
  100. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerRegistration.js +1 -1
  101. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerStorage.js +1 -1
  102. package/src/sap/ui/fl/initial/_internal/connectors/BackendConnector.js +26 -4
  103. package/src/sap/ui/fl/initial/_internal/connectors/BtpServiceConnector.js +44 -0
  104. package/src/sap/ui/fl/initial/_internal/connectors/KeyUserConnector.js +8 -1
  105. package/src/sap/ui/fl/initial/_internal/connectors/LrepConnector.js +48 -2
  106. package/src/sap/ui/fl/initial/_internal/connectors/NeoLrepConnector.js +25 -4
  107. package/src/sap/ui/fl/initial/_internal/connectors/PersonalizationConnector.js +12 -1
  108. package/src/sap/ui/fl/initial/_internal/connectors/StaticFileConnector.js +14 -4
  109. package/src/sap/ui/fl/initial/_internal/connectors/Utils.js +1 -1
  110. package/src/sap/ui/fl/initial/_internal/storageResultDisassemble.js +1 -1
  111. package/src/sap/ui/fl/initial/api/Version.js +0 -1
  112. package/src/sap/ui/fl/interfaces/BaseLoadConnector.js +22 -1
  113. package/src/sap/ui/fl/interfaces/Delegate.js +1 -1
  114. package/src/sap/ui/fl/library.js +48 -43
  115. package/src/sap/ui/fl/messagebundle.properties +3 -0
  116. package/src/sap/ui/fl/messagebundle_bg.properties +1 -1
  117. package/src/sap/ui/fl/messagebundle_en_US_saprigi.properties +39 -39
  118. package/src/sap/ui/fl/messagebundle_hu.properties +1 -1
  119. package/src/sap/ui/fl/messagebundle_it.properties +1 -1
  120. package/src/sap/ui/fl/messagebundle_lv.properties +1 -1
  121. package/src/sap/ui/fl/messagebundle_mk.properties +2 -2
  122. package/src/sap/ui/fl/messagebundle_no.properties +1 -1
  123. package/src/sap/ui/fl/registry/Settings.js +12 -1
  124. package/src/sap/ui/fl/support/_internal/extractChangeDependencies.js +40 -20
  125. package/src/sap/ui/fl/support/_internal/getAllUIChanges.js +93 -0
  126. package/src/sap/ui/fl/support/_internal/getChangeDependencies.js +4 -4
  127. package/src/sap/ui/fl/support/_internal/getFlexSettings.js +1 -1
  128. package/src/sap/ui/fl/support/api/SupportAPI.js +5 -2
  129. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetails.controller.js +1 -1
  130. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetailsEdit.controller.js +1 -1
  131. package/src/sap/ui/fl/support/apps/contentbrowser/controller/LayerContentMaster.controller.js +1 -1
  132. package/src/sap/ui/fl/support/apps/contentbrowser/controller/Layers.controller.js +1 -1
  133. package/src/sap/ui/fl/support/apps/contentbrowser/lrepConnector/LRepConnector.js +1 -1
  134. package/src/sap/ui/fl/support/apps/contentbrowser/utils/DataUtils.js +1 -1
  135. package/src/sap/ui/fl/support/apps/contentbrowser/utils/ErrorUtils.js +1 -1
  136. package/src/sap/ui/fl/transport/TransportSelection.js +1 -1
  137. package/src/sap/ui/fl/util/DescriptorChangeCheck.js +34 -19
  138. package/src/sap/ui/fl/util/IFrame.js +48 -16
  139. package/src/sap/ui/fl/util/ManagedObjectModel.js +1 -1
  140. package/src/sap/ui/fl/util/resolveBinding.js +1 -1
  141. package/src/sap/ui/fl/variants/VariantManagement.js +88 -49
  142. package/src/sap/ui/fl/variants/VariantModel.js +19 -6
  143. package/src/sap/ui/fl/write/_internal/Storage.js +5 -34
  144. package/src/sap/ui/fl/write/_internal/Versions.js +62 -63
  145. package/src/sap/ui/fl/write/_internal/appVariant/AppVariant.js +2 -2
  146. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantFactory.js +2 -2
  147. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChange.js +2 -2
  148. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChangeFactory.js +2 -2
  149. package/src/sap/ui/fl/write/_internal/condenser/Condenser.js +1 -1
  150. package/src/sap/ui/fl/write/_internal/condenser/UIReconstruction.js +1 -1
  151. package/src/sap/ui/fl/write/_internal/connectors/BackendConnector.js +1 -16
  152. package/src/sap/ui/fl/write/_internal/connectors/BtpServiceConnector.js +55 -0
  153. package/src/sap/ui/fl/write/_internal/connectors/KeyUserConnector.js +3 -9
  154. package/src/sap/ui/fl/write/_internal/connectors/LrepConnector.js +1 -26
  155. package/src/sap/ui/fl/write/_internal/connectors/NeoLrepConnector.js +3 -20
  156. package/src/sap/ui/fl/write/_internal/connectors/ObjectPathConnector.js +5 -1
  157. package/src/sap/ui/fl/write/_internal/connectors/PersonalizationConnector.js +1 -15
  158. package/src/sap/ui/fl/write/_internal/connectors/Utils.js +1 -1
  159. package/src/sap/ui/fl/write/_internal/extensionPoint/Processor.js +11 -4
  160. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPAccess.js +1 -1
  161. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariant.js +1 -1
  162. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariantFactory.js +1 -1
  163. package/src/sap/ui/fl/write/_internal/fieldExtensibility/MultiTenantABAPExtensibilityVariant.js +1 -1
  164. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ServiceValidation.js +1 -1
  165. package/src/sap/ui/fl/write/_internal/fieldExtensibility/SingleTenantABAPExtensibilityVariant.js +1 -1
  166. package/src/sap/ui/fl/write/_internal/fieldExtensibility/UriParser.js +1 -1
  167. package/src/sap/ui/fl/write/_internal/fieldExtensibility/Utils.js +7 -7
  168. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/CAPAccess.js +1 -1
  169. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/dialog/CustomFieldCAPDialog.js +1 -1
  170. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/booleanEditor/BooleanEditor.js +1 -1
  171. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/rangeEditor/RangeEditor.js +1 -1
  172. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/timeEditor/TimeEditor.js +1 -1
  173. package/src/sap/ui/fl/write/_internal/flexState/FlexObjectState.js +22 -3
  174. package/src/sap/ui/fl/write/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  175. package/src/sap/ui/fl/write/_internal/flexState/compVariants/CompVariantState.js +36 -4
  176. package/src/sap/ui/fl/write/_internal/transport/TransportSelection.js +1 -1
  177. package/src/sap/ui/fl/write/_internal/transport/Transports.js +1 -1
  178. package/src/sap/ui/fl/write/api/ChangesWriteAPI.js +1 -3
  179. package/src/sap/ui/fl/write/api/ContextBasedAdaptationsAPI.js +1 -1
  180. package/src/sap/ui/fl/write/api/FeaturesAPI.js +2 -2
  181. package/src/sap/ui/fl/write/api/FieldExtensibility.js +2 -2
  182. package/src/sap/ui/fl/write/api/PersistenceWriteAPI.js +36 -7
  183. package/src/sap/ui/fl/write/api/ReloadInfoAPI.js +88 -105
  184. package/src/sap/ui/fl/write/api/SmartBusinessWriteAPI.js +25 -2
  185. package/src/sap/ui/fl/write/api/SmartVariantManagementWriteAPI.js +1 -0
  186. package/src/sap/ui/fl/write/api/VersionsAPI.js +0 -1
  187. package/src/sap/ui/fl/write/api/connectors/ObjectStorageConnector.js +241 -28
  188. package/src/sap/ui/fl/write/connectors/BaseConnector.js +2 -10
  189. package/ui5.yaml +37 -76
  190. package/LICENSES/BSD-2-Clause.txt +0 -22
  191. package/src/sap/ui/fl/apply/_internal/flexState/changes/prepareChangesMap.js +0 -26
  192. /package/src/sap/ui/fl/descriptorRelated/{internal/Utils.js → Utils.js} +0 -0
@@ -9,6 +9,9 @@ sap.ui.define([
9
9
  "sap/base/util/restricted/_uniqBy",
10
10
  "sap/base/util/each",
11
11
  "sap/base/util/merge",
12
+ "sap/ui/fl/Layer",
13
+ "sap/ui/fl/Utils",
14
+ "sap/ui/fl/initial/api/Version",
12
15
  "sap/ui/fl/write/connectors/BaseConnector",
13
16
  "sap/ui/fl/initial/_internal/StorageUtils",
14
17
  "sap/ui/fl/apply/_internal/connectors/ObjectStorageUtils"
@@ -17,12 +20,25 @@ sap.ui.define([
17
20
  _uniqBy,
18
21
  each,
19
22
  merge,
23
+ Layer,
24
+ Utils,
25
+ Version,
20
26
  BaseConnector,
21
27
  StorageUtils,
22
28
  ObjectStorageUtils
23
29
  ) {
24
30
  "use strict";
25
31
 
32
+ const mFeatures = {
33
+ isKeyUser: true,
34
+ isVariantSharingEnabled: true,
35
+ isProductiveSystem: false,
36
+ isCondensingEnabled: true,
37
+ isContextSharingEnabled: false,
38
+ isVersioningEnabled: true,
39
+ logonUser: "DEFAULT_USER"
40
+ };
41
+
26
42
  function loadDataFromStorage(mPropertyBag) {
27
43
  var aFlexObjects = [];
28
44
 
@@ -90,12 +106,13 @@ sap.ui.define([
90
106
  });
91
107
  }
92
108
 
93
- function handleCondenseCreate(oCreateInfos, aCondensedChanges) {
109
+ function handleCondenseCreate(oCreateInfos, mPropertyBag) {
94
110
  var aReturn = [];
95
111
  var iCounter = 0;
112
+
96
113
  forEveryMapInArrayInMap(oCreateInfos, function(oFlexObjectFileContent, sChangeId) {
97
114
  var sKey = ObjectStorageUtils.createFlexKey(sChangeId);
98
- var oFlexObject = aCondensedChanges.find(function(oCurrentFlexObject) {
115
+ var oFlexObject = mPropertyBag.condensedChanges.find(function(oCurrentFlexObject) {
99
116
  return oCurrentFlexObject.getId() === oFlexObjectFileContent.fileName;
100
117
  });
101
118
 
@@ -192,7 +209,7 @@ sap.ui.define([
192
209
  var ObjectStorageConnector = merge({}, BaseConnector, /** @lends sap.ui.fl.write.api.connectors.ObjectStorageConnector */ {
193
210
  /**
194
211
  * Object implementing the functions setItem, removeItem, clear, getItem and getItems.
195
- * By default the items are handled as stringified objects.
212
+ * By default, the items are handled as stringified objects.
196
213
  * If the saved are stored as js objects the property <code>_itemsStoredAsObjects</code> has to be set to true.
197
214
  */
198
215
  storage: undefined,
@@ -204,32 +221,48 @@ sap.ui.define([
204
221
  * Provides the flex data stored in the session or local storage;
205
222
  * Changes can be filtered by reference and layer.
206
223
  *
207
- * @param {object} mPropertyBag properties needed by the connectors
208
- * @param {string} mPropertyBag.reference reference of the application
209
- * @returns {Promise<Object>} resolving with an object containing a data contained in the changes-bundle
224
+ * @param {object} mPropertyBag - Properties needed by the connectors
225
+ * @param {string} mPropertyBag.reference - Reference of the application
226
+ * @param {string} [mPropertyBag.version] - Version of the adaptation to be loaded
227
+ * @returns {Promise<Object>} - Resolving with an object containing a data contained in the changes-bundle
210
228
  */
211
- loadFlexData(mPropertyBag) {
212
- return loadDataFromStorage({
229
+ async loadFlexData(mPropertyBag) {
230
+ const aFlexObjects = await loadDataFromStorage({
213
231
  storage: this.storage,
214
232
  reference: mPropertyBag.reference
215
- }).then(function(aFlexObjects) {
216
- StorageUtils.sortFlexObjects(aFlexObjects);
217
- var mGroupedFlexObjects = StorageUtils.getGroupedFlexObjects(aFlexObjects);
218
- var aResponses = StorageUtils.filterAndSortResponses(mGroupedFlexObjects);
219
- if (aResponses.length) {
220
- aResponses[0].cacheKey = calculateCacheKey(aFlexObjects);
221
- }
222
- return aResponses;
223
233
  });
234
+
235
+ const aVersionChain = await this.versions.getVersionChain.call(this, mPropertyBag, mPropertyBag.version);
236
+ const aFilteredFlexObjects = aFlexObjects.filter((oFlexObject) =>
237
+ oFlexObject.version === undefined || aVersionChain.includes(oFlexObject.version)
238
+ );
239
+ const aSortedFilteredFlexObjects = StorageUtils.sortFlexObjects(aFilteredFlexObjects);
240
+ const mGroupedFlexObjects = StorageUtils.getGroupedFlexObjects(aSortedFilteredFlexObjects);
241
+ const aResponses = StorageUtils.filterAndSortResponses(mGroupedFlexObjects);
242
+ if (aResponses.length) {
243
+ aResponses[0].cacheKey = calculateCacheKey(aSortedFilteredFlexObjects);
244
+ }
245
+ return aResponses;
224
246
  },
225
247
 
226
248
  /**
227
249
  * @inheritDoc
228
250
  */
229
251
  async write(mPropertyBag) {
252
+ const mFeatures = await this.loadFeatures();
253
+ let sDraftVersionId;
254
+ if (mFeatures.isVersioningEnabled && mPropertyBag.layer === Layer.CUSTOMER) {
255
+ // the reference for the versions have to be determined by a flex object
256
+ mPropertyBag.reference = mPropertyBag.flexObjects[0]?.reference;
257
+ sDraftVersionId = await this.versions.getDraftId.call(this, mPropertyBag);
258
+ }
259
+
230
260
  let iIndex = 0;
231
261
  const aUpdatedFlexObjects = [];
232
262
  for (const oFlexObject of mPropertyBag.flexObjects) {
263
+ if (sDraftVersionId) {
264
+ oFlexObject.version = sDraftVersionId;
265
+ }
233
266
  const sKey = ObjectStorageUtils.createFlexObjectKey(oFlexObject);
234
267
  const oUpdatedFlexObject = setFlexObjectCreation(oFlexObject, ++iIndex);
235
268
  const vUpdatedFlexObject = this.storage._itemsStoredAsObjects ? oUpdatedFlexObject : JSON.stringify(oUpdatedFlexObject);
@@ -266,7 +299,7 @@ sap.ui.define([
266
299
  if (shouldChangeBeDeleted(mPropertyBag, mFlexObject.changeDefinition)) {
267
300
  return Promise.resolve(this.storage.removeItem(mFlexObject.key)).then(function() {
268
301
  return {
269
- fileName: mFlexObject.changeDefinition && mFlexObject.changeDefinition.fileName
302
+ fileName: mFlexObject.changeDefinition?.fileName || mFlexObject.changeDefinition?.id
270
303
  };
271
304
  });
272
305
  }
@@ -295,13 +328,14 @@ sap.ui.define([
295
328
  * @inheritDoc
296
329
  */
297
330
  loadFeatures() {
298
- return Promise.resolve({
299
- isKeyUser: true,
300
- isVariantSharingEnabled: true,
301
- isProductiveSystem: false,
302
- isCondensingEnabled: true,
303
- isContextSharingEnabled: false
304
- });
331
+ return Promise.resolve(mFeatures);
332
+ },
333
+
334
+ /**
335
+ * @inheritDoc
336
+ */
337
+ loadVariantsAuthors() {
338
+ return Promise.reject("loadVariantsAuthors is not implemented");
305
339
  },
306
340
 
307
341
  /**
@@ -319,28 +353,207 @@ sap.ui.define([
319
353
  /**
320
354
  * @inheritDoc
321
355
  */
322
- condense(mPropertyBag) {
356
+ async condense(mPropertyBag) {
323
357
  // the functionality below would normally be done in the back end
324
358
  // but in this case the storage can't be extended, so the logic has to be included in the connector
325
359
  var oCondenseInformation = mPropertyBag.flexObjects;
326
360
  var aObjectsToSet = [];
327
361
  // the same FlexObject can be in multiple sections of the condense information, so the instance has to be set in the array
328
- aObjectsToSet = aObjectsToSet.concat(handleCondenseCreate(oCondenseInformation.create, mPropertyBag.condensedChanges));
362
+ aObjectsToSet = aObjectsToSet.concat(handleCondenseCreate(oCondenseInformation.create, mPropertyBag));
329
363
  aObjectsToSet = aObjectsToSet.concat(handleCondenseUpdate(oCondenseInformation.update, mPropertyBag.condensedChanges));
330
364
  aObjectsToSet = aObjectsToSet.concat(handleCondenseReorder(oCondenseInformation.reorder, mPropertyBag.condensedChanges));
331
365
  aObjectsToSet = _uniqBy(aObjectsToSet, "key");
332
366
 
333
367
  var aPromises = [];
368
+ var aResponse = [];
334
369
  aPromises = aPromises.concat(handleCondenseDelete.call(this, oCondenseInformation.delete));
370
+
371
+ const mFeatures = await this.loadFeatures();
372
+ let sDraftVersionId;
373
+ if (
374
+ mFeatures.isVersioningEnabled
375
+ && mPropertyBag.layer === Layer.CUSTOMER
376
+ && ((oCondenseInformation.create && Object.keys(oCondenseInformation.create).length !== 0)
377
+ || (oCondenseInformation.update && Object.keys(oCondenseInformation.update).length !== 0)
378
+ || (oCondenseInformation.reorder && Object.keys(oCondenseInformation.reorder).length !== 0))
379
+ ) {
380
+ // the reference for the versions have to be determined by a flex object
381
+ sDraftVersionId = await this.versions.getDraftId.call(this, mPropertyBag);
382
+ }
383
+
335
384
  aObjectsToSet.forEach(function(oItemToSet) {
336
385
  var oFileContent = oItemToSet.value.convertToFileContent();
386
+ if (sDraftVersionId) {
387
+ oFileContent.version = sDraftVersionId;
388
+ }
389
+ aResponse.push(oFileContent);
337
390
  var vFlexObject = this.storage._itemsStoredAsObjects ? oFileContent : JSON.stringify(oFileContent);
338
391
  aPromises.push(this.storage.setItem(oItemToSet.key, vFlexObject));
339
392
  }.bind(this));
393
+ return Promise.all(aPromises).then(function() {
394
+ return Promise.resolve({response: aResponse});
395
+ });
396
+ },
397
+
398
+ /**
399
+ * @inheritDoc
400
+ */
401
+ versions: {
402
+ async getDraftId(mPropertyBag) {
403
+ let aDraftFilenames = [];
404
+ if (mPropertyBag.condensedChanges) {
405
+ aDraftFilenames = mPropertyBag.condensedChanges.map((change) => {return change.sId;});
406
+ } else {
407
+ aDraftFilenames = mPropertyBag.flexObjects.map((flexObject) => {return flexObject.fileName;});
408
+ }
409
+
410
+ const aVersions = await this.versions.load.call(this, mPropertyBag);
411
+ let oDraftVersion = aVersions.find((oVersion) => oVersion.isDraft);
412
+ if (oDraftVersion) {
413
+ if (mPropertyBag.condensedChanges) {
414
+ oDraftVersion.filenames = [];
415
+ }
416
+ oDraftVersion.filenames = aDraftFilenames.concat(oDraftVersion.filenames);
417
+ } else {
418
+ // create new a draft version
419
+ oDraftVersion = {
420
+ version: Version.Number.Draft,
421
+ id: Utils.createDefaultFileName("version"),
422
+ isDraft: true,
423
+ activatedAt: "",
424
+ activatedBy: "",
425
+ fileType: "version",
426
+ layer: Layer.CUSTOMER,
427
+ title: "",
428
+ reference: mPropertyBag.reference,
429
+ filenames: aDraftFilenames
430
+ };
431
+ if (mPropertyBag.parentVersion !== Version.Number.Original) {
432
+ oDraftVersion.parentVersion = mPropertyBag.parentVersion;
433
+ }
434
+ }
340
435
 
341
- return Promise.all(aPromises);
436
+ const sKey = ObjectStorageUtils.createFlexKey(`${oDraftVersion.id}`);
437
+ const vVersion = this.storage._itemsStoredAsObjects ? oDraftVersion : JSON.stringify(oDraftVersion);
438
+ await this.storage.setItem(sKey, vVersion);
439
+
440
+ return oDraftVersion.id;
441
+ },
442
+
443
+ /**
444
+ * Determines recursive the chain of a given version by collecting their <code>parentVersion</code> relations.
445
+ *
446
+ * @param {object} mPropertyBag - Property bag
447
+ * @param {string} [sVersionId] - ID of the version for which the chain should be determined. In case no ID is provided, the latest non-draft is used.
448
+ * @returns {string[]} - List of version IDs needed to retrieve the data
449
+ *
450
+ * @private
451
+ */
452
+ async getVersionChain(mPropertyBag, sVersionId) {
453
+ const aVersionChain = [];
454
+ const findVersion = (sVersionId, oVersion) => sVersionId === oVersion.version;
455
+ const aVersions = await this.versions.load.call(this, mPropertyBag);
456
+ // default is always the latest non-draft
457
+ sVersionId ||= aVersions.find((oVersion) => !oVersion.isDraft)?.id;
458
+
459
+ while (sVersionId) {
460
+ const oVersion = aVersions.find(findVersion.bind(undefined, sVersionId));
461
+ aVersionChain.push(oVersion.id);
462
+ sVersionId = oVersion.parentVersion;
463
+ }
464
+
465
+ return aVersionChain;
466
+ },
467
+
468
+ /**
469
+ * @inheritDoc
470
+ */
471
+ async load(mPropertyBag) {
472
+ const aFlexObjects = await loadDataFromStorage({
473
+ storage: this.storage,
474
+ reference: mPropertyBag.reference
475
+ });
476
+
477
+ return aFlexObjects.filter((oFlexObject) => oFlexObject.fileType === "version").sort((a, b) => {
478
+ if (a.isDraft) {
479
+ return -1;
480
+ }
481
+ if (b.isDraft) {
482
+ return 1;
483
+ }
484
+ return a.activatedAt < b.activatedAt ? 1 : -1;
485
+ });
486
+ },
487
+
488
+ /**
489
+ * @inheritDoc
490
+ */
491
+ async activate(mPropertyBag) {
492
+ const mFeatures = await this.loadFeatures();
493
+ const aVersions = await this.versions.load.call(this, mPropertyBag);
494
+ var oActivateVersion = aVersions.find((oVersion) => oVersion.version === mPropertyBag.version);
495
+ if (oActivateVersion) {
496
+ // activate an older version
497
+ if (!oActivateVersion.isDraft) {
498
+ oActivateVersion.id = Utils.createDefaultFileName("version");
499
+ oActivateVersion.parentVersion = mPropertyBag.version;
500
+ }
501
+ } else {
502
+ // activate original version
503
+ const sNewVersionId = Utils.createDefaultFileName("version");
504
+ oActivateVersion = {
505
+ version: sNewVersionId,
506
+ id: sNewVersionId,
507
+ fileType: "version",
508
+ layer: Layer.CUSTOMER,
509
+ reference: mPropertyBag.reference
510
+ };
511
+ }
512
+ // when activate an older version and draft exists needs to discard the draft
513
+ if (mPropertyBag.version !== Version.Number.Draft) {
514
+ const oDraftVersion = aVersions.find((oVersion) => oVersion.isDraft);
515
+ if (oDraftVersion) {
516
+ await this.versions.discardDraft.call(this, mPropertyBag);
517
+ }
518
+ }
519
+ const sKey = ObjectStorageUtils.createFlexKey(oActivateVersion.id);
520
+ oActivateVersion.title = mPropertyBag.title;
521
+ oActivateVersion.activatedAt = new Date(Date.now()).toISOString();
522
+ oActivateVersion.activatedBy = mFeatures.logonUser;
523
+ oActivateVersion.isDraft = false;
524
+ oActivateVersion.version = oActivateVersion.id;
525
+ delete oActivateVersion.filenames;
526
+ const vFlexObject = this.storage._itemsStoredAsObjects ? oActivateVersion : JSON.stringify(oActivateVersion);
527
+ this.storage.setItem(sKey, vFlexObject);
528
+ return oActivateVersion;
529
+ },
530
+
531
+ /**
532
+ * @inheritDoc
533
+ */
534
+ async discardDraft(mPropertyBag) {
535
+ mPropertyBag.storage = this.storage;
536
+ const aVersions = await this.versions.load.call(this, mPropertyBag);
537
+ const sDraftVersionId = aVersions.find((oVersion) => oVersion.isDraft)?.id;
538
+ if (!sDraftVersionId) {
539
+ return Promise.reject("no version to discard");
540
+ }
541
+
542
+ const aFiles = await loadDataFromStorage(mPropertyBag);
543
+ const aDraftFiles = aFiles.filter((oFlexObject) => oFlexObject.version === sDraftVersionId);
544
+ // discard the version itself
545
+ const oDraftVersion = aVersions.find((oVersion) => oVersion.id === sDraftVersionId);
546
+ aDraftFiles.push(oDraftVersion);
547
+ // discard flex objects
548
+ const aDiscardPromises = aDraftFiles.map((oFlexObject) => {
549
+ var sKey = ObjectStorageUtils.createFlexKey(oFlexObject.fileName || oFlexObject.id);
550
+ return this.storage.removeItem(sKey);
551
+ });
552
+
553
+ await Promise.all(aDiscardPromises);
554
+ }
342
555
  }
343
556
  });
344
557
 
345
558
  return ObjectStorageConnector;
346
- });
559
+ });
@@ -15,7 +15,7 @@ sap.ui.define([
15
15
  * @namespace sap.ui.fl.write.connectors.BaseConnector
16
16
  * @since 1.67
17
17
  * @private
18
- * @ui5-restricted sap.ui.fl
18
+ * @ui5-restricted sap.ui.fl, SAP Web IDE/BAS (Visual Editor)
19
19
  */
20
20
  var BaseConnector = /** @lends sap.ui.fl.write.connectors.BaseConnector */{
21
21
 
@@ -48,6 +48,7 @@ sap.ui.define([
48
48
  * @param {object} mPropertyBag Property bag
49
49
  * @param {object[]} mPropertyBag.flexObjects Map of condensed changes
50
50
  * @param {sap.ui.fl.Layer} mPropertyBag.layer Layer in which the data should be stored
51
+ * @param {string} mPropertyBag.reference Flex reference of the application
51
52
  * @param {string} [mPropertyBag.transport] The transport ID
52
53
  * @param {boolean} [mPropertyBag.isLegacyVariant] Whether the new flex data has file type .variant or not
53
54
  * @param {string} [mPropertyBag.url] Configured url for the connector
@@ -170,15 +171,6 @@ sap.ui.define([
170
171
  return Promise.resolve(false);
171
172
  },
172
173
 
173
- /**
174
- * Interface called to get the flex feature.
175
- *
176
- * @returns {Promise<object>} Resolves with an object containing the data for the flex features
177
- */
178
- loadFeatures() {
179
- return Promise.reject("loadFeatures is not implemented");
180
- },
181
-
182
174
  contextBasedAdaptation: {
183
175
  create() {
184
176
  return Promise.reject("contextBasedAdaptation.create is not implemented");
package/ui5.yaml CHANGED
@@ -16,57 +16,54 @@ builder:
16
16
  name: sap/ui/fl/library-preload.js
17
17
  sections:
18
18
  - mode: provided
19
- filters:
20
- - ui5loader-autoconfig.js
21
- - sap/base/
22
- - sap/m/
23
- - sap/ui/Device.js
24
- - sap/ui/base/
25
- - sap/ui/core/
26
- - sap/ui/dom/
27
- - sap/ui/events/
28
- - sap/ui/layout/
29
- - sap/ui/model/
30
- - sap/ui/performance/
31
- - sap/ui/thirdparty/
32
- - sap/ui/unified/
33
- - sap/ui/util/
19
+ filters: &filters-for-externals
20
+ - "**/" # assume everything as provided ...
21
+ - "!sap/ui/fl/" # ... except the modules from sap/ui/fl
22
+ - "**/designtime/" #
23
+ - "**/*.designtime.js" # also exclude all designtime ...
24
+ - "**/*.support.js" # ... and support files
25
+ resolve: false
34
26
  - mode: preload
35
27
  name: sap/ui/fl/library-preload
36
- filters:
37
- - sap/ui/fl/initial/
38
- - sap/ui/fl/changeHandler/
28
+ filters: &filters-for-initial
39
29
  - sap/ui/fl/library.js
40
30
  - sap/ui/fl/manifest.json
41
- - sap/ui/fl/variants/VariantManagement.js
42
- - sap/ui/fl/util/ManagedObjectModel.js
43
31
  - sap/ui/fl/apply/_internal/DelegateMediator.js
44
32
  - sap/ui/fl/apply/api/DelegateMediatorAPI.js
45
33
  - sap/ui/fl/apply/api/FlexRuntimeInfoAPI.js
46
- - sap/ui/fl/library-dbg.support.js
47
- - sap/ui/fl/registry/SimpleChanges.js
34
+ - sap/ui/fl/changeHandler/
35
+ - sap/ui/fl/initial/
48
36
  - sap/ui/fl/interfaces/Delegate.js
49
37
  - sap/ui/fl/interfaces/BaseLoadConnector.js
38
+ - sap/ui/fl/registry/SimpleChanges.js
39
+ - sap/ui/fl/util/ManagedObjectModel.js
40
+ - sap/ui/fl/variants/VariantManagement.js
41
+ # exclude all bundles
42
+ - "!sap/ui/fl/**/*-preload*.js"
50
43
  resolve: true
51
44
  - mode: bundleInfo
52
45
  name: sap/ui/fl/library-preload-apply.js
53
- filters:
46
+ filters: &filters-for-apply
54
47
  - sap/ui/fl/apply/
55
48
  - sap/ui/fl/transport/TransportDialog.js
56
49
  - sap/ui/fl/transport/TransportSelection.js
57
50
  - sap/ui/fl/util/IFrame.flexibility.js
51
+ # exclude all bundles
52
+ - "!sap/ui/fl/**/*-preload*.js"
58
53
  resolve: true
59
54
  - mode: bundleInfo
60
55
  name: sap/ui/fl/library-preload-write.js
61
- filters:
62
- - sap/ui/fl/write/
63
- - sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js
64
- - sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js
56
+ filters: &filters-for-write
65
57
  - sap/ui/fl/FakeLrepConnectorLocalStorage.js
66
58
  - sap/ui/fl/FakeLrepConnectorSessionStorage.js
67
59
  - sap/ui/fl/FakeLrepLocalStorage.js
68
60
  - sap/ui/fl/FakeLrepConnector.js
61
+ - sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js
62
+ - sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js
69
63
  - sap/ui/fl/util/resolveBinding.js
64
+ - sap/ui/fl/write/
65
+ # exclude all bundles
66
+ - "!sap/ui/fl/**/*-preload*.js"
70
67
  resolve: true
71
68
  bundleOptions:
72
69
  optimize: true
@@ -75,31 +72,14 @@ builder:
75
72
  name: sap/ui/fl/library-preload-apply.js
76
73
  sections:
77
74
  - mode: provided
78
- filters:
79
- - sap/ui/fl/library.js
80
- - sap/ui/fl/changeHandler/
81
- - ui5loader-autoconfig.js
82
- - sap/base/
83
- - sap/m/
84
- - sap/ui/Device.js
85
- - sap/ui/base/
86
- - sap/ui/core/
87
- - sap/ui/dom/
88
- - sap/ui/events/
89
- - sap/ui/layout/
90
- - sap/ui/model/
91
- - sap/ui/performance/
92
- - sap/ui/thirdparty/
93
- - sap/ui/unified/
94
- - sap/ui/util/
75
+ filters: *filters-for-externals
76
+ resolve: false
77
+ - mode: provided
78
+ filters: *filters-for-initial
95
79
  resolve: true
96
80
  - mode: preload
97
81
  name: sap/ui/fl/library-preload-apply
98
- filters:
99
- - sap/ui/fl/apply/
100
- - sap/ui/fl/transport/TransportDialog.js
101
- - sap/ui/fl/transport/TransportSelection.js
102
- - sap/ui/fl/util/IFrame.flexibility.js
82
+ filters: *filters-for-apply
103
83
  resolve: true
104
84
  bundleOptions:
105
85
  optimize: true
@@ -108,36 +88,17 @@ builder:
108
88
  name: sap/ui/fl/library-preload-write.js
109
89
  sections:
110
90
  - mode: provided
111
- filters:
112
- - sap/ui/fl/library.js
113
- - sap/ui/fl/apply/
114
- - sap/ui/fl/changeHandler/
115
- - ui5loader-autoconfig.js
116
- - sap/base/
117
- - sap/m/
118
- - sap/ui/Device.js
119
- - sap/ui/base/
120
- - sap/ui/core/
121
- - sap/ui/dom/
122
- - sap/ui/events/
123
- - sap/ui/layout/
124
- - sap/ui/model/
125
- - sap/ui/performance/
126
- - sap/ui/thirdparty/
127
- - sap/ui/unified/
128
- - sap/ui/util/
91
+ filters: *filters-for-externals
92
+ resolve: false
93
+ - mode: provided
94
+ filters: *filters-for-initial
95
+ resolve: true
96
+ - mode: provided
97
+ filters: *filters-for-apply
129
98
  resolve: true
130
99
  - mode: preload
131
100
  name: sap/ui/fl/library-preload-write
132
- filters:
133
- - sap/ui/fl/write/
134
- - sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js
135
- - sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js
136
- - sap/ui/fl/FakeLrepConnectorLocalStorage.js
137
- - sap/ui/fl/FakeLrepConnectorSessionStorage.js
138
- - sap/ui/fl/FakeLrepLocalStorage.js
139
- - sap/ui/fl/FakeLrepConnector.js
140
- - sap/ui/fl/util/resolveBinding.js
101
+ filters: *filters-for-write
141
102
  resolve: true
142
103
  bundleOptions:
143
104
  optimize: true
@@ -1,22 +0,0 @@
1
- Copyright (c) <year> <owner>. All rights reserved.
2
-
3
- Redistribution and use in source and binary forms, with or without modification,
4
- are permitted provided that the following conditions are met:
5
-
6
- 1. Redistributions of source code must retain the above copyright notice,
7
- this list of conditions and the following disclaimer.
8
-
9
- 2. Redistributions in binary form must reproduce the above copyright notice,
10
- this list of conditions and the following disclaimer in the documentation
11
- and/or other materials provided with the distribution.
12
-
13
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
17
- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
22
- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,26 +0,0 @@
1
- /*!
2
- * OpenUI5
3
- * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
4
- * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
- */
6
-
7
- sap.ui.define([
8
- ], function(
9
- ) {
10
- "use strict";
11
-
12
- /**
13
- * Prepares the ChangesMap from the flex response
14
- *
15
- * @function
16
- * @since 1.74
17
- * @private
18
- * @ui5-restricted
19
- * @alias module:sap/ui/fl/apply/_internal/flexState/changes/prepareChangesMap
20
- *
21
- * @param {object} mPropertyBag - Contains additional data needed for preparing the map
22
- * @param {object} mPropertyBag.storageResponse - Storage response with the flex data
23
- */
24
- return function(/* mPropertyBag */) {
25
- };
26
- });