@sapui5/sap.fe.core 1.136.2 → 1.138.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +42 -36
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +53 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -15
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -14
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +155 -129
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +200 -175
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +11 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +11 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +35 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +46 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -10
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +8 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -19
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +53 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +53 -24
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +33 -12
- package/src/sap/fe/core/converters/controls/Common/Table.ts +37 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +6 -11
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +10 -17
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -26
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +8 -56
- package/src/sap/fe/core/helpers/ModelHelper.ts +11 -57
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_el.properties +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -8
- package/src/sap/fe/core/rootView/Fcl.controller.ts +7 -14
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/designtime/messagebundle_en_US_saprigi.properties +0 -7
|
@@ -263,34 +263,25 @@ class EditFlow extends BaseControllerExtension {
|
|
|
263
263
|
/**
|
|
264
264
|
* Requests the side effects required after deleting an object.
|
|
265
265
|
* @param listBinding The list binding the deleted object belongs to
|
|
266
|
-
* @param parentContext The context of
|
|
266
|
+
* @param parentContext The context of parent object of the deleted object
|
|
267
267
|
*/
|
|
268
|
-
private requestSideEffectsOnDelete(listBinding: ODataListBinding, parentContext: Context | undefined): void {
|
|
269
|
-
if (parentContext
|
|
270
|
-
|
|
271
|
-
//
|
|
272
|
-
//
|
|
273
|
-
|
|
274
|
-
this.getAppComponent().getSideEffectsService().requestSideEffects([stateMessagesPath], parentContext);
|
|
275
|
-
}
|
|
268
|
+
private requestSideEffectsOnDelete(listBinding: ODataListBinding | undefined, parentContext: Context | undefined): void {
|
|
269
|
+
if (!listBinding || !parentContext || CommonUtils.hasTransientContext(listBinding)) {
|
|
270
|
+
// if there are transient contexts, we must avoid requesting side effects
|
|
271
|
+
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
272
|
+
// if list binding is refreshed, transient contexts might be lost
|
|
273
|
+
return;
|
|
276
274
|
}
|
|
277
|
-
}
|
|
278
275
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
const listBindingRelativePath = ModelHelper.getRelativeMetaPathForListBinding(parentContext, listBinding);
|
|
282
|
-
if (!CommonUtils.hasTransientContext(listBinding) && listBindingRelativePath) {
|
|
283
|
-
// if there are transient contexts, we must avoid requesting side effects
|
|
284
|
-
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
285
|
-
// if list binding is refreshed, transient contexts might be lost
|
|
286
|
-
this.getAppComponent()
|
|
287
|
-
.getSideEffectsService()
|
|
288
|
-
.requestSideEffectsForNavigationProperty(listBindingRelativePath, parentContext);
|
|
276
|
+
const sideEffectService = this.getAppComponent().getSideEffectsService();
|
|
277
|
+
sideEffectService.requestSideEffectsForNavigationProperty(listBinding.getPath(), parentContext);
|
|
289
278
|
|
|
290
|
-
|
|
291
|
-
|
|
279
|
+
const stateMessagesPath = ModelHelper.getMessagesPath(listBinding.getModel().getMetaModel(), parentContext.getPath());
|
|
280
|
+
// In case of a TreeTable, we need to refresh state messages for the ObjectPage, as some of these messages might be attached
|
|
281
|
+
// to children of a deleted row which may not have been loaded yet, and therefore the model wouldn't clean up these messages
|
|
282
|
+
if (stateMessagesPath && this.getTransactionHelper().isListBindingHierarchical(listBinding)) {
|
|
283
|
+
sideEffectService.requestSideEffects([stateMessagesPath], parentContext);
|
|
292
284
|
}
|
|
293
|
-
return false;
|
|
294
285
|
}
|
|
295
286
|
|
|
296
287
|
/**
|
|
@@ -337,11 +328,15 @@ class EditFlow extends BaseControllerExtension {
|
|
|
337
328
|
BusyLocker.lock(lockObject);
|
|
338
329
|
|
|
339
330
|
try {
|
|
331
|
+
const deleted = await this.deleteDocumentTransaction(contextsToDelete, parameters);
|
|
332
|
+
if (!deleted) {
|
|
333
|
+
// The delete was cancelled
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
|
|
340
337
|
if (this.getProgrammingModel(parameters?.selectedContexts?.[0] ?? contextsToDelete[0]) === ProgrammingModel.Sticky) {
|
|
341
338
|
this.setDocumentModified(true);
|
|
342
339
|
}
|
|
343
|
-
await this.deleteDocumentTransaction(contextsToDelete, parameters);
|
|
344
|
-
|
|
345
340
|
let result;
|
|
346
341
|
|
|
347
342
|
// Multiple object deletion is triggered from a list
|
|
@@ -534,7 +529,6 @@ class EditFlow extends BaseControllerExtension {
|
|
|
534
529
|
): Promise<void> {
|
|
535
530
|
let oDataListBinding!: ODataListBinding;
|
|
536
531
|
let parentContext: ODataV4Context | undefined;
|
|
537
|
-
|
|
538
532
|
const dataModel = this.getView().getModel();
|
|
539
533
|
let selectedProperties: string | undefined;
|
|
540
534
|
if (dataModel && ModelHelper.isCollaborationDraftSupported(dataModel.getMetaModel())) {
|
|
@@ -1062,12 +1056,14 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1062
1056
|
|
|
1063
1057
|
await Promise.all([creation, this.syncTask(creation)]);
|
|
1064
1058
|
if (savedDocumentContext && parameters.skipSideEffects !== true) {
|
|
1065
|
-
this.
|
|
1059
|
+
this.getAppComponent()
|
|
1060
|
+
.getSideEffectsService()
|
|
1061
|
+
.requestSideEffectsForNavigationProperty(listBinding.getPath(), savedDocumentContext);
|
|
1066
1062
|
}
|
|
1067
1063
|
}
|
|
1068
1064
|
|
|
1069
1065
|
/**
|
|
1070
|
-
* Creates a
|
|
1066
|
+
* Creates a deffered document.
|
|
1071
1067
|
* @param listBinding ODataListBinding where the document has to be created
|
|
1072
1068
|
* @param parentContext Optional parent context when creating a node in TreeTable
|
|
1073
1069
|
* @param data
|
|
@@ -1225,14 +1221,18 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1225
1221
|
*/
|
|
1226
1222
|
handleSideEffects = async (listBinding: ODataListBinding, creationPromise: Promise<Context>): Promise<void> => {
|
|
1227
1223
|
try {
|
|
1228
|
-
const viewBindingContext = this.getView().getBindingContext()
|
|
1224
|
+
const viewBindingContext = this.getView().getBindingContext();
|
|
1229
1225
|
const newContext = await creationPromise;
|
|
1230
1226
|
// transient contexts are reliably removed once oNewContext.created() is resolved
|
|
1231
1227
|
await newContext.created();
|
|
1232
1228
|
// if there are transient contexts, we must avoid requesting side effects
|
|
1233
1229
|
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
1234
1230
|
// if list binding is refreshed, transient contexts might be lost
|
|
1235
|
-
|
|
1231
|
+
if (!CommonUtils.hasTransientContext(listBinding) && viewBindingContext) {
|
|
1232
|
+
this.getAppComponent()
|
|
1233
|
+
.getSideEffectsService()
|
|
1234
|
+
.requestSideEffectsForNavigationProperty(listBinding.getPath(), viewBindingContext as Context);
|
|
1235
|
+
}
|
|
1236
1236
|
} catch (error: unknown) {
|
|
1237
1237
|
Log.error("Error while creating the document", error as string);
|
|
1238
1238
|
}
|
|
@@ -1460,11 +1460,15 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1460
1460
|
const activeContexts = createdContexts.filter((newContext) => !newContext.isInactive());
|
|
1461
1461
|
await Promise.all(activeContexts.map(async (newContext) => newContext.created()));
|
|
1462
1462
|
|
|
1463
|
+
const viewBindingContext = this.getView().getBindingContext();
|
|
1464
|
+
|
|
1463
1465
|
// if there are transient contexts, we must avoid requesting side effects
|
|
1464
1466
|
// this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
|
|
1465
1467
|
// if list binding is refreshed, transient contexts might be lost
|
|
1466
|
-
if (requestSideEffects) {
|
|
1467
|
-
this.
|
|
1468
|
+
if (requestSideEffects && !CommonUtils.hasTransientContext(targetListBinding)) {
|
|
1469
|
+
this.getAppComponent()
|
|
1470
|
+
.getSideEffectsService()
|
|
1471
|
+
.requestSideEffectsForNavigationProperty(targetListBinding.getPath(), viewBindingContext as Context);
|
|
1468
1472
|
}
|
|
1469
1473
|
|
|
1470
1474
|
if (this.base.collaborativeDraft.isConnected() && activeContexts.length > 0) {
|
|
@@ -1609,7 +1613,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1609
1613
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1610
1614
|
* @param _mParameters Object containing the parameters passed to onAfterSave
|
|
1611
1615
|
* @param _mParameters.context The context we obtained after saving
|
|
1612
|
-
* @returns A promise to be returned by the overridden method.
|
|
1616
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1613
1617
|
* @public
|
|
1614
1618
|
* @since 1.116.0
|
|
1615
1619
|
*/
|
|
@@ -1628,7 +1632,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1628
1632
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1629
1633
|
* @param _mParameters Object containing the parameters passed to onAfterCreate
|
|
1630
1634
|
* @param _mParameters.context The newly created context
|
|
1631
|
-
* @returns A promise to be returned by the overridden method.
|
|
1635
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1632
1636
|
* @public
|
|
1633
1637
|
* @since 1.116.0
|
|
1634
1638
|
*/
|
|
@@ -1647,7 +1651,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1647
1651
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1648
1652
|
* @param _mParameters Object containing the parameters passed to onAfterEdit
|
|
1649
1653
|
* @param _mParameters.context Page context that is going to be edited.
|
|
1650
|
-
* @returns A promise to be returned by the overridden method.
|
|
1654
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1651
1655
|
* @public
|
|
1652
1656
|
* @since 1.116.0
|
|
1653
1657
|
*/
|
|
@@ -1666,7 +1670,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1666
1670
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1667
1671
|
* @param _mParameters Object containing the parameters passed to onAfterDiscard
|
|
1668
1672
|
* @param _mParameters.context The context obtained after discarding the object, or undefined if we discarded a new object
|
|
1669
|
-
* @returns A promise to be returned by the overridden method.
|
|
1673
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1670
1674
|
* @public
|
|
1671
1675
|
* @since 1.116.0
|
|
1672
1676
|
*/
|
|
@@ -1685,7 +1689,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1685
1689
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1686
1690
|
* @param _mParameters Object containing the parameters passed to onAfterDelete
|
|
1687
1691
|
* @param _mParameters.contexts An array of contexts that are going to be deleted
|
|
1688
|
-
* @returns A promise to be returned by the overridden method.
|
|
1692
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1689
1693
|
* @public
|
|
1690
1694
|
* @since 1.116.0
|
|
1691
1695
|
*/
|
|
@@ -2143,12 +2147,16 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2143
2147
|
};
|
|
2144
2148
|
}
|
|
2145
2149
|
|
|
2150
|
+
const deleted = await this.deleteDocumentTransaction(oContext, mParameters);
|
|
2151
|
+
if (!deleted) {
|
|
2152
|
+
// The delete was canceled by the user
|
|
2153
|
+
return;
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2146
2156
|
if (this.getProgrammingModel(oContext) === ProgrammingModel.Sticky) {
|
|
2147
2157
|
this.setDocumentModified(true);
|
|
2148
2158
|
}
|
|
2149
2159
|
|
|
2150
|
-
await this.deleteDocumentTransaction(oContext, mParameters);
|
|
2151
|
-
|
|
2152
2160
|
// Single objet deletion is triggered from an OP header button (not from a list)
|
|
2153
2161
|
// --> Mark UI dirty and navigate back to dismiss the OP
|
|
2154
2162
|
if (!this._isFclEnabled()) {
|
|
@@ -2727,15 +2735,15 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2727
2735
|
let forceDisplayMode = false;
|
|
2728
2736
|
const isActiveEntity = await context.requestObject("IsActiveEntity");
|
|
2729
2737
|
|
|
2730
|
-
if (isCollaborationDraftSupported
|
|
2738
|
+
if (isCollaborationDraftSupported) {
|
|
2731
2739
|
forceDisplayMode = !(await this.base.collaborativeDraft.activateCollaboration(context, isActiveEntity));
|
|
2732
2740
|
} else {
|
|
2733
2741
|
globalModel.setProperty("/hasCollaborationAuthorization", undefined);
|
|
2734
2742
|
}
|
|
2735
2743
|
this.fetchCollaborativeDraftUsersPromise = undefined;
|
|
2736
|
-
|
|
2737
2744
|
if (isActiveEntity === false && !forceDisplayMode) {
|
|
2738
|
-
// in case the document is draft set it in edit mode
|
|
2745
|
+
// in case the document is draft, set it in edit mode
|
|
2746
|
+
// unless we don't have the authorization for a collaborative user
|
|
2739
2747
|
this.setEditMode(EditMode.Editable);
|
|
2740
2748
|
const hasActiveEntity = await context.requestObject("HasActiveEntity");
|
|
2741
2749
|
this.setEditMode(undefined, !hasActiveEntity);
|
|
@@ -2784,6 +2792,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2784
2792
|
* @param parameters.lockedContexts
|
|
2785
2793
|
* @param parameters.draftsWithDeletableActive
|
|
2786
2794
|
* @param parameters.draftsWithNonDeletableActive
|
|
2795
|
+
* @returns Promise resolves once the deletion is completed
|
|
2787
2796
|
*/
|
|
2788
2797
|
private async deleteDocumentTransaction(
|
|
2789
2798
|
contexts: Context | Context[],
|
|
@@ -2804,7 +2813,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2804
2813
|
draftsWithDeletableActive?: DraftSiblingPair[];
|
|
2805
2814
|
draftsWithNonDeletableActive?: Context[];
|
|
2806
2815
|
}
|
|
2807
|
-
): Promise<
|
|
2816
|
+
): Promise<boolean> {
|
|
2808
2817
|
if (parameters.selectedContexts) {
|
|
2809
2818
|
// as selected contexts may include inactive context we need to compute this parameter again to ensure delete helper works properly
|
|
2810
2819
|
parameters.numberOfSelectedContexts = parameters.selectedContexts.length;
|
|
@@ -2824,7 +2833,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2824
2833
|
}
|
|
2825
2834
|
|
|
2826
2835
|
await this.syncTask();
|
|
2827
|
-
|
|
2836
|
+
return transactionHelper.deleteDocument(contexts, parameters, this.getAppComponent(), resourceModel, this.getMessageHandler());
|
|
2828
2837
|
}
|
|
2829
2838
|
|
|
2830
2839
|
_getResourceModel(): ResourceModel {
|