@openui5/sap.ui.fl 1.129.0 → 1.130.1

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 (172) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +3 -3
  3. package/src/sap/ui/fl/.library +1 -1
  4. package/src/sap/ui/fl/ChangePersistence.js +26 -38
  5. package/src/sap/ui/fl/ChangePersistenceFactory.js +1 -1
  6. package/src/sap/ui/fl/FakeLrepConnectorLocalStorage.js +1 -1
  7. package/src/sap/ui/fl/FakeLrepConnectorSessionStorage.js +1 -1
  8. package/src/sap/ui/fl/FakeLrepLocalStorage.js +1 -1
  9. package/src/sap/ui/fl/FlexController.js +1 -1
  10. package/src/sap/ui/fl/FlexControllerFactory.js +1 -1
  11. package/src/sap/ui/fl/LayerUtils.js +1 -1
  12. package/src/sap/ui/fl/Utils.js +8 -8
  13. package/src/sap/ui/fl/apply/_internal/DelegateMediator.js +1 -1
  14. package/src/sap/ui/fl/apply/_internal/appVariant/DescriptorChangeTypes.js +2 -1
  15. package/src/sap/ui/fl/apply/_internal/changes/Applier.js +152 -197
  16. package/src/sap/ui/fl/apply/_internal/changes/FlexCustomData.js +23 -17
  17. package/src/sap/ui/fl/apply/_internal/changes/Reverter.js +27 -37
  18. package/src/sap/ui/fl/apply/_internal/changes/Utils.js +26 -31
  19. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Preprocessor.js +1 -1
  20. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Registration.js +3 -2
  21. package/src/sap/ui/fl/apply/_internal/changes/descriptor/RegistrationBuild.js +2 -1
  22. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddAnnotationsToOData.js +1 -1
  23. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddNewDataSource.js +1 -1
  24. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddNewInbound.js +1 -1
  25. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddNewOutbound.js +1 -1
  26. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddTechnicalAttributes.js +1 -1
  27. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeDataSource.js +1 -1
  28. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeInbound.js +1 -1
  29. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeOutbound.js +1 -1
  30. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/RemoveAllInboundsExceptOne.js +1 -1
  31. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/SetAch.js +1 -1
  32. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/SetDescription.js +1 -1
  33. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/SetTitle.js +1 -1
  34. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetAbstract.js +1 -1
  35. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetCloudDevAdaptationStatus.js +1 -1
  36. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetRegistrationIds.js +1 -1
  37. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/AddNewCard.js +1 -1
  38. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/ChangeCard.js +1 -1
  39. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/DeleteCard.js +1 -1
  40. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddComponentUsages.js +1 -1
  41. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddLibrary.js +1 -1
  42. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModel.js +1 -1
  43. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModelEnhanceWith.js +1 -1
  44. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/ChangeModel.js +78 -0
  45. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetFlexExtensionPointEnabled.js +1 -1
  46. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetMinUI5Version.js +1 -1
  47. package/src/sap/ui/fl/apply/_internal/connectors/ObjectStorageUtils.js +1 -1
  48. package/src/sap/ui/fl/apply/_internal/extensionPoint/Processor.js +1 -1
  49. package/src/sap/ui/fl/apply/_internal/extensionPoint/Registry.js +1 -1
  50. package/src/sap/ui/fl/apply/_internal/flexObjects/AnnotationChange.js +1 -1
  51. package/src/sap/ui/fl/apply/_internal/flexObjects/AppDescriptorChange.js +1 -1
  52. package/src/sap/ui/fl/apply/_internal/flexObjects/CompVariant.js +1 -1
  53. package/src/sap/ui/fl/apply/_internal/flexObjects/ControllerExtensionChange.js +1 -1
  54. package/src/sap/ui/fl/apply/_internal/flexObjects/FlVariant.js +1 -1
  55. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObject.js +1 -1
  56. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObjectFactory.js +7 -3
  57. package/src/sap/ui/fl/apply/_internal/flexObjects/UIChange.js +1 -1
  58. package/src/sap/ui/fl/apply/_internal/flexObjects/Variant.js +1 -1
  59. package/src/sap/ui/fl/apply/_internal/flexObjects/getVariantAuthor.js +1 -1
  60. package/src/sap/ui/fl/apply/_internal/flexState/FlexObjectState.js +1 -1
  61. package/src/sap/ui/fl/apply/_internal/flexState/FlexState.js +34 -13
  62. package/src/sap/ui/fl/apply/_internal/flexState/Loader.js +1 -1
  63. package/src/sap/ui/fl/apply/_internal/flexState/ManifestUtils.js +1 -1
  64. package/src/sap/ui/fl/apply/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  65. package/src/sap/ui/fl/apply/_internal/flexState/changes/DependencyHandler.js +1 -1
  66. package/src/sap/ui/fl/apply/_internal/flexState/changes/ExtensionPointState.js +1 -1
  67. package/src/sap/ui/fl/apply/_internal/flexState/changes/UIChangesState.js +1 -1
  68. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/CompVariantManagementState.js +108 -0
  69. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/CompVariantMerger.js +2 -2
  70. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/Switcher.js +1 -1
  71. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/VariantManagementState.js +57 -9
  72. package/src/sap/ui/fl/apply/_internal/preprocessors/ComponentLifecycleHooks.js +2 -2
  73. package/src/sap/ui/fl/apply/_internal/preprocessors/ControllerExtension.js +1 -1
  74. package/src/sap/ui/fl/apply/_internal/preprocessors/RegistrationDelegator.js +6 -6
  75. package/src/sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor.js +1 -1
  76. package/src/sap/ui/fl/apply/api/ControlVariantApplyAPI.js +25 -10
  77. package/src/sap/ui/fl/apply/api/SmartVariantManagementApplyAPI.js +18 -45
  78. package/src/sap/ui/fl/changeHandler/AddIFrame.js +1 -1
  79. package/src/sap/ui/fl/changeHandler/AddXML.js +1 -1
  80. package/src/sap/ui/fl/changeHandler/AddXMLAtExtensionPoint.js +1 -1
  81. package/src/sap/ui/fl/changeHandler/Base.js +1 -1
  82. package/src/sap/ui/fl/changeHandler/BaseAddViaDelegate.js +1 -1
  83. package/src/sap/ui/fl/changeHandler/BaseAddXml.js +1 -1
  84. package/src/sap/ui/fl/changeHandler/BaseRename.js +1 -1
  85. package/src/sap/ui/fl/changeHandler/HideControl.js +1 -1
  86. package/src/sap/ui/fl/changeHandler/MoveControls.js +1 -1
  87. package/src/sap/ui/fl/changeHandler/MoveElements.js +1 -1
  88. package/src/sap/ui/fl/changeHandler/PropertyBindingChange.js +1 -1
  89. package/src/sap/ui/fl/changeHandler/PropertyChange.js +1 -1
  90. package/src/sap/ui/fl/changeHandler/StashControl.js +1 -1
  91. package/src/sap/ui/fl/changeHandler/UnhideControl.js +1 -1
  92. package/src/sap/ui/fl/changeHandler/UnstashControl.js +1 -1
  93. package/src/sap/ui/fl/changeHandler/UpdateIFrame.js +1 -1
  94. package/src/sap/ui/fl/descriptorRelated/api/DescriptorChangeFactory.js +4 -4
  95. package/src/sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js +1 -1
  96. package/src/sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js +1 -1
  97. package/src/sap/ui/fl/initial/_internal/FlexConfiguration.js +1 -1
  98. package/src/sap/ui/fl/initial/_internal/Storage.js +37 -1
  99. package/src/sap/ui/fl/initial/_internal/StorageFeaturesMerger.js +1 -1
  100. package/src/sap/ui/fl/initial/_internal/StorageUtils.js +1 -1
  101. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerRegistration.js +3 -2
  102. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerStorage.js +1 -1
  103. package/src/sap/ui/fl/initial/_internal/connectors/Utils.js +1 -1
  104. package/src/sap/ui/fl/initial/_internal/storageResultDisassemble.js +1 -1
  105. package/src/sap/ui/fl/interfaces/BaseLoadConnector.js +15 -1
  106. package/src/sap/ui/fl/interfaces/Delegate.js +1 -1
  107. package/src/sap/ui/fl/library.js +43 -43
  108. package/src/sap/ui/fl/support/_internal/getAllUIChanges.js +1 -1
  109. package/src/sap/ui/fl/support/_internal/getChangeDependencies.js +1 -1
  110. package/src/sap/ui/fl/support/_internal/getFlexObjectInfos.js +1 -1
  111. package/src/sap/ui/fl/support/_internal/getFlexSettings.js +1 -1
  112. package/src/sap/ui/fl/support/api/SupportAPI.js +1 -1
  113. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetails.controller.js +1 -1
  114. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetailsEdit.controller.js +1 -1
  115. package/src/sap/ui/fl/support/apps/contentbrowser/controller/LayerContentMaster.controller.js +1 -1
  116. package/src/sap/ui/fl/support/apps/contentbrowser/controller/Layers.controller.js +1 -1
  117. package/src/sap/ui/fl/support/apps/contentbrowser/lrepConnector/LRepConnector.js +1 -1
  118. package/src/sap/ui/fl/support/apps/contentbrowser/utils/DataUtils.js +1 -1
  119. package/src/sap/ui/fl/support/apps/contentbrowser/utils/ErrorUtils.js +1 -1
  120. package/src/sap/ui/fl/transport/TransportSelection.js +1 -1
  121. package/src/sap/ui/fl/util/DescriptorChangeCheck.js +35 -16
  122. package/src/sap/ui/fl/util/IFrame.js +1 -1
  123. package/src/sap/ui/fl/util/ManagedObjectModel.js +1 -1
  124. package/src/sap/ui/fl/util/resolveBinding.js +1 -1
  125. package/src/sap/ui/fl/variants/VariantModel.js +33 -11
  126. package/src/sap/ui/fl/write/_internal/Storage.js +1 -1
  127. package/src/sap/ui/fl/write/_internal/Versions.js +7 -3
  128. package/src/sap/ui/fl/write/_internal/appVariant/AppVariant.js +1 -1
  129. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantFactory.js +1 -1
  130. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChange.js +1 -1
  131. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChangeFactory.js +34 -1
  132. package/src/sap/ui/fl/write/_internal/condenser/Condenser.js +163 -176
  133. package/src/sap/ui/fl/write/_internal/condenser/UIReconstruction.js +62 -61
  134. package/src/sap/ui/fl/write/_internal/condenser/Utils.js +17 -19
  135. package/src/sap/ui/fl/write/_internal/condenser/classifications/Create.js +13 -13
  136. package/src/sap/ui/fl/write/_internal/condenser/classifications/Destroy.js +17 -19
  137. package/src/sap/ui/fl/write/_internal/condenser/classifications/Move.js +32 -35
  138. package/src/sap/ui/fl/write/_internal/condenser/classifications/Update.js +2 -10
  139. package/src/sap/ui/fl/write/_internal/connectors/BackendConnector.js +1 -1
  140. package/src/sap/ui/fl/write/_internal/connectors/BtpServiceConnector.js +1 -1
  141. package/src/sap/ui/fl/write/_internal/connectors/KeyUserConnector.js +1 -1
  142. package/src/sap/ui/fl/write/_internal/connectors/LrepConnector.js +56 -4
  143. package/src/sap/ui/fl/write/_internal/connectors/NeoLrepConnector.js +1 -1
  144. package/src/sap/ui/fl/write/_internal/connectors/ObjectPathConnector.js +1 -1
  145. package/src/sap/ui/fl/write/_internal/connectors/PersonalizationConnector.js +1 -1
  146. package/src/sap/ui/fl/write/_internal/connectors/Utils.js +1 -1
  147. package/src/sap/ui/fl/write/_internal/controlVariants/ControlVariantWriteUtils.js +59 -0
  148. package/src/sap/ui/fl/write/_internal/delegates/ODataV2ReadDelegate.js +1 -2
  149. package/src/sap/ui/fl/write/_internal/extensionPoint/Processor.js +1 -1
  150. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPAccess.js +1 -1
  151. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariant.js +1 -1
  152. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariantFactory.js +1 -1
  153. package/src/sap/ui/fl/write/_internal/fieldExtensibility/MultiTenantABAPExtensibilityVariant.js +1 -1
  154. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ServiceValidation.js +1 -1
  155. package/src/sap/ui/fl/write/_internal/fieldExtensibility/SingleTenantABAPExtensibilityVariant.js +1 -1
  156. package/src/sap/ui/fl/write/_internal/fieldExtensibility/UriParser.js +1 -1
  157. package/src/sap/ui/fl/write/_internal/fieldExtensibility/Utils.js +1 -1
  158. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/CAPAccess.js +1 -1
  159. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/dialog/CustomFieldCAPDialog.js +1 -1
  160. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/booleanEditor/BooleanEditor.js +1 -1
  161. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/rangeEditor/RangeEditor.js +1 -1
  162. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/timeEditor/TimeEditor.js +1 -1
  163. package/src/sap/ui/fl/write/_internal/flexState/FlexObjectManager.js +33 -2
  164. package/src/sap/ui/fl/write/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  165. package/src/sap/ui/fl/write/_internal/flexState/changes/UIChangeManager.js +26 -3
  166. package/src/sap/ui/fl/write/_internal/flexState/compVariants/CompVariantState.js +20 -12
  167. package/src/sap/ui/fl/write/_internal/transport/TransportSelection.js +1 -1
  168. package/src/sap/ui/fl/write/_internal/transport/Transports.js +1 -1
  169. package/src/sap/ui/fl/write/api/ChangesWriteAPI.js +73 -3
  170. package/src/sap/ui/fl/write/api/FieldExtensibility.js +1 -1
  171. package/src/sap/ui/fl/write/api/LocalResetAPI.js +17 -27
  172. package/src/sap/ui/fl/write/api/VersionsAPI.js +26 -4
@@ -27,10 +27,10 @@ sap.ui.define([
27
27
  ) {
28
28
  "use strict";
29
29
 
30
- var oLastPromise = (FlUtils.FakePromise ? new FlUtils.FakePromise() : Promise.resolve());
30
+ let oLastPromise = (FlUtils.FakePromise ? new FlUtils.FakePromise() : Promise.resolve());
31
31
  const oPendingProcessesOnControl = {};
32
32
 
33
- var Applier = {};
33
+ const Applier = {};
34
34
 
35
35
  /**
36
36
  * Formats the log message by replacing placeholders with values and logging the message.
@@ -38,18 +38,17 @@ sap.ui.define([
38
38
  * @param {string} sLogType - Logging type to be used. Possible values: info | warning | debug | error
39
39
  * @param {array.<string>} aMessageComponents - Individual parts of the message text
40
40
  * @param {array.<any>} aValuesToInsert - The values to be used instead of the placeholders in the message
41
- * @param {string} [sCallStack] - Passes the callstack to the logging function
41
+ * @param {string} [sCallStack] - Passes the call stack to the logging function
42
42
  */
43
43
  function formatAndLogMessage(sLogType, aMessageComponents, aValuesToInsert, sCallStack) {
44
- var sLogMessage = aMessageComponents.join(" ");
45
- sLogMessage = formatMessage(sLogMessage, aValuesToInsert);
44
+ const sLogMessage = formatMessage(aMessageComponents.join(" "), aValuesToInsert);
46
45
  Log[sLogType](sLogMessage, sCallStack || "");
47
46
  }
48
47
 
49
- function checkControlAndDependentSelectorControls(oChange, mPropertyBag) {
50
- var oSelector = oChange.getSelector && oChange.getSelector();
48
+ async function checkControlAndDependentSelectorControls(oChange, mPropertyBag) {
49
+ const oSelector = oChange.getSelector && oChange.getSelector();
51
50
  if (!oSelector || (!oSelector.id && !oSelector.name)) {
52
- return Promise.reject(Error("No selector in change found or no selector ID."));
51
+ throw Error("No selector in change found or no selector ID.");
53
52
  }
54
53
 
55
54
  function checkFailedSelectors(oSelector) {
@@ -58,27 +57,25 @@ sap.ui.define([
58
57
  }
59
58
  }
60
59
 
61
- return mPropertyBag.modifier.bySelectorTypeIndependent(oSelector, mPropertyBag.appComponent, mPropertyBag.view)
62
- .then(function(oControl) {
63
- if (!oControl) {
64
- throw Error("A flexibility change tries to change a nonexistent control.");
60
+ const oControl = await mPropertyBag.modifier.bySelectorTypeIndependent(oSelector, mPropertyBag.appComponent, mPropertyBag.view);
61
+ if (!oControl) {
62
+ throw Error("A flexibility change tries to change a nonexistent control.");
63
+ }
64
+ checkFailedSelectors(oSelector);
65
+
66
+ const aDependentControlSelectorList = oChange.getDependentControlSelectorList();
67
+ aDependentControlSelectorList.forEach((oDependentControlSelector) => {
68
+ const oDependentControl = mPropertyBag.modifier.bySelector(
69
+ oDependentControlSelector,
70
+ mPropertyBag.appComponent,
71
+ mPropertyBag.view
72
+ );
73
+ if (!oDependentControl) {
74
+ throw new Error("A dependent selector control of the flexibility change is not available.");
65
75
  }
66
- checkFailedSelectors(oSelector);
67
-
68
- var aDependentControlSelectorList = oChange.getDependentControlSelectorList();
69
- aDependentControlSelectorList.forEach(function(oDependentControlSelector) {
70
- var oDependentControl = mPropertyBag.modifier.bySelector(
71
- oDependentControlSelector,
72
- mPropertyBag.appComponent,
73
- mPropertyBag.view
74
- );
75
- if (!oDependentControl) {
76
- throw new Error("A dependent selector control of the flexibility change is not available.");
77
- }
78
- checkFailedSelectors(oDependentControlSelector);
79
- });
80
- return oControl;
76
+ checkFailedSelectors(oDependentControlSelector);
81
77
  });
78
+ return oControl;
82
79
  }
83
80
 
84
81
  function isXmlModifier(mPropertyBag) {
@@ -88,13 +85,13 @@ sap.ui.define([
88
85
  function checkAndAdjustChangeStatus(oControl, oChange, mPropertyBag, bSkipDependencies) {
89
86
  // in case of changes in templates, the original control is not always available at this point
90
87
  // example: rename on a control created by a change inside a template
91
- var oOriginalControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag).control;
92
- var oModifier = mPropertyBag.modifier;
93
- var bHasAppliedCustomData = oOriginalControl
88
+ const oOriginalControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag).control;
89
+ const oModifier = mPropertyBag.modifier;
90
+ const bHasAppliedCustomData = oOriginalControl
94
91
  && !!FlexCustomData.getAppliedCustomDataValue(oOriginalControl, oChange, oModifier);
95
- var bIsCurrentlyAppliedOnControl = oOriginalControl
92
+ const bIsCurrentlyAppliedOnControl = oOriginalControl
96
93
  && FlexCustomData.hasChangeApplyFinishedCustomData(oOriginalControl, oChange, oModifier);
97
- var bChangeStatusAppliedFinished = oChange.isApplyProcessFinished();
94
+ const bChangeStatusAppliedFinished = oChange.isApplyProcessFinished();
98
95
  if (bChangeStatusAppliedFinished && !bIsCurrentlyAppliedOnControl) {
99
96
  // if a change was already processed and is not applied anymore, then the control was destroyed and recreated.
100
97
  // In this case we need to recreate/copy the dependencies if we are applying in JS
@@ -119,53 +116,41 @@ sap.ui.define([
119
116
  }
120
117
 
121
118
  function checkPreconditions(oChange, mPropertyBag) {
122
- var sErrorMessage;
123
119
  if (isXmlModifier(mPropertyBag) && oChange.getJsOnly()) {
124
120
  // change is not capable of xml modifier
125
121
  // the change status has to be reset to initial
126
- sErrorMessage = "Change cannot be applied in XML. Retrying in JS.";
127
- }
128
-
129
- if (sErrorMessage) {
122
+ const sErrorMessage = "Change cannot be applied in XML. Retrying in JS.";
130
123
  oChange.setInitialApplyState();
131
124
  throw Error(sErrorMessage);
132
125
  }
133
126
  }
134
127
 
135
- function handleAfterApply(oChange, mControl, oInitializedControl, mPropertyBag) {
136
- return Promise.resolve()
137
- .then(function() {
138
- // changeHandler can return a different control, e.g. case where a visible UI control replaces the stashed control placeholder
139
- if (oInitializedControl instanceof Element) {
140
- // the newly rendered control could have custom data set from the XML modifier
141
- mControl.control = oInitializedControl;
142
- }
143
- if (mControl.control) {
144
- return mPropertyBag.modifier.updateAggregation(mControl.originalControl, oChange.getContent().boundAggregation);
145
- }
146
- return undefined;
147
- })
148
- .then(function() {
149
- // only save the revert data in the custom data when the change is being processed in XML,
150
- // as it's only relevant for viewCache at the moment
151
- return FlexCustomData.addAppliedCustomData(mControl.control, oChange, mPropertyBag, isXmlModifier(mPropertyBag));
152
- })
153
- .then(function() {
154
- // if a change was reverted previously remove the flag as it is not reverted anymore
155
- var oResult = {success: true};
156
- oChange.markSuccessful(oResult);
157
- return oResult;
158
- });
128
+ async function handleAfterApply(oChange, mControl, oInitializedControl, mPropertyBag) {
129
+ // changeHandler can return a different control, e.g. case where a visible UI control replaces the stashed control placeholder
130
+ if (oInitializedControl instanceof Element) {
131
+ // the newly rendered control could have custom data set from the XML modifier
132
+ mControl.control = oInitializedControl;
133
+ }
134
+ if (mControl.control) {
135
+ await mPropertyBag.modifier.updateAggregation(mControl.originalControl, oChange.getContent().boundAggregation);
136
+ }
137
+ // only save the revert data in the custom data when the change is being processed in XML,
138
+ // as it's only relevant for viewCache at the moment
139
+ await FlexCustomData.addAppliedCustomData(mControl.control, oChange, mPropertyBag, isXmlModifier(mPropertyBag));
140
+ // if a change was reverted previously remove the flag as it is not reverted anymore
141
+ const oResult = {success: true};
142
+ oChange.markSuccessful(oResult);
143
+ return oResult;
159
144
  }
160
145
 
161
- function handleAfterApplyError(oError, oChange, mControl, mPropertyBag) {
162
- var bXmlModifier = isXmlModifier(mPropertyBag);
163
- var oResult = {success: false, error: oError};
146
+ async function handleAfterApplyError(oError, oChange, mControl, mPropertyBag) {
147
+ const bXmlModifier = isXmlModifier(mPropertyBag);
148
+ const oResult = {success: false, error: oError};
164
149
 
165
- var sChangeId = oChange.getId();
166
- var sLogMessage = "Change ''{0}'' could not be applied.";
167
- var bErrorOccurred = oError instanceof Error;
168
- var sCustomDataIdentifier = FlexCustomData.getCustomDataIdentifier(false, bErrorOccurred, bXmlModifier);
150
+ const sChangeId = oChange.getId();
151
+ const sLogMessage = "Change ''{0}'' could not be applied.";
152
+ const bErrorOccurred = oError instanceof Error;
153
+ const sCustomDataIdentifier = FlexCustomData.getCustomDataIdentifier(false, bErrorOccurred, bXmlModifier);
169
154
  switch (sCustomDataIdentifier) {
170
155
  case FlexCustomData.notApplicableChangesCustomDataKey:
171
156
  formatAndLogMessage(
@@ -193,26 +178,24 @@ sap.ui.define([
193
178
  default:
194
179
  // no default
195
180
  }
196
- return FlexCustomData.addFailedCustomData(mControl.control, oChange, mPropertyBag, sCustomDataIdentifier)
197
- .then(function() {
198
- // if the change failed during XML processing, the status has to be reset
199
- // the change will be applied again in JS
200
- if (bXmlModifier) {
201
- oChange.setInitialApplyState();
202
- } else {
203
- oChange.markFailed(oResult);
204
- }
205
- return oResult;
206
- });
181
+ await FlexCustomData.addFailedCustomData(mControl.control, oChange, mPropertyBag, sCustomDataIdentifier);
182
+ // if the change failed during XML processing, the status has to be reset
183
+ // the change will be applied again in JS
184
+ if (bXmlModifier) {
185
+ oChange.setInitialApplyState();
186
+ } else {
187
+ oChange.markFailed(oResult);
188
+ }
189
+ return oResult;
207
190
  }
208
191
 
209
192
  function logApplyChangeError(oError, oChange) {
210
- var sChangeType = oChange.getChangeType();
211
- var sTargetControlId = oChange.getSelector().id;
212
- var fullQualifiedName = `${oChange.getNamespace() + oChange.getId()}.${oChange.getFileType()}`;
193
+ const sChangeType = oChange.getChangeType();
194
+ const sTargetControlId = oChange.getSelector().id;
195
+ const fullQualifiedName = `${oChange.getNamespace() + oChange.getId()}.${oChange.getFileType()}`;
213
196
 
214
- var sWarningMessage = "A flexibility change could not be applied.";
215
- sWarningMessage += "\nThe displayed UI might not be displayed as intedend.";
197
+ let sWarningMessage = "A flexibility change could not be applied.";
198
+ sWarningMessage += "\nThe displayed UI might not be displayed as intended.";
216
199
  if (oError.message) {
217
200
  sWarningMessage += `\n occurred error message: '${oError.message}'`;
218
201
  }
@@ -224,17 +207,17 @@ sap.ui.define([
224
207
  }
225
208
 
226
209
  function adjustOriginalSelector(oChange, oControl, oAppComponent) {
227
- var oPropertyBag = {
210
+ const oPropertyBag = {
228
211
  appComponent: oAppComponent,
229
212
  modifier: JsControlTreeModifier
230
213
  };
231
- var oCurrentOriginalControl = JsControlTreeModifier.bySelector(oChange.originalSelectorToBeAdjusted, oAppComponent);
232
- var oActualOriginalControl = oControl.getBindingInfo(oChange.getContent().boundAggregation).template;
214
+ const oCurrentOriginalControl = JsControlTreeModifier.bySelector(oChange.originalSelectorToBeAdjusted, oAppComponent);
215
+ let oActualOriginalControl = oControl.getBindingInfo(oChange.getContent().boundAggregation).template;
233
216
 
234
- // no parent means that the control is the template iteself
217
+ // no parent means that the control is the template itself
235
218
  if (oCurrentOriginalControl.getParent()) {
236
- var aStack = [];
237
- var oTempControl = oCurrentOriginalControl;
219
+ const aStack = [];
220
+ let oTempControl = oCurrentOriginalControl;
238
221
  do {
239
222
  aStack.push({
240
223
  aggregation: oTempControl.sParentAggregationName,
@@ -244,7 +227,7 @@ sap.ui.define([
244
227
  } while (oTempControl.getParent());
245
228
 
246
229
  aStack.reverse();
247
- aStack.forEach(function(oInfo) {
230
+ aStack.forEach((oInfo) => {
248
231
  oActualOriginalControl = oActualOriginalControl.getAggregation(oInfo.aggregation)[oInfo.index];
249
232
  });
250
233
  }
@@ -252,7 +235,7 @@ sap.ui.define([
252
235
  }
253
236
 
254
237
  function registerOnAfterXMLChangeProcessingHandler(aOnAfterXMLChangeProcessingHandlers, oChangeHandler, oControl) {
255
- var iChangeHandlerIndex = aOnAfterXMLChangeProcessingHandlers.findIndex(function(mHandler) {
238
+ let iChangeHandlerIndex = aOnAfterXMLChangeProcessingHandlers.findIndex((mHandler) => {
256
239
  return mHandler.handler === oChangeHandler;
257
240
  });
258
241
  if (iChangeHandlerIndex < 0) {
@@ -267,7 +250,7 @@ sap.ui.define([
267
250
  }
268
251
  }
269
252
 
270
- function processControl(oControl, mPropertyBag, oDependencyMap, oAppComponent) {
253
+ async function processControl(oControl, mPropertyBag, oDependencyMap, oAppComponent) {
271
254
  const aPromiseStack = [];
272
255
  const sControlId = oControl.getId();
273
256
  const aChangesForControl = oDependencyMap.mChanges[sControlId] || [];
@@ -278,7 +261,7 @@ sap.ui.define([
278
261
  bControlWithDependencies = true;
279
262
  }
280
263
 
281
- aChangesForControl.forEach(function(oChange) {
264
+ aChangesForControl.forEach((oChange) => {
282
265
  // in the ExtensionPoint scenario changes can get cloned,
283
266
  // in case of a template change the original selector has to be adjusted
284
267
  if (oChange.originalSelectorToBeAdjusted) {
@@ -290,10 +273,9 @@ sap.ui.define([
290
273
  } else if (oChange.isApplyProcessFinished()) {
291
274
  DependencyHandler.resolveDependenciesForChange(oDependencyMap, oChange.getId(), sControlId);
292
275
  } else if (!oDependencyMap.mDependencies[oChange.getId()]) {
293
- aPromiseStack.push(function() {
294
- return Applier.applyChangeOnControl(oChange, oControl, mPropertyBag).then(function() {
295
- DependencyHandler.resolveDependenciesForChange(oDependencyMap, oChange.getId(), sControlId);
296
- });
276
+ aPromiseStack.push(async () => {
277
+ await Applier.applyChangeOnControl(oChange, oControl, mPropertyBag);
278
+ DependencyHandler.resolveDependenciesForChange(oDependencyMap, oChange.getId(), sControlId);
297
279
  });
298
280
  } else {
299
281
  const fnCallback = Applier.applyChangeOnControl.bind(Applier, oChange, oControl, mPropertyBag);
@@ -302,13 +284,8 @@ sap.ui.define([
302
284
  });
303
285
 
304
286
  if (aChangesForControl.length || bControlWithDependencies) {
305
- return FlUtils.execPromiseQueueSequentially(aPromiseStack)
306
- .then(function() {
307
- return DependencyHandler.processDependentQueue(oDependencyMap, oAppComponent, sControlId);
308
- })
309
- .then(function() {
310
- oPendingProcessesOnControl[sControlId].shift().resolveFunction();
311
- });
287
+ await FlUtils.execPromiseQueueSequentially(aPromiseStack);
288
+ await DependencyHandler.processDependentQueue(oDependencyMap, oAppComponent, sControlId);
312
289
  }
313
290
  oPendingProcessesOnControl[sControlId].shift().resolveFunction();
314
291
  }
@@ -319,7 +296,7 @@ sap.ui.define([
319
296
  * @param {Promise} oPromise - Promise which is resolved when precondition fulfilled
320
297
  */
321
298
  Applier.addPreConditionForInitialChangeApplying = function(oPromise) {
322
- oLastPromise = oLastPromise.then(function() {
299
+ oLastPromise = oLastPromise.then(() => {
323
300
  return oPromise;
324
301
  });
325
302
  };
@@ -334,51 +311,40 @@ sap.ui.define([
334
311
  * @param {object} mPropertyBag.modifier - Polymorph reuse operations handling the changes on the given view type
335
312
  * @param {object} mPropertyBag.appDescriptor - App descriptor containing the metadata of the current application
336
313
  * @param {object} mPropertyBag.appComponent - Component instance that is currently loading
337
- * @returns {Promise|sap.ui.fl.Utils.FakePromise} Promise that is resolved after all changes were reverted in asynchronous case or FakePromise for the synchronous processing scenario
314
+ * @returns {Promise} Promise that is resolved after all changes were reverted in asynchronous case or FakePromise for the synchronous processing scenario
338
315
  */
339
- Applier.applyChangeOnControl = function(oChange, oControl, mPropertyBag) {
340
- var mControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag);
341
- var pHandlerPromise = mPropertyBag.changeHandler
342
- ? Promise.resolve(mPropertyBag.changeHandler)
343
- : Utils.getChangeHandler(oChange, mControl, mPropertyBag);
344
-
345
- return pHandlerPromise.then(function(oChangeHandler) {
316
+ Applier.applyChangeOnControl = async function(oChange, oControl, mPropertyBag) {
317
+ const mControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag);
318
+ try {
319
+ const oChangeHandler = mPropertyBag.changeHandler || await Utils.getChangeHandler(oChange, mControl, mPropertyBag);
346
320
  checkPreconditions(oChange, mPropertyBag);
347
- return oChangeHandler;
348
- })
349
321
 
350
- .then(function(oChangeHandler) {
351
322
  if (oChange.hasApplyProcessStarted()) {
352
- // wait for the change to be finished and then clean up the status and queue
353
- return oChange.addPromiseForApplyProcessing().then(function(oResult) {
354
- oChange.markSuccessful();
355
- return oResult;
356
- });
357
- } else if (!oChange.isApplyProcessFinished()) {
358
- return (FlUtils.FakePromise ? new FlUtils.FakePromise() : Promise.resolve()).then(function() {
359
- oChange.startApplying();
360
- return oChangeHandler.applyChange(oChange, mControl.control, mPropertyBag);
361
- })
362
- .then(function(oInitializedControl) {
323
+ const oResult = await oChange.addPromiseForApplyProcessing();
324
+ oChange.markSuccessful();
325
+ return oResult;
326
+ }
327
+
328
+ if (!oChange.isApplyProcessFinished()) {
329
+ oChange.startApplying();
330
+ try {
331
+ const oInitializedControl = await oChangeHandler.applyChange(oChange, mControl.control, mPropertyBag);
363
332
  return handleAfterApply(oChange, mControl, oInitializedControl, mPropertyBag);
364
- })
365
- .catch(function(oError) {
333
+ } catch (oError) {
366
334
  return handleAfterApplyError(oError, oChange, mControl, mPropertyBag);
367
- });
335
+ }
368
336
  }
369
337
 
370
338
  // make sure that everything that goes with finishing the apply process is done, even though the change was already applied
371
- var oResult = {success: true};
339
+ const oResult = {success: true};
372
340
  oChange.markSuccessful(oResult);
373
341
  return oResult;
374
- })
375
-
376
- .catch(function(oError) {
342
+ } catch (oError) {
377
343
  return {
378
344
  success: false,
379
345
  error: oError
380
346
  };
381
- });
347
+ }
382
348
  };
383
349
 
384
350
  /**
@@ -388,11 +354,11 @@ sap.ui.define([
388
354
  * @param {object} mPropertyBag - Object with parameters as properties
389
355
  * @param {object} mPropertyBag.reference - Flex reference
390
356
  * @param {object} mPropertyBag.appComponent - App Component instance
391
- * @returns {Promise} Resolves after all changes were applied
357
+ * @returns {Promise<undefined>} Resolves after all changes were applied
392
358
  */
393
- Applier.applyMultipleChanges = function(aChanges, mPropertyBag) {
359
+ Applier.applyMultipleChanges = async function(aChanges, mPropertyBag) {
394
360
  mPropertyBag.modifier = JsControlTreeModifier;
395
- const aPromises = aChanges.map(function(oChange) {
361
+ for (const oChange of aChanges) {
396
362
  const oControl = JsControlTreeModifier.bySelector(oChange.getSelector(), mPropertyBag.appComponent);
397
363
  const oLiveDependencyMap = FlexObjectState.getLiveDependencyMap(mPropertyBag.reference);
398
364
  if (oControl) {
@@ -400,19 +366,19 @@ sap.ui.define([
400
366
  if (!oChange.isApplyProcessFinished()) {
401
367
  oChange.setQueuedForApply();
402
368
  }
403
- return function() {
404
- return Applier.applyChangeOnControl(oChange, oControl, mPropertyBag)
405
- .then(function(oResult) {
406
- if (oResult.success) {
407
- DependencyHandler.addRuntimeChangeToMap(oChange, mPropertyBag.appComponent, oLiveDependencyMap);
408
- }
409
- });
410
- };
369
+ let oResult;
370
+ try {
371
+ oResult = await Applier.applyChangeOnControl(oChange, oControl, mPropertyBag);
372
+ } catch (oError) {
373
+ oResult = {success: false};
374
+ }
375
+ if (oResult.success) {
376
+ DependencyHandler.addRuntimeChangeToMap(oChange, mPropertyBag.appComponent, oLiveDependencyMap);
377
+ }
378
+ } else {
379
+ DependencyHandler.addChangeAndUpdateDependencies(oChange, mPropertyBag.appComponent.getId(), oLiveDependencyMap);
411
380
  }
412
- DependencyHandler.addChangeAndUpdateDependencies(oChange, mPropertyBag.appComponent.getId(), oLiveDependencyMap);
413
- return () => Promise.resolve();
414
- });
415
- return FlUtils.execPromiseQueueSequentially(aPromises);
381
+ }
416
382
  };
417
383
 
418
384
  /**
@@ -429,9 +395,9 @@ sap.ui.define([
429
395
  // scenario 1: n controls get created, for all this function is called synchronously. Changes have to be queued synchronously
430
396
  // scenario 2: control gets recreated, the changes for the new control have to be queued after the processing of the old control
431
397
  const oDependencyMap = FlexObjectState.getLiveDependencyMap(sReference);
432
- var sControlId = oControl.getId();
433
- var aChangesForControl = oDependencyMap.mChanges[sControlId] || [];
434
- var mPropertyBag = {
398
+ const sControlId = oControl.getId();
399
+ const aChangesForControl = oDependencyMap.mChanges[sControlId] || [];
400
+ const mPropertyBag = {
435
401
  modifier: JsControlTreeModifier,
436
402
  appComponent: oAppComponent,
437
403
  view: FlUtils.getViewForControl(oControl)
@@ -442,7 +408,7 @@ sap.ui.define([
442
408
  await oPendingProcessesOnControl[sControlId][oPendingProcessesOnControl[sControlId].length - 1].promise;
443
409
  }
444
410
 
445
- aChangesForControl.forEach(function(oChange) {
411
+ aChangesForControl.forEach((oChange) => {
446
412
  checkAndAdjustChangeStatus(oControl, oChange, mPropertyBag);
447
413
  if (!oChange.isApplyProcessFinished() && !oChange._ignoreOnce) {
448
414
  oChange.setQueuedForApply();
@@ -451,7 +417,7 @@ sap.ui.define([
451
417
 
452
418
  oPendingProcessesOnControl[sControlId] ||= [];
453
419
  const oNewPromise = {};
454
- oNewPromise.promise = new Promise(function(resolve) {
420
+ oNewPromise.promise = new Promise((resolve) => {
455
421
  oNewPromise.resolveFunction = resolve;
456
422
  });
457
423
  oPendingProcessesOnControl[sControlId].push(oNewPromise);
@@ -472,27 +438,21 @@ sap.ui.define([
472
438
  * @param {sap.ui.fl.apply._internal.flexObjects.FlexObject[]} aChanges List of flexibility changes on controls for the current processed view
473
439
  * @returns {Promise|sap.ui.fl.Utils.FakePromise} Promise that is resolved after all changes were reverted in asynchronous case or FakePromise for the synchronous processing scenario including view object in both cases
474
440
  */
475
- Applier.applyAllChangesForXMLView = function(mPropertyBag, aChanges) {
441
+ Applier.applyAllChangesForXMLView = async function(mPropertyBag, aChanges) {
476
442
  if (!Array.isArray(aChanges)) {
477
- var sErrorMessage = `No list of changes was passed for processing the flexibility on view: ${mPropertyBag.view}.`;
443
+ const sErrorMessage = `No list of changes was passed for processing the flexibility on view: ${mPropertyBag.view}.`;
478
444
  Log.error(sErrorMessage, undefined, "sap.ui.fl.apply._internal.changes.Applier");
479
445
  aChanges = [];
480
446
  }
481
447
 
482
- var aOnAfterXMLChangeProcessingHandlers = [];
448
+ const aOnAfterXMLChangeProcessingHandlers = [];
483
449
  mPropertyBag.failedSelectors = [];
484
450
 
485
- return aChanges.reduce(function(oPreviousPromise, oChange) {
486
- var oControl;
487
- return oPreviousPromise
488
- .then(checkControlAndDependentSelectorControls.bind(null, oChange, mPropertyBag))
489
- .then(function(oReturnedControl) {
490
- oControl = oReturnedControl;
491
- var mControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag);
492
- return Utils.getChangeHandler(oChange, mControl, mPropertyBag);
493
- })
494
- .then(function(oChangeHandler) {
495
- mPropertyBag.changeHandler = oChangeHandler;
451
+ for (const oChange of aChanges) {
452
+ try {
453
+ const oControl = await checkControlAndDependentSelectorControls(oChange, mPropertyBag);
454
+ const mControl = Utils.getControlIfTemplateAffected(oChange, oControl, mPropertyBag);
455
+ mPropertyBag.changeHandler = await Utils.getChangeHandler(oChange, mControl, mPropertyBag);
496
456
  oChange.setQueuedForApply();
497
457
  checkAndAdjustChangeStatus(oControl, oChange, mPropertyBag, true);
498
458
 
@@ -504,41 +464,36 @@ sap.ui.define([
504
464
  oControl
505
465
  );
506
466
  }
507
- return Applier.applyChangeOnControl(oChange, oControl, mPropertyBag);
508
- }
509
- return {success: true};
510
- })
511
- .then(function(oReturn) {
512
- if (!oReturn.success) {
513
- throw Error(oReturn.error);
467
+ const oResult = await Applier.applyChangeOnControl(oChange, oControl, mPropertyBag);
468
+ if (!oResult.success) {
469
+ throw Error(oResult.error);
470
+ }
514
471
  }
515
- })
516
- .catch(function(oError) {
517
- oChange.getDependentSelectorList().forEach(function(oDependentControlSelector) {
472
+ } catch (oError) {
473
+ oChange.getDependentSelectorList().forEach((oDependentControlSelector) => {
518
474
  if (FlUtils.indexOfObject(mPropertyBag.failedSelectors, oDependentControlSelector) === -1) {
519
475
  mPropertyBag.failedSelectors.push(oDependentControlSelector);
520
476
  }
521
477
  });
522
478
  logApplyChangeError(oError, oChange);
523
- });
524
- }, (FlUtils.FakePromise ? new FlUtils.FakePromise() : Promise.resolve()))
525
- .then(function() {
526
- delete mPropertyBag.failedSelectors;
527
-
528
- // Once all changes for a control are processed, call the
529
- // onAfterXMLChangeProcessing hooks of all involved change handlers
530
- aOnAfterXMLChangeProcessingHandlers.forEach(function(mHandler) {
531
- mHandler.controls.forEach(function(oControl) {
532
- try {
533
- mHandler.handler.onAfterXMLChangeProcessing(oControl, mPropertyBag);
534
- } catch (oError) {
535
- Log.error("Error during onAfterXMLChangeProcessing", oError);
536
- }
537
- });
538
- });
479
+ }
480
+ }
481
+
482
+ delete mPropertyBag.failedSelectors;
539
483
 
540
- return mPropertyBag.view;
484
+ // Once all changes for a control are processed, call the
485
+ // onAfterXMLChangeProcessing hooks of all involved change handlers
486
+ aOnAfterXMLChangeProcessingHandlers.forEach((mHandler) => {
487
+ mHandler.controls.forEach((oControl) => {
488
+ try {
489
+ mHandler.handler.onAfterXMLChangeProcessing(oControl, mPropertyBag);
490
+ } catch (oError) {
491
+ Log.error("Error during onAfterXMLChangeProcessing", oError);
492
+ }
493
+ });
541
494
  });
495
+
496
+ return mPropertyBag.view;
542
497
  };
543
498
  return Applier;
544
499
  });