@sapui5/sap.fe.core 1.141.2 → 1.142.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.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- 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 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- 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 +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -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 +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- 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 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- 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 +8 -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 +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- 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 +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- 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 +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -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/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 +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- 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 +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -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/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 +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- 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 +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- 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 +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- 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 +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -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/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- 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 +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- 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 +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- 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 +5 -0
- 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 +7 -0
- 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 +28 -6
- 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/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- 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 +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- 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,19 +16,13 @@ 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.
|
|
@@ -32,8 +32,6 @@ type DraftAdminUser = {
|
|
|
32
32
|
*/
|
|
33
33
|
@defineUI5Class("sap.fe.core.controllerextensions.CollaborativeDraft")
|
|
34
34
|
export default class CollaborativeDraft extends BaseControllerExtension {
|
|
35
|
-
private base!: PageController;
|
|
36
|
-
|
|
37
35
|
private lastFocusId: string | undefined;
|
|
38
36
|
|
|
39
37
|
private lastFocusFieldGroups: string | undefined;
|
|
@@ -251,9 +249,9 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
251
249
|
return internalModel?.getProperty("/collaborativeDraftRootPath");
|
|
252
250
|
}
|
|
253
251
|
|
|
254
|
-
private
|
|
252
|
+
private getDraftShareActionOperationAvailablePromise(): Promise<boolean> | undefined {
|
|
255
253
|
const internalModel = this.getView().getModel("internal");
|
|
256
|
-
return internalModel?.getProperty("/
|
|
254
|
+
return internalModel?.getProperty("/collaborativeDraftShareActionOperationAvailablePromise");
|
|
257
255
|
}
|
|
258
256
|
|
|
259
257
|
private isInitialShare(): boolean {
|
|
@@ -273,30 +271,10 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
273
271
|
* @param draftRootContext The context for the draft root
|
|
274
272
|
* @param groupId The groupId to request the list of users invited in the draft
|
|
275
273
|
*/
|
|
276
|
-
|
|
274
|
+
public setDraftRoot(draftRootContext: Context, groupId: string): void {
|
|
277
275
|
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);
|
|
276
|
+
const shareActionOperationAvailablePromise: Promise<boolean | undefined> = this.getShareActionOperationAvailable(draftRootContext);
|
|
277
|
+
internalModel?.setProperty("/collaborativeDraftShareActionOperationAvailablePromise", shareActionOperationAvailablePromise);
|
|
300
278
|
internalModel?.setProperty("/collaborativeDraftRootPath", draftRootContext.getPath());
|
|
301
279
|
}
|
|
302
280
|
|
|
@@ -306,7 +284,7 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
306
284
|
*/
|
|
307
285
|
private cleanDraftRoot(): void {
|
|
308
286
|
const internalModel = this.getView().getModel("internal") as JSONModel;
|
|
309
|
-
internalModel?.setProperty("/
|
|
287
|
+
internalModel?.setProperty("/collaborativeDraftShareActionOperationAvailablePromise", undefined);
|
|
310
288
|
internalModel?.setProperty("/collaborativeDraftRootPath", undefined);
|
|
311
289
|
}
|
|
312
290
|
|
|
@@ -322,7 +300,7 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
322
300
|
const uiModel = this.getView().getModel("ui") as JSONModel;
|
|
323
301
|
if (isActiveEntity) {
|
|
324
302
|
// We're not in a draft -> disconnect if we were connected before
|
|
325
|
-
uiModel.setProperty("/
|
|
303
|
+
uiModel.setProperty("/showCollaborationStrip", undefined);
|
|
326
304
|
this.disconnect();
|
|
327
305
|
return false;
|
|
328
306
|
}
|
|
@@ -346,16 +324,14 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
346
324
|
);
|
|
347
325
|
}
|
|
348
326
|
|
|
349
|
-
const usersInvited = await this.getDraftUserListPromise();
|
|
350
327
|
if (uiModel.getProperty("/hasCollaborationAuthorization") !== undefined) {
|
|
351
328
|
return uiModel.getProperty("/hasCollaborationAuthorization"); // Already checked, all good
|
|
352
329
|
}
|
|
353
|
-
const
|
|
354
|
-
|
|
355
|
-
uiModel.setProperty("/
|
|
356
|
-
uiModel.setProperty("/showCollaborationStrip", !hasMe);
|
|
330
|
+
const isShareActionOperationAvailable = await this.getDraftShareActionOperationAvailablePromise();
|
|
331
|
+
uiModel.setProperty("/hasCollaborationAuthorization", isShareActionOperationAvailable);
|
|
332
|
+
uiModel.setProperty("/showCollaborationStrip", !isShareActionOperationAvailable);
|
|
357
333
|
|
|
358
|
-
if (
|
|
334
|
+
if (isShareActionOperationAvailable) {
|
|
359
335
|
this.connect(draftRootContext).catch((error) => {
|
|
360
336
|
Log.error("Error when connecting to the collaboration draft " + error);
|
|
361
337
|
});
|
|
@@ -363,13 +339,65 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
363
339
|
// Disconnect the websocket but keep the properties in the internal model (so don't call this.disconnect)
|
|
364
340
|
this.getCollaborativeDraftService().disconnect(this.getView() as FEView);
|
|
365
341
|
}
|
|
366
|
-
return
|
|
342
|
+
return !!isShareActionOperationAvailable;
|
|
367
343
|
} catch (err) {
|
|
368
344
|
Log.error("Error while activating the collaborative draft " + err);
|
|
369
345
|
return false;
|
|
370
346
|
}
|
|
371
347
|
}
|
|
372
348
|
|
|
349
|
+
getShareActionOperationAvailableBindingExpression(
|
|
350
|
+
draftRootContext: Context,
|
|
351
|
+
getODataCacheValue?: boolean
|
|
352
|
+
): BindingToolkitExpression<boolean> | boolean | undefined {
|
|
353
|
+
const metaModel = draftRootContext.getModel()?.getMetaModel();
|
|
354
|
+
const entitySet = metaModel?.getMetaPath(draftRootContext.getPath());
|
|
355
|
+
const metaContext = metaModel?.getMetaContext(draftRootContext.getPath());
|
|
356
|
+
const objectPath = metaContext && getInvolvedDataModelObjects(metaContext);
|
|
357
|
+
const shareActionName = metaModel?.getObject(`${entitySet}@com.sap.vocabularies.Common.v1.DraftRoot/ShareAction`);
|
|
358
|
+
const action = objectPath?.convertedTypes.actions.find((action) => {
|
|
359
|
+
return action.fullyQualifiedName.startsWith(shareActionName);
|
|
360
|
+
});
|
|
361
|
+
const bindingParameterFullName = action?.isBound ? action.parameters[0]?.fullyQualifiedName : undefined;
|
|
362
|
+
const bindingExpression = getExpressionFromAnnotation(
|
|
363
|
+
action?.annotations?.Core?.OperationAvailable as unknown as AnnotationTerm<PropertyAnnotationValue<EdmBoolean>>,
|
|
364
|
+
[],
|
|
365
|
+
undefined,
|
|
366
|
+
(path: string) => bindingContextPathVisitor(path, objectPath?.convertedTypes, bindingParameterFullName)
|
|
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
|
}
|
|
@@ -425,7 +458,7 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
425
458
|
/**
|
|
426
459
|
* Sends a notification to other users that property values have been changed by the current user.
|
|
427
460
|
*
|
|
428
|
-
* This notification must be sent after the changes have been sent successfully to the back
|
|
461
|
+
* This notification must be sent after the changes have been sent successfully to the back end.
|
|
429
462
|
* @param context The context for the properties
|
|
430
463
|
* @param propertyNames The property name or the array of property names
|
|
431
464
|
* @public
|
|
@@ -442,20 +475,24 @@ export default class CollaborativeDraft extends BaseControllerExtension {
|
|
|
442
475
|
/**
|
|
443
476
|
* Sends a notification to other users that new contexts have been created by the current user.
|
|
444
477
|
*
|
|
445
|
-
* This notification must be sent after the new contexts have been created successfully in the back
|
|
446
|
-
* @param
|
|
478
|
+
* This notification must be sent after the new contexts have been created successfully in the back end.
|
|
479
|
+
* @param contextsOrBinding The array of newly created contexts, or the binding where the contexts were created
|
|
447
480
|
* @public
|
|
448
481
|
* @ui5-experimental-since 1.141.0
|
|
449
482
|
* @since 1.141.0
|
|
450
483
|
*/
|
|
451
|
-
sendContextsCreated(
|
|
452
|
-
|
|
484
|
+
sendContextsCreated(contextsOrBinding: Context[] | ODataListBinding): void {
|
|
485
|
+
if (Array.isArray(contextsOrBinding)) {
|
|
486
|
+
this.send({ action: Activity.Create, content: contextsOrBinding.map((context) => context.getPath()) });
|
|
487
|
+
} else {
|
|
488
|
+
this.send({ action: Activity.Create, content: contextsOrBinding.getResolvedPath() ?? contextsOrBinding.getPath() });
|
|
489
|
+
}
|
|
453
490
|
}
|
|
454
491
|
|
|
455
492
|
/**
|
|
456
493
|
* Sends a notification to other users that contexts have been deleted by the current user.
|
|
457
494
|
*
|
|
458
|
-
* This notification must be sent after the contexts have been deleted successfully in the back
|
|
495
|
+
* This notification must be sent after the contexts have been deleted successfully in the back end.
|
|
459
496
|
* @param contexts The array of deleted contexts
|
|
460
497
|
* @public
|
|
461
498
|
* @ui5-experimental-since 1.141.0
|