@sapui5/sap.fe.core 1.141.2 → 1.143.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 +4 -1
- package/src/sap/fe/core/ActionRuntime.js +78 -23
- package/src/sap/fe/core/ActionRuntime.ts +91 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +91 -8
- package/src/sap/fe/core/AppStateHandler.js +7 -7
- package/src/sap/fe/core/AppStateHandler.ts +9 -8
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -11
- package/src/sap/fe/core/ExtensionAPI.ts +3 -16
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +12 -1
- package/src/sap/fe/core/TemplateComponent.ts +16 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
- package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
- package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
- package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
- package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
- package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
- package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
- package/src/sap/fe/core/fpm/manifest.json +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
- package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
- package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
- package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
- package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +33 -3
- package/src/sap/fe/core/library.ts +31 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -1
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -2
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import type { AnnotationTerm, PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
|
|
2
|
+
import type { Boolean as EdmBoolean } from "@sap-ux/vocabularies-types/Edm";
|
|
1
3
|
import Log from "sap/base/Log";
|
|
4
|
+
import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
|
|
5
|
+
import { compileExpression, getExpressionFromAnnotation, isPathInModelExpression } from "sap/fe/base/BindingToolkit";
|
|
2
6
|
import { defineUI5Class } from "sap/fe/base/ClassSupport";
|
|
7
|
+
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
8
|
+
import { bindingContextPathVisitor } from "sap/fe/core/helpers/BindingHelper";
|
|
3
9
|
import type Field from "sap/fe/macros/Field";
|
|
4
10
|
import type FieldWrapper from "sap/fe/macros/controls/FieldWrapper";
|
|
5
11
|
import type Tokenizer from "sap/m/Tokenizer";
|
|
@@ -10,30 +16,21 @@ import Element from "sap/ui/core/Element";
|
|
|
10
16
|
import type MultiValueField from "sap/ui/mdc/MultiValueField";
|
|
11
17
|
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
12
18
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
19
|
+
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
13
20
|
import type { FEView } from "../BaseController";
|
|
14
21
|
import CommonUtils from "../CommonUtils";
|
|
15
|
-
import type PageController from "../PageController";
|
|
16
22
|
import type { CollaborativeDraftService } from "../services/collaborativeDraftServiceFactory";
|
|
17
23
|
import { FieldEditMode } from "../templating/UIFormatters";
|
|
18
24
|
import BaseControllerExtension from "./BaseControllerExtension";
|
|
19
|
-
import { Activity, CollaborationFieldGroupPrefix,
|
|
20
|
-
|
|
21
|
-
type DraftAdminUser = {
|
|
22
|
-
DraftEntityType: string;
|
|
23
|
-
DraftUUID: string;
|
|
24
|
-
UserID: string;
|
|
25
|
-
};
|
|
25
|
+
import { Activity, CollaborationFieldGroupPrefix, addSelf, shareObject } from "./collaboration/CollaborationCommon";
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* A controller extension to handle collaborative draft scenarios.
|
|
29
|
-
* @ui5-experimental-since 1.141.0
|
|
30
29
|
* @since 1.141.0
|
|
31
30
|
* @public
|
|
32
31
|
*/
|
|
33
32
|
@defineUI5Class("sap.fe.core.controllerextensions.CollaborativeDraft")
|
|
34
33
|
export default class CollaborativeDraft extends BaseControllerExtension {
|
|
35
|
-
private base!: PageController;
|
|
36
|
-
|
|
37
34
|
private lastFocusId: string | undefined;
|
|
38
35
|
|
|
39
36
|
private lastFocusFieldGroups: string | undefined;
|
|
@@ -251,9 +248,9 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
251
248
|
return internalModel?.getProperty("/collaborativeDraftRootPath");
|
|
252
249
|
}
|
|
253
250
|
|
|
254
|
-
private
|
|
251
|
+
private getDraftShareActionOperationAvailablePromise(): Promise<boolean> | undefined {
|
|
255
252
|
const internalModel = this.getView().getModel("internal");
|
|
256
|
-
return internalModel?.getProperty("/
|
|
253
|
+
return internalModel?.getProperty("/collaborativeDraftShareActionOperationAvailablePromise");
|
|
257
254
|
}
|
|
258
255
|
|
|
259
256
|
private isInitialShare(): boolean {
|
|
@@ -273,30 +270,10 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
273
270
|
* @param draftRootContext The context for the draft root
|
|
274
271
|
* @param groupId The groupId to request the list of users invited in the draft
|
|
275
272
|
*/
|
|
276
|
-
|
|
273
|
+
public setDraftRoot(draftRootContext: Context, groupId: string): void {
|
|
277
274
|
const internalModel = this.getView().getModel("internal") as JSONModel;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
userListPromise = new Promise((resolve) => {
|
|
281
|
-
const draftAdminUsers = draftRootContext
|
|
282
|
-
.getModel()
|
|
283
|
-
.bindList("DraftAdministrativeData/DraftAdministrativeUser", draftRootContext);
|
|
284
|
-
draftAdminUsers
|
|
285
|
-
.requestContexts()
|
|
286
|
-
.then((e: Context[]) => {
|
|
287
|
-
return resolve(e.map((c: Context) => c.getObject()));
|
|
288
|
-
})
|
|
289
|
-
.catch((e: Error) => {
|
|
290
|
-
Log.error("Error while loading the DraftAdministrativeUser " + e);
|
|
291
|
-
});
|
|
292
|
-
});
|
|
293
|
-
} else {
|
|
294
|
-
userListPromise = draftRootContext
|
|
295
|
-
.requestSideEffects(["DraftAdministrativeData/DraftAdministrativeUser"], groupId)
|
|
296
|
-
.then(async () => draftRootContext.requestObject("DraftAdministrativeData/DraftAdministrativeUser"));
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
internalModel?.setProperty("/collaborativeDraftUserListPromise", userListPromise);
|
|
275
|
+
const shareActionOperationAvailablePromise: Promise<boolean | undefined> = this.getShareActionOperationAvailable(draftRootContext);
|
|
276
|
+
internalModel?.setProperty("/collaborativeDraftShareActionOperationAvailablePromise", shareActionOperationAvailablePromise);
|
|
300
277
|
internalModel?.setProperty("/collaborativeDraftRootPath", draftRootContext.getPath());
|
|
301
278
|
}
|
|
302
279
|
|
|
@@ -306,7 +283,7 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
306
283
|
*/
|
|
307
284
|
private cleanDraftRoot(): void {
|
|
308
285
|
const internalModel = this.getView().getModel("internal") as JSONModel;
|
|
309
|
-
internalModel?.setProperty("/
|
|
286
|
+
internalModel?.setProperty("/collaborativeDraftShareActionOperationAvailablePromise", undefined);
|
|
310
287
|
internalModel?.setProperty("/collaborativeDraftRootPath", undefined);
|
|
311
288
|
}
|
|
312
289
|
|
|
@@ -322,7 +299,7 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
322
299
|
const uiModel = this.getView().getModel("ui") as JSONModel;
|
|
323
300
|
if (isActiveEntity) {
|
|
324
301
|
// We're not in a draft -> disconnect if we were connected before
|
|
325
|
-
uiModel.setProperty("/
|
|
302
|
+
uiModel.setProperty("/showCollaborationStrip", undefined);
|
|
326
303
|
this.disconnect();
|
|
327
304
|
return false;
|
|
328
305
|
}
|
|
@@ -346,16 +323,14 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
346
323
|
);
|
|
347
324
|
}
|
|
348
325
|
|
|
349
|
-
const usersInvited = await this.getDraftUserListPromise();
|
|
350
326
|
if (uiModel.getProperty("/hasCollaborationAuthorization") !== undefined) {
|
|
351
327
|
return uiModel.getProperty("/hasCollaborationAuthorization"); // Already checked, all good
|
|
352
328
|
}
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
uiModel.setProperty("/
|
|
356
|
-
uiModel.setProperty("/showCollaborationStrip", !hasMe);
|
|
329
|
+
const isShareActionOperationAvailable = await this.getDraftShareActionOperationAvailablePromise();
|
|
330
|
+
uiModel.setProperty("/hasCollaborationAuthorization", isShareActionOperationAvailable);
|
|
331
|
+
uiModel.setProperty("/showCollaborationStrip", !isShareActionOperationAvailable);
|
|
357
332
|
|
|
358
|
-
if (
|
|
333
|
+
if (isShareActionOperationAvailable) {
|
|
359
334
|
this.connect(draftRootContext).catch((error) => {
|
|
360
335
|
Log.error("Error when connecting to the collaboration draft " + error);
|
|
361
336
|
});
|
|
@@ -363,13 +338,66 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
363
338
|
// Disconnect the websocket but keep the properties in the internal model (so don't call this.disconnect)
|
|
364
339
|
this.getCollaborativeDraftService().disconnect(this.getView() as FEView);
|
|
365
340
|
}
|
|
366
|
-
return
|
|
341
|
+
return !!isShareActionOperationAvailable;
|
|
367
342
|
} catch (err) {
|
|
368
343
|
Log.error("Error while activating the collaborative draft " + err);
|
|
369
344
|
return false;
|
|
370
345
|
}
|
|
371
346
|
}
|
|
372
347
|
|
|
348
|
+
getShareActionOperationAvailableBindingExpression(
|
|
349
|
+
draftRootContext: Context,
|
|
350
|
+
getODataCacheValue?: boolean
|
|
351
|
+
): BindingToolkitExpression<boolean> | boolean | undefined {
|
|
352
|
+
const metaModel = draftRootContext.getModel()?.getMetaModel();
|
|
353
|
+
const entitySet = metaModel?.getMetaPath(draftRootContext.getPath());
|
|
354
|
+
const metaContext = metaModel?.getMetaContext(draftRootContext.getPath());
|
|
355
|
+
const objectPath = metaContext && getInvolvedDataModelObjects(metaContext);
|
|
356
|
+
const shareActionName = metaModel?.getObject(`${entitySet}@com.sap.vocabularies.Common.v1.DraftRoot/ShareAction`);
|
|
357
|
+
const action = objectPath?.convertedTypes.actions.find((action) => {
|
|
358
|
+
return action.fullyQualifiedName.startsWith(shareActionName);
|
|
359
|
+
});
|
|
360
|
+
const bindingParameterFullName = action?.isBound ? action.parameters[0]?.fullyQualifiedName : undefined;
|
|
361
|
+
const bindingExpression = getExpressionFromAnnotation(
|
|
362
|
+
action?.annotations?.Core?.OperationAvailable as unknown as AnnotationTerm<PropertyAnnotationValue<EdmBoolean>>,
|
|
363
|
+
[],
|
|
364
|
+
undefined,
|
|
365
|
+
(path: string) => bindingContextPathVisitor(path, objectPath?.convertedTypes, bindingParameterFullName)
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
if (getODataCacheValue) {
|
|
369
|
+
if (isPathInModelExpression(bindingExpression)) {
|
|
370
|
+
const currentContextWithCache = draftRootContext.getObject();
|
|
371
|
+
if (currentContextWithCache) {
|
|
372
|
+
if (Object.keys(currentContextWithCache).includes(bindingExpression.path)) {
|
|
373
|
+
return currentContextWithCache[bindingExpression.path];
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return undefined;
|
|
377
|
+
}
|
|
378
|
+
} else {
|
|
379
|
+
return bindingExpression;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
async getShareActionOperationAvailable(draftRootContext: Context): Promise<boolean | undefined> {
|
|
384
|
+
const model = draftRootContext.getModel();
|
|
385
|
+
const contextPath = draftRootContext.getPath();
|
|
386
|
+
const bindingExpression = this.getShareActionOperationAvailableBindingExpression(draftRootContext);
|
|
387
|
+
const shareActionOperationAvailableExpression = compileExpression(bindingExpression);
|
|
388
|
+
if (shareActionOperationAvailableExpression === "undefined") {
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
if (isPathInModelExpression(bindingExpression)) {
|
|
392
|
+
return model
|
|
393
|
+
.bindContext(`${contextPath}`, undefined, { $$groupId: draftRootContext.getGroupId(), $select: [bindingExpression.path] })
|
|
394
|
+
.getBoundContext()
|
|
395
|
+
.requestProperty(bindingExpression.path);
|
|
396
|
+
} else {
|
|
397
|
+
return undefined;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
373
401
|
/**
|
|
374
402
|
* Adds the current user in the draft root context.
|
|
375
403
|
* @param pageContext The page context (not necessarily a draft root)
|
|
@@ -398,12 +426,17 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
398
426
|
return; // share was already called before, we don't need to call the Share action again
|
|
399
427
|
}
|
|
400
428
|
|
|
401
|
-
const
|
|
402
|
-
? shareObject(draftRootContext, undefined, draftRootContext.getGroupId())
|
|
403
|
-
|
|
429
|
+
const performShare = async (): Promise<Context | void> =>
|
|
430
|
+
this.isInitialShare() ? shareObject(draftRootContext, undefined, draftRootContext.getGroupId()) : addSelf(draftRootContext);
|
|
431
|
+
|
|
404
432
|
this.setInitialShare(false); // Reset the initial share flag, so that we don't call the initial Share action again
|
|
405
433
|
this.setDraftRoot(draftRootContext, draftRootContext.getGroupId());
|
|
406
|
-
|
|
434
|
+
|
|
435
|
+
const cachedAvailability = this.getShareActionOperationAvailableBindingExpression(draftRootContext, true);
|
|
436
|
+
// Perform share unless availability is explicitly false
|
|
437
|
+
if (cachedAvailability === undefined || cachedAvailability === true) {
|
|
438
|
+
await performShare();
|
|
439
|
+
}
|
|
407
440
|
} catch (err) {
|
|
408
441
|
Log.error("Error while adding current user in the collaborative draft " + err);
|
|
409
442
|
}
|
|
@@ -415,7 +448,6 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
415
448
|
* @param propertyName The name of the property
|
|
416
449
|
* @param isLocked True if the property is locked, false if it is unlocked
|
|
417
450
|
* @public
|
|
418
|
-
* @ui5-experimental-since 1.141.0
|
|
419
451
|
* @since 1.141.0
|
|
420
452
|
*/
|
|
421
453
|
sendLockChange(context: Context, propertyName: string, isLocked: boolean): void {
|
|
@@ -425,11 +457,10 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
425
457
|
/**
|
|
426
458
|
* Sends a notification to other users that property values have been changed by the current user.
|
|
427
459
|
*
|
|
428
|
-
* This notification must be sent after the changes have been sent successfully to the back
|
|
460
|
+
* This notification must be sent after the changes have been sent successfully to the back end.
|
|
429
461
|
* @param context The context for the properties
|
|
430
462
|
* @param propertyNames The property name or the array of property names
|
|
431
463
|
* @public
|
|
432
|
-
* @ui5-experimental-since 1.141.0
|
|
433
464
|
* @since 1.141.0
|
|
434
465
|
*/
|
|
435
466
|
sendPropertyValuesChange(context: Context, propertyNames: string | string[]): void {
|
|
@@ -442,23 +473,25 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
442
473
|
/**
|
|
443
474
|
* Sends a notification to other users that new contexts have been created by the current user.
|
|
444
475
|
*
|
|
445
|
-
* This notification must be sent after the new contexts have been created successfully in the back
|
|
446
|
-
* @param
|
|
476
|
+
* This notification must be sent after the new contexts have been created successfully in the back end.
|
|
477
|
+
* @param contextsOrBinding The array of newly created contexts, or the binding where the contexts were created
|
|
447
478
|
* @public
|
|
448
|
-
* @ui5-experimental-since 1.141.0
|
|
449
479
|
* @since 1.141.0
|
|
450
480
|
*/
|
|
451
|
-
sendContextsCreated(
|
|
452
|
-
|
|
481
|
+
sendContextsCreated(contextsOrBinding: Context[] | ODataListBinding): void {
|
|
482
|
+
if (Array.isArray(contextsOrBinding)) {
|
|
483
|
+
this.send({ action: Activity.Create, content: contextsOrBinding.map((context) => context.getPath()) });
|
|
484
|
+
} else {
|
|
485
|
+
this.send({ action: Activity.Create, content: contextsOrBinding.getResolvedPath() ?? contextsOrBinding.getPath() });
|
|
486
|
+
}
|
|
453
487
|
}
|
|
454
488
|
|
|
455
489
|
/**
|
|
456
490
|
* Sends a notification to other users that contexts have been deleted by the current user.
|
|
457
491
|
*
|
|
458
|
-
* This notification must be sent after the contexts have been deleted successfully in the back
|
|
492
|
+
* This notification must be sent after the contexts have been deleted successfully in the back end.
|
|
459
493
|
* @param contexts The array of deleted contexts
|
|
460
494
|
* @public
|
|
461
|
-
* @ui5-experimental-since 1.141.0
|
|
462
495
|
* @since 1.141.0
|
|
463
496
|
*/
|
|
464
497
|
sendContextsDeleted(contexts: Context[]): void {
|