@sapui5/sap.fe.templates 1.147.0 → 1.148.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/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -2
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +10 -16
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +10 -17
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -1
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +3 -0
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +134 -24
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +132 -19
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +195 -20
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +226 -22
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +16 -8
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +20 -9
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.js +4 -1
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDiscardDialog.tsx +1 -0
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +15 -4
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +11 -2
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +28 -1
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +31 -0
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -3
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +9 -1
- package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.js +72 -0
- package/src/sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper.ts +75 -0
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -15
- package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +29 -20
- package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +28 -21
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +4 -3
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +93 -17
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +108 -22
- package/src/sap/fe/templates/ObjectPage/view/fragments/EmphasizedFirstHeaderAction.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +4 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +4 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -0
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +1 -1
- package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
|
@@ -15,28 +15,35 @@ const CollaborationManagerOverride = {
|
|
|
15
15
|
const controller = view.getController();
|
|
16
16
|
const appComponent = controller.getOwnerComponent().getAppComponent();
|
|
17
17
|
const isEditable = CommonUtils.getIsEditable(view);
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
if (!isEditable) {
|
|
19
|
+
// Start card retrieval immediately and register it with pageReady so it runs in
|
|
20
|
+
// parallel with the OData page load instead of sequentially after it.
|
|
21
|
+
// _getPageTitleInformation uses requestProperty() which is an OData V4 async API
|
|
22
|
+
// that safely queues data requests and resolves when entity data arrives.
|
|
23
|
+
const cardRetrievalPromise = (async (): Promise<void> => {
|
|
24
|
+
const card = await appComponent.getCollaborationManagerService().getDesignTimeCard(RetrieveCardTypes.INTEGRATION);
|
|
25
|
+
if (card) {
|
|
26
|
+
const onAddCardToCollaborationManagerCallback = (): void => {
|
|
27
|
+
try {
|
|
28
|
+
if (card) {
|
|
29
|
+
appComponent.getCollaborationManagerService().publishCard(card as CardManifest);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
} catch (e) {
|
|
33
|
+
showGenericErrorMessage(view);
|
|
34
|
+
Log.error(e as string);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const pageTitleInformation = await controller._getPageTitleInformation();
|
|
38
|
+
cards.push({
|
|
39
|
+
card: card,
|
|
40
|
+
title: pageTitleInformation.subtitle || "",
|
|
41
|
+
callback: onAddCardToCollaborationManagerCallback
|
|
42
|
+
});
|
|
32
43
|
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
card: card,
|
|
37
|
-
title: pageTitleInformation.subtitle || "",
|
|
38
|
-
callback: onAddCardToCollaborationManagerCallback
|
|
39
|
-
});
|
|
44
|
+
})();
|
|
45
|
+
controller.pageReady.waitFor(cardRetrievalPromise);
|
|
46
|
+
await cardRetrievalPromise;
|
|
40
47
|
}
|
|
41
48
|
}
|
|
42
49
|
};
|
|
@@ -14,9 +14,10 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant"],
|
|
|
14
14
|
const oAppComponent = CommonUtils.getAppComponent(oView);
|
|
15
15
|
const oMetaModel = oAppComponent.getModel().getMetaModel();
|
|
16
16
|
const oPageContext = oView.getBindingContext();
|
|
17
|
+
|
|
17
18
|
//If the link context is same as page context merging of context should not happen
|
|
18
|
-
const mergeLinkContext = oTargetInfo?.linkContextPath ? oPageContext
|
|
19
|
-
if (oExternalNavigationContext?.page && mergeLinkContext) {
|
|
19
|
+
const mergeLinkContext = oTargetInfo?.linkContextPath ? oPageContext?.getPath() !== oTargetInfo?.linkContextPath : true;
|
|
20
|
+
if (oExternalNavigationContext?.page && mergeLinkContext && oPageContext) {
|
|
20
21
|
const sMetaPath = oMetaModel.getMetaPath(oPageContext.getPath());
|
|
21
22
|
let pageAttributes = oPageContext.getObject();
|
|
22
23
|
pageAttributes = oController._intentBasedNavigation.processSemanticAttributes(oPageContext, oPageContext.getObject());
|
|
@@ -55,4 +56,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant"],
|
|
|
55
56
|
};
|
|
56
57
|
return IntentBasedNavigationOverride;
|
|
57
58
|
}, false);
|
|
58
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm9UYXJnZXRJbmZvIiwib1ZpZXciLCJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvRXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dCIsImdldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhZ2VDb250ZXh0IiwibWVyZ2VMaW5rQ29udGV4dCIsImxpbmtDb250ZXh0UGF0aCIsImdldFBhdGgiLCJwYWdlIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJwYWdlQXR0cmlidXRlcyIsImdldE9iamVjdCIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJwcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzIiwib1BhZ2VDb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZURhdGEiLCJwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm9QYWdlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJvUGFnZVNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VtYW50aWNBdHRyaWJ1dGVzIiwib1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhU2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lcyIsImdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsInNQcm9wZXJ0eU5hbWUiLCJnZXRTZWxlY3RPcHRpb24iLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwibGlua0NvbnRleHQiLCJzZXRQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcblxuY29uc3QgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgPSB7XG5cdGFkYXB0TmF2aWdhdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0b1RhcmdldEluZm8/OiB7IGxpbmtDb250ZXh0UGF0aDogc3RyaW5nOyBsaW5rQ29udGV4dD86IHVua25vd247IHByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH1cblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKSxcblx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9FeHRlcm5hbE5hdmlnYXRpb25Db250ZXh0ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHQvL0lmIHRoZSBsaW5rIGNvbnRleHQgaXMgc2FtZSBhcyBwYWdlIGNvbnRleHQgbWVyZ2luZyBvZiBjb250ZXh0IHNob3VsZCBub3QgaGFwcGVuXG5cdFx0Y29uc3QgbWVyZ2VMaW5rQ29udGV4dCA9IG9UYXJnZXRJbmZvPy5saW5rQ29udGV4dFBhdGggPyBvUGFnZUNvbnRleHQ/LmdldFBhdGgoKSAhPT0gb1RhcmdldEluZm8/LmxpbmtDb250ZXh0UGF0aCA6IHRydWU7XG5cdFx0aWYgKG9FeHRlcm5hbE5hdmlnYXRpb25Db250ZXh0Py5wYWdlICYmIG1lcmdlTGlua0NvbnRleHQgJiYgb1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9QYWdlQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IHBhZ2VBdHRyaWJ1dGVzID0gb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0cGFnZUF0dHJpYnV0ZXMgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnByb2Nlc3NTZW1hbnRpY0F0dHJpYnV0ZXMob1BhZ2VDb250ZXh0LCBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdFx0Y29uc3Qgb1BhZ2VDb250ZXh0RGF0YSA9IG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShwYWdlQXR0cmlidXRlcywgc01ldGFQYXRoKSxcblx0XHRcdFx0b1BhZ2VEYXRhID0gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihvUGFnZUNvbnRleHREYXRhLCBvUGFnZUNvbnRleHQpLFxuXHRcdFx0XHRvUGFnZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvUGFnZURhdGEucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCxcblx0XHRcdFx0Ly8gVE9ETzogbW92ZSB0aGlzIGFsc28gaW50byB0aGUgaW50ZW50IGJhc2VkIG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cblx0XHRcdFx0b1BhZ2VTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0XHRcdG5ldyBTZWxlY3Rpb25WYXJpYW50KCksXG5cdFx0XHRcdFx0b1BhZ2VEYXRhLnNlbWFudGljQXR0cmlidXRlcyBhcyB1bmtub3duW10sXG5cdFx0XHRcdFx0b1ZpZXdcblx0XHRcdFx0KSxcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mbz8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdDtcblx0XHRcdGNvbnN0IGFTZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWVzID0gb1BhZ2VTVi5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdFx0YVNlbGVjdE9wdGlvblByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmICghb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzUHJvcGVydHlOYW1lLCBvUGFnZVNWLmdldFNlbGVjdE9wdGlvbihzUHJvcGVydHlOYW1lKSEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE9ubHkgd2hlbiB0aGVyZSBpcyBubyBjb25mbGljdCBkbyB3ZSBuZWVkIHRvIGFkZCBzb21ldGhpbmdcblx0XHRcdFx0XHQvLyBpbiBhbGwgb3RoZXIgY2FzZSB0aGUgY29uZmxpY3RlZCBwYXRocyBhcmUgYWxyZWFkeSBhZGRlZCBpbiBwcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvblxuXHRcdFx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIGluY29taW5nIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIGluY29taW5nIGNvbnRleHQgdG8gU1Zcblx0XHRcdFx0XHQvLyBUTy1ETy4gUmVtb3ZlIHRoZSBjaGVjayBmb3Igb1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Qgb25jZSBzZW1hbnRpYyBsaW5rcyBmdW5jdGlvbmFsaXR5IGlzIGNvdmVyZWRcblx0XHRcdFx0XHRpZiAob1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgJiYgc1Byb3BlcnR5TmFtZSBpbiBvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihcblx0XHRcdFx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc1Byb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzUHJvcGVydHlOYW1lKSFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGlmIHByb3BlcnR5IHdhcyB3aXRob3V0IGNvbmZsaWN0IGluIHBhZ2UgY29udGV4dCB0aGVuIGFkZCBwYXRoIGZyb20gcGFnZSBjb250ZXh0IHRvIFNWXG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eU5hbWUgaW4gb1BhZ2VQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdFx0XHRvUGFnZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc1Byb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9QYWdlU1YuZ2V0U2VsZWN0T3B0aW9uKHNQcm9wZXJ0eU5hbWUpIVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyByZW1vdmUgbm9uIHB1YmxpYyBwcm9wZXJ0aWVzIGZyb20gdGFyZ2V0SW5mb1xuXHRcdGRlbGV0ZSBvVGFyZ2V0SW5mbz8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdDtcblx0XHRkZWxldGUgb1RhcmdldEluZm8/LmxpbmtDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBwYWdlOiB0cnVlIH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQU1BLE1BQU1BLDZCQUE2QixHQUFHO0lBQ3JDQyxzQkFBc0IsRUFBRSxTQUFBQSxDQUV2QkMsaUJBQW1DLEVBQ25DQyxXQUFvSCxFQUM3RztNQUNQLE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCQyxXQUFXLEdBQUdGLEtBQUssQ0FBQ0csYUFBYSxDQUFDLENBQW1CO1FBQ3JEQyxxQkFBcUIsR0FBRyxJQUFJLENBQUNILE9BQU8sQ0FBQyxDQUFDLENBQUNJLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7UUFDNUZDLDBCQUEwQixHQUFHRixxQkFBcUIs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
|
|
@@ -3,7 +3,6 @@ import type IntentBasedNavigation from "sap/fe/core/controllerextensions/IntentB
|
|
|
3
3
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
4
4
|
import type PageController from "sap/fe/core/PageController";
|
|
5
5
|
import SelectionVariant from "sap/fe/navigation/SelectionVariant";
|
|
6
|
-
import type Context from "sap/ui/model/Context";
|
|
7
6
|
|
|
8
7
|
const IntentBasedNavigationOverride = {
|
|
9
8
|
adaptNavigationContext: function (
|
|
@@ -17,10 +16,11 @@ const IntentBasedNavigationOverride = {
|
|
|
17
16
|
oExternalNavigationContext = oInternalModelContext.getProperty("externalNavigationContext");
|
|
18
17
|
const oAppComponent = CommonUtils.getAppComponent(oView);
|
|
19
18
|
const oMetaModel = oAppComponent.getModel().getMetaModel();
|
|
20
|
-
const oPageContext = oView.getBindingContext()
|
|
19
|
+
const oPageContext = oView.getBindingContext();
|
|
20
|
+
|
|
21
21
|
//If the link context is same as page context merging of context should not happen
|
|
22
|
-
const mergeLinkContext = oTargetInfo?.linkContextPath ? oPageContext
|
|
23
|
-
if (oExternalNavigationContext?.page && mergeLinkContext) {
|
|
22
|
+
const mergeLinkContext = oTargetInfo?.linkContextPath ? oPageContext?.getPath() !== oTargetInfo?.linkContextPath : true;
|
|
23
|
+
if (oExternalNavigationContext?.page && mergeLinkContext && oPageContext) {
|
|
24
24
|
const sMetaPath = oMetaModel.getMetaPath(oPageContext.getPath());
|
|
25
25
|
let pageAttributes = oPageContext.getObject();
|
|
26
26
|
pageAttributes = oController._intentBasedNavigation.processSemanticAttributes(oPageContext, oPageContext.getObject());
|
|
@@ -2,33 +2,109 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2026 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library"], function (Log, CommonUtils, KeepAliveHelper, ModelHelper, CoreLibrary) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/library", "sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper"], function (Log, CommonUtils, KeepAliveHelper, ModelHelper, CoreLibrary, SectionNavigationHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
var pollForSectionStability = SectionNavigationHelper.pollForSectionStability;
|
|
8
9
|
const VariantManagement = CoreLibrary.VariantManagement;
|
|
9
10
|
const opControlHandlers = {
|
|
10
11
|
retrieve: function (oOPLayout) {
|
|
12
|
+
const controller = this.getView().getController();
|
|
13
|
+
// Get subsection from controller's stored target subsection (set by onNavigateChange or targetControlId navigation)
|
|
14
|
+
const targetSubSection = controller.targetSubSection;
|
|
15
|
+
const selectedSection = oOPLayout.getSelectedSection();
|
|
16
|
+
const selectedSubSection = targetSubSection?.getId() ?? null;
|
|
11
17
|
return {
|
|
12
|
-
selectedSection
|
|
18
|
+
selectedSection,
|
|
19
|
+
selectedSubSection
|
|
13
20
|
};
|
|
14
21
|
},
|
|
15
22
|
apply: function (opLayout, controlState) {
|
|
16
23
|
const selectedSection = controlState?.selectedSection;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const controller = this.getView().getController();
|
|
21
|
-
controller.pageReady.waitPageReady().then(function () {
|
|
22
|
-
opLayout.setSelectedSection(selectedSection);
|
|
23
|
-
return undefined;
|
|
24
|
-
}).catch(err => {
|
|
25
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
26
|
-
Log.error(`FE V4 : OP : ViewState : ObjectPageLayout state couldn't be applied : ${message}`);
|
|
27
|
-
});
|
|
28
|
-
} else {
|
|
29
|
-
opLayout.setSelectedSection(selectedSection);
|
|
30
|
-
}
|
|
24
|
+
const selectedSubSection = controlState?.selectedSubSection;
|
|
25
|
+
if (!selectedSection) {
|
|
26
|
+
return;
|
|
31
27
|
}
|
|
28
|
+
|
|
29
|
+
// Check if the selected section is a section or subsection
|
|
30
|
+
const opSectionToSelect = opLayout.getSections().find(section => section.getId() === selectedSection);
|
|
31
|
+
const isSubSectionId = !opSectionToSelect && this.getView().byId(selectedSection)?.isA("sap.uxap.ObjectPageSubSection");
|
|
32
|
+
const controller = this.getView().getController();
|
|
33
|
+
|
|
34
|
+
// Determine the target to navigate to: prefer subsection if available
|
|
35
|
+
const navigationTarget = selectedSubSection ?? selectedSection;
|
|
36
|
+
const isNavigatingToSubSection = !!selectedSubSection || isSubSectionId;
|
|
37
|
+
|
|
38
|
+
// Determine target section ID for comparison (needed before pageReady)
|
|
39
|
+
const getTargetSectionId = () => {
|
|
40
|
+
if (isSubSectionId) {
|
|
41
|
+
return opLayout.getSections().find(s => s.getSubSections().some(ss => ss.getId() === navigationTarget))?.getId();
|
|
42
|
+
}
|
|
43
|
+
return selectedSection;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Wait for pageReady, then navigate and poll for UX rules reset
|
|
47
|
+
controller.pageReady.waitPageReady().then(async () => {
|
|
48
|
+
const targetSectionId = getTargetSectionId();
|
|
49
|
+
|
|
50
|
+
// Skip if no valid target section (e.g., subsection's parent no longer exists)
|
|
51
|
+
// or already on target section - no navigation or polling needed
|
|
52
|
+
if (!targetSectionId || opLayout.getSelectedSection() === targetSectionId) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const performNavigation = () => {
|
|
56
|
+
// Guard: don't navigate if ObjectPageLayout has been destroyed
|
|
57
|
+
if (!opLayout.getDomRef()) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Guard: don't navigate if already on target section
|
|
62
|
+
const currentSection = opLayout.getSelectedSection();
|
|
63
|
+
if (currentSection === targetSectionId) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (isNavigatingToSubSection) {
|
|
67
|
+
// For subsection navigation, use navigateToSubSection which handles parent section activation
|
|
68
|
+
const localId = controller.getView().getLocalId(navigationTarget);
|
|
69
|
+
if (localId) {
|
|
70
|
+
controller.getExtensionAPI().navigateToSubSection(localId);
|
|
71
|
+
} else {
|
|
72
|
+
opLayout.scrollToSection(navigationTarget, 0);
|
|
73
|
+
}
|
|
74
|
+
} else if (opSectionToSelect && opSectionToSelect.getVisible() === true) {
|
|
75
|
+
// For section IDs, navigate if section is visible
|
|
76
|
+
opLayout.scrollToSection(selectedSection, 0);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Skip navigation and polling on subsequent loads - only restore section during initial load
|
|
81
|
+
// This prevents overriding user's manual tab selection when state is restored later
|
|
82
|
+
const controllerWithFlag = controller;
|
|
83
|
+
if (controllerWithFlag.skipViewStateSectionRestore === true) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Navigate immediately
|
|
88
|
+
performNavigation();
|
|
89
|
+
|
|
90
|
+
// Skip polling if already on target section
|
|
91
|
+
if (opLayout.getSelectedSection() === targetSectionId) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Poll to detect UX rules reset during initial load
|
|
96
|
+
// Uses shared utility from helpers/SectionNavigationHelper.ts
|
|
97
|
+
await pollForSectionStability({
|
|
98
|
+
getSelectedSection: () => opLayout.getSelectedSection(),
|
|
99
|
+
targetSectionId,
|
|
100
|
+
onResetDetected: performNavigation,
|
|
101
|
+
guardCheck: () => !!opLayout.getDomRef()
|
|
102
|
+
});
|
|
103
|
+
return; // Required by linter rule promise/always-return
|
|
104
|
+
}).catch(() => {
|
|
105
|
+
// ViewState: ObjectPageLayout section state couldn't be applied
|
|
106
|
+
// Don't re-throw - allow page to continue even if navigation fails
|
|
107
|
+
});
|
|
32
108
|
},
|
|
33
109
|
refreshBinding: function (oOPLayout) {
|
|
34
110
|
const oBindingContext = oOPLayout.getBindingContext();
|
|
@@ -160,4 +236,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
160
236
|
};
|
|
161
237
|
return ViewStateExtensionOverride;
|
|
162
238
|
}, false);
|
|
163
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5Iiwib3BDb250cm9sSGFuZGxlcnMiLCJyZXRyaWV2ZSIsIm9PUExheW91dCIsInNlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsImFwcGx5Iiwib3BMYXlvdXQiLCJjb250cm9sU3RhdGUiLCJvcFNlY3Rpb25Ub1NlbGVjdCIsImdldFNlY3Rpb25zIiwiZmluZCIsInNlY3Rpb24iLCJnZXRJZCIsImdldFZpc2libGUiLCJjb250cm9sbGVyIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJ3YWl0UGFnZVJlYWR5IiwidGhlbiIsInNldFNlbGVjdGVkU2VjdGlvbiIsInVuZGVmaW5lZCIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiTG9nIiwiZXJyb3IiLCJyZWZyZXNoQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvTmF2aWdhdGlvblByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsIiRraW5kIiwiYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYVByZXYiLCJzTmF2UHJvcCIsIiRpc0NvbGxlY3Rpb24iLCJwdXNoIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJhUHJvcGVydGllcyIsIiRQcm9wZXJ0eVBhdGgiLCJzR3JvdXBJZCIsImdldEdyb3VwSWQiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJjb25jYXQiLCJyZWZyZXNoIiwiaW5mbyIsIlZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXQiLCJ2aWV3IiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiX2dldE9QU3RhdGVIYW5kbGVyIiwiY29udHJvbCIsInZpZXdPUCIsImNhbGwiLCJfZ2V0T1BSZWZyZXNoSGFuZGxlciIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwib3BTdGF0ZUhhbmRsZXIiLCJhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlciIsImNvbnRyb2xSZWZyZXNoSGFuZGxlcnMiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9WaWV3IiwiYmFzZSIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwidmFyaWFudE1hbmFnZW1lbnQiLCJDb250cm9sIiwiUGFnZSIsIk5vbmUiLCJieUlkIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwic1JlZnJlc2hTdHJhdGVneSIsImdldFZpZXdSZWZyZXNoSW5mbyIsIm9Db250cm9sbGVyIiwiYUNvbnRyb2xzVG9SZWZyZXNoIiwib09iamVjdFBhZ2VDb250cm9sIiwiYVZpZXdDb250cm9scyIsIl9maW5kVGFibGVzIiwiZ2V0Q29udHJvbHNGb3JSZWZyZXNoIiwiYVByZXZDb250cm9scyIsIm9Db250cm9sIiwiaW5jbHVkZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xTdGF0ZUhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsTmF2UHJvcGVydHkgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmNvbnN0IFZhcmlhbnRNYW5hZ2VtZW50ID0gQ29yZUxpYnJhcnkuVmFyaWFudE1hbmFnZW1lbnQ7XG5leHBvcnQgdHlwZSBPYmplY3RQYWdlU3RhdGUgPSB7IHNlbGVjdGVkU2VjdGlvbjogc3RyaW5nIHwgbnVsbCB9O1xuXG5jb25zdCBvcENvbnRyb2xIYW5kbGVycyA9IHtcblx0cmV0cmlldmU6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlU3RhdGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3RlZFNlY3Rpb246IG9PUExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKVxuXHRcdH07XG5cdH0sXG5cdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvcExheW91dDogT2JqZWN0UGFnZUxheW91dCwgY29udHJvbFN0YXRlPzogeyBzZWxlY3RlZFNlY3Rpb246IHN0cmluZyB8IG51bGwgfSk6IHZvaWQge1xuXHRcdGNvbnN0IHNlbGVjdGVkU2VjdGlvbiA9IGNvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRTZWN0aW9uO1xuXHRcdGlmIChzZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IG9wU2VjdGlvblRvU2VsZWN0ID0gb3BMYXlvdXQuZ2V0U2VjdGlvbnMoKS5maW5kKChzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikgPT4gc2VjdGlvbi5nZXRJZCgpID09PSBzZWxlY3RlZFNlY3Rpb24pO1xuXHRcdFx0aWYgKG9wU2VjdGlvblRvU2VsZWN0Py5nZXRWaXNpYmxlKCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnRyb2xsZXIucGFnZVJlYWR5XG5cdFx0XHRcdFx0LndhaXRQYWdlUmVhZHkoKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdG9wTGF5b3V0LnNldFNlbGVjdGVkU2VjdGlvbihzZWxlY3RlZFNlY3Rpb24pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZXJyOiB1bmtub3duKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBGRSBWNCA6IE9QIDogVmlld1N0YXRlIDogT2JqZWN0UGFnZUxheW91dCBzdGF0ZSBjb3VsZG4ndCBiZSBhcHBsaWVkIDogJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3BMYXlvdXQuc2V0U2VsZWN0ZWRTZWN0aW9uKHNlbGVjdGVkU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9PUExheW91dDogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PUExheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IG9CaW5kaW5nID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0aWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdHJhdGVneSA9IEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgob09QTGF5b3V0LCBzTWV0YVBhdGgpO1xuXHRcdFx0aWYgKHNTdHJhdGVneSA9PT0gXCJzZWxmXCIpIHtcblx0XHRcdFx0Ly8gUmVmcmVzaCBtYWluIGNvbnRleHQgYW5kIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgb3IgT1Bcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRvTmF2aWdhdGlvblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9XG5cdFx0XHRcdFx0XHQoQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNNZXRhUGF0aCwge1xuXHRcdFx0XHRcdFx0XHQka2luZDogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0fSkgYXMgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+KSB8fCB7fSxcblx0XHRcdFx0XHRhTmF2UHJvcGVydGllc1RvUmVxdWVzdCA9IE9iamVjdC5rZXlzKG9OYXZpZ2F0aW9uUHJvcGVydGllcykucmVkdWNlKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRcdGFQcmV2OiB7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfVtdLFxuXHRcdFx0XHRcdFx0c05hdlByb3A6IHN0cmluZ1xuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydGllc1tzTmF2UHJvcF0uJGlzQ29sbGVjdGlvbiAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRhUHJldi5wdXNoKHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNOYXZQcm9wIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGFQcmV2O1xuXHRcdFx0XHRcdH0sIFtdKSxcblx0XHRcdFx0XHRhUHJvcGVydGllczogKHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZyB9IHwgeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfSlbXSA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdHNHcm91cElkID0gb0JpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoYVByb3BlcnRpZXMuY29uY2F0KGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0KSwgc0dyb3VwSWQpO1xuXHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdC8vIENvbXBsZXRlIHJlZnJlc2hcblx0XHRcdFx0b0JpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhgT2JqZWN0UGFnZTogJHtvT1BMYXlvdXQuZ2V0SWQoKX0gd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhYCk7XG5cdFx0fVxuXHR9XG59O1xuXG5jb25zdCBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZSA9IHtcblx0X2dldE9iamVjdFBhZ2VMYXlvdXQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpOiBPYmplY3RQYWdlTGF5b3V0IHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdHJldHVybiBjb250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXRlIGhhbmRsZXIgZm9yIE9iamVjdFBhZ2VMYXlvdXQgaW4gdmlldy5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHN0YXRlIGludGVyYWN0aW9uXG5cdCAqIEByZXR1cm5zIFN0YXRlIGhhbmRsZXJcblx0ICovXG5cdF9nZXRPUFN0YXRlSGFuZGxlcjogZnVuY3Rpb24gKFxuXHRcdHRoaXM6IFZpZXdTdGF0ZSxcblx0XHRjb250cm9sOiBNYW5hZ2VkT2JqZWN0XG5cdCk6IENvbnRyb2xTdGF0ZUhhbmRsZXI8T2JqZWN0UGFnZUxheW91dCwgT2JqZWN0UGFnZVN0YXRlPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgdmlld09QID0gVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUuX2dldE9iamVjdFBhZ2VMYXlvdXQuY2FsbCh0aGlzKTtcblx0XHRpZiAodmlld09QID09PSBjb250cm9sKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyZXRyaWV2ZTogb3BDb250cm9sSGFuZGxlcnMucmV0cmlldmUsXG5cdFx0XHRcdGFwcGx5OiBvcENvbnRyb2xIYW5kbGVycy5hcHBseVxuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVmcmVzaCBoYW5kbGVyIGZvciBPYmplY3RQYWdlTGF5b3V0IGluIHZpZXcuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIGJlaW5nIHJlZnJlc2hlZFxuXHQgKiBAcmV0dXJucyBSZWZyZXNoIGhhbmRsZXJcblx0ICovXG5cdF9nZXRPUFJlZnJlc2hIYW5kbGVyOiBmdW5jdGlvbiAoXG5cdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdGNvbnRyb2w6IE1hbmFnZWRPYmplY3Rcblx0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxPYmplY3RQYWdlTGF5b3V0LCBPYmplY3RQYWdlU3RhdGU+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB2aWV3T1AgPSBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZS5fZ2V0T2JqZWN0UGFnZUxheW91dC5jYWxsKHRoaXMpO1xuXHRcdGlmICh2aWV3T1AgPT09IGNvbnRyb2wpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJlZnJlc2hCaW5kaW5nOiBvcENvbnRyb2xIYW5kbGVycy5yZWZyZXNoQmluZGluZ1xuXHRcdFx0fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhc3MgdGhlIHN0YXRlIGhhbmRsZXJzIG9mIG9iamVjdCBwYWdlIHZpZXcgYWNjb3JkaW5nIHRvIHRoZSBjb250cm9sIGluIGNvbmNlcm4uXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIGZvciBzdGF0ZSBpbnRlcmFjdGlvblxuXHQgKiBAcGFyYW0gY29udHJvbFN0YXRlSGFuZGxlcnMgU3RhdGUgaGFuZGxlcnNcblx0ICovXG5cdGFkYXB0Q29udHJvbFN0YXRlSGFuZGxlcjogZnVuY3Rpb24gKFxuXHRcdHRoaXM6IFZpZXdTdGF0ZSxcblx0XHRjb250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdGNvbnRyb2xTdGF0ZUhhbmRsZXJzOiBDb250cm9sU3RhdGVIYW5kbGVyPE9iamVjdFBhZ2VMYXlvdXQsIE9iamVjdFBhZ2VTdGF0ZT5bXVxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBvcFN0YXRlSGFuZGxlciA9IFZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlLl9nZXRPUFN0YXRlSGFuZGxlci5jYWxsKHRoaXMsIGNvbnRyb2wpO1xuXHRcdGlmIChvcFN0YXRlSGFuZGxlcikge1xuXHRcdFx0Y29udHJvbFN0YXRlSGFuZGxlcnMucHVzaChvcFN0YXRlSGFuZGxlcik7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBQYXNzIHRoZSByZWZyZXNoIGhhbmRsZXJzIG9mIG9iamVjdCBwYWdlIHZpZXcgYWNjb3JkaW5nIHRvIHRoZSBjb250cm9sIGJlaW5nIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgYmVpbmcgcmVmcmVzaGVkXG5cdCAqIEBwYXJhbSBjb250cm9sUmVmcmVzaEhhbmRsZXJzIFJlZnJlc2ggaGFuZGxlcnNcblx0ICovXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyOiBmdW5jdGlvbiAoXG5cdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdGNvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0Y29udHJvbFJlZnJlc2hIYW5kbGVyczogQ29udHJvbFN0YXRlSGFuZGxlcjxPYmplY3RQYWdlTGF5b3V0LCBPYmplY3RQYWdlU3RhdGU+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9wU3RhdGVIYW5kbGVyID0gVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUuX2dldE9QUmVmcmVzaEhhbmRsZXIuY2FsbCh0aGlzLCBjb250cm9sKTtcblx0XHRpZiAob3BTdGF0ZUhhbmRsZXIpIHtcblx0XHQgICAgY29udHJvbFJlZnJlc2hIYW5kbGVycy5yZWZyZXNoQmluZGluZyA9IG9wU3RhdGVIYW5kbGVyLnJlZnJlc2hCaW5kaW5nO1xuXHRcdH1cblx0fSxcblxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHk6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKSxcblx0XHRcdG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0c3dpdGNoIChvVmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnQuQ29udHJvbDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50LlBhZ2U6XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50Lk5vbmU6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bmhhbmRsZWQgdmFyaWFudCBzZXR0aW5nOiAke29WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudH1gKTtcblx0XHR9XG5cblx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9WaWV3LmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBDb250cm9sKTtcblx0fSxcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0c1JlZnJlc2hTdHJhdGVneSA9IEtlZXBBbGl2ZUhlbHBlci5nZXRWaWV3UmVmcmVzaEluZm8ob1ZpZXcpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0bGV0IGFDb250cm9sc1RvUmVmcmVzaDogQ29udHJvbFtdID0gW107XG5cblx0XHRpZiAoc1JlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2VDb250cm9sID0gKG9Db250cm9sbGVyIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaC5wdXNoKG9PYmplY3RQYWdlQ29udHJvbCk7XG5cdFx0fVxuXHRcdGlmIChzUmVmcmVzaFN0cmF0ZWd5ICE9PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0Y29uc3QgYVZpZXdDb250cm9scyA9IChvQ29udHJvbGxlciBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaCA9IGFDb250cm9sc1RvUmVmcmVzaC5jb25jYXQoS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xzRm9yUmVmcmVzaChvVmlldywgYVZpZXdDb250cm9scykgfHwgW10pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNvbnRyb2xzVG9SZWZyZXNoLnJlZHVjZShmdW5jdGlvbiAoYVByZXZDb250cm9scywgb0NvbnRyb2wpIHtcblx0XHRcdGlmICghYVByZXZDb250cm9scy5pbmNsdWRlcyhvQ29udHJvbCkpIHtcblx0XHRcdFx0YVByZXZDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUHJldkNvbnRyb2xzO1xuXHRcdH0sIGFDb250cm9scyk7XG5cdH1cbn07XG5cbmV4cG9ydCBk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
|
|
239
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5Iiwib3BDb250cm9sSGFuZGxlcnMiLCJyZXRyaWV2ZSIsIm9PUExheW91dCIsImNvbnRyb2xsZXIiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsInRhcmdldFN1YlNlY3Rpb24iLCJzZWxlY3RlZFNlY3Rpb24iLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJzZWxlY3RlZFN1YlNlY3Rpb24iLCJnZXRJZCIsImFwcGx5Iiwib3BMYXlvdXQiLCJjb250cm9sU3RhdGUiLCJvcFNlY3Rpb25Ub1NlbGVjdCIsImdldFNlY3Rpb25zIiwiZmluZCIsInNlY3Rpb24iLCJpc1N1YlNlY3Rpb25JZCIsImJ5SWQiLCJpc0EiLCJuYXZpZ2F0aW9uVGFyZ2V0IiwiaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uIiwiZ2V0VGFyZ2V0U2VjdGlvbklkIiwicyIsImdldFN1YlNlY3Rpb25zIiwic29tZSIsInNzIiwicGFnZVJlYWR5Iiwid2FpdFBhZ2VSZWFkeSIsInRoZW4iLCJ0YXJnZXRTZWN0aW9uSWQiLCJwZXJmb3JtTmF2aWdhdGlvbiIsImdldERvbVJlZiIsImN1cnJlbnRTZWN0aW9uIiwibG9jYWxJZCIsImdldExvY2FsSWQiLCJnZXRFeHRlbnNpb25BUEkiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInNjcm9sbFRvU2VjdGlvbiIsImdldFZpc2libGUiLCJjb250cm9sbGVyV2l0aEZsYWciLCJza2lwVmlld1N0YXRlU2VjdGlvblJlc3RvcmUiLCJwb2xsRm9yU2VjdGlvblN0YWJpbGl0eSIsIm9uUmVzZXREZXRlY3RlZCIsImd1YXJkQ2hlY2siLCJjYXRjaCIsInJlZnJlc2hCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvQmluZGluZyIsImdldEJpbmRpbmciLCJzTWV0YVBhdGgiLCJNb2RlbEhlbHBlciIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsInNTdHJhdGVneSIsIktlZXBBbGl2ZUhlbHBlciIsImdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9OYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbW1vblV0aWxzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiJGtpbmQiLCJhTmF2UHJvcGVydGllc1RvUmVxdWVzdCIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhUHJldiIsInNOYXZQcm9wIiwiJGlzQ29sbGVjdGlvbiIsInB1c2giLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImFQcm9wZXJ0aWVzIiwiJFByb3BlcnR5UGF0aCIsInNHcm91cElkIiwiZ2V0R3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImNvbmNhdCIsInJlZnJlc2giLCJMb2ciLCJpbmZvIiwiVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUiLCJfZ2V0T2JqZWN0UGFnZUxheW91dCIsInZpZXciLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJfZ2V0T1BTdGF0ZUhhbmRsZXIiLCJjb250cm9sIiwidmlld09QIiwiY2FsbCIsIl9nZXRPUFJlZnJlc2hIYW5kbGVyIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiY29udHJvbFN0YXRlSGFuZGxlcnMiLCJvcFN0YXRlSGFuZGxlciIsImFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyIiwiY29udHJvbFJlZnJlc2hIYW5kbGVycyIsImFwcGx5SW5pdGlhbFN0YXRlT25seSIsImFkYXB0U3RhdGVDb250cm9scyIsImFTdGF0ZUNvbnRyb2xzIiwib1ZpZXciLCJiYXNlIiwib1ZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ2YXJpYW50TWFuYWdlbWVudCIsIkNvbnRyb2wiLCJQYWdlIiwiTm9uZSIsIkVycm9yIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwic1JlZnJlc2hTdHJhdGVneSIsImdldFZpZXdSZWZyZXNoSW5mbyIsIm9Db250cm9sbGVyIiwiYUNvbnRyb2xzVG9SZWZyZXNoIiwib09iamVjdFBhZ2VDb250cm9sIiwiYVZpZXdDb250cm9scyIsIl9maW5kVGFibGVzIiwiZ2V0Q29udHJvbHNGb3JSZWZyZXNoIiwiYVByZXZDb250cm9scyIsIm9Db250cm9sIiwiaW5jbHVkZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyB0eXBlIENvbnRyb2xTdGF0ZUhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB7IHBvbGxGb3JTZWN0aW9uU3RhYmlsaXR5IH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9oZWxwZXJzL1NlY3Rpb25OYXZpZ2F0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBWYXJpYW50TWFuYWdlbWVudCA9IENvcmVMaWJyYXJ5LlZhcmlhbnRNYW5hZ2VtZW50O1xuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVN0YXRlID0geyBzZWxlY3RlZFNlY3Rpb246IHN0cmluZyB8IG51bGw7IHNlbGVjdGVkU3ViU2VjdGlvbj86IHN0cmluZyB8IG51bGwgfTtcblxuY29uc3Qgb3BDb250cm9sSGFuZGxlcnMgPSB7XG5cdHJldHJpZXZlOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvT1BMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQpOiBPYmplY3RQYWdlU3RhdGUge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0Ly8gR2V0IHN1YnNlY3Rpb24gZnJvbSBjb250cm9sbGVyJ3Mgc3RvcmVkIHRhcmdldCBzdWJzZWN0aW9uIChzZXQgYnkgb25OYXZpZ2F0ZUNoYW5nZSBvciB0YXJnZXRDb250cm9sSWQgbmF2aWdhdGlvbilcblx0XHRjb25zdCB0YXJnZXRTdWJTZWN0aW9uID0gKGNvbnRyb2xsZXIgYXMgdW5rbm93biBhcyB7IHRhcmdldFN1YlNlY3Rpb24/OiB7IGdldElkOiAoKSA9PiBzdHJpbmcgfSB9KS50YXJnZXRTdWJTZWN0aW9uO1xuXHRcdGNvbnN0IHNlbGVjdGVkU2VjdGlvbiA9IG9PUExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKTtcblx0XHRjb25zdCBzZWxlY3RlZFN1YlNlY3Rpb24gPSB0YXJnZXRTdWJTZWN0aW9uPy5nZXRJZCgpID8/IG51bGw7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGVkU2VjdGlvbixcblx0XHRcdHNlbGVjdGVkU3ViU2VjdGlvblxuXHRcdH07XG5cdH0sXG5cdGFwcGx5OiBmdW5jdGlvbiAoXG5cdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdG9wTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRcdGNvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRTZWN0aW9uOiBzdHJpbmcgfCBudWxsOyBzZWxlY3RlZFN1YlNlY3Rpb24/OiBzdHJpbmcgfCBudWxsIH1cblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRTZWN0aW9uID0gY29udHJvbFN0YXRlPy5zZWxlY3RlZFNlY3Rpb247XG5cdFx0Y29uc3Qgc2VsZWN0ZWRTdWJTZWN0aW9uID0gY29udHJvbFN0YXRlPy5zZWxlY3RlZFN1YlNlY3Rpb247XG5cblx0XHRpZiAoIXNlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBzZWN0aW9uIGlzIGEgc2VjdGlvbiBvciBzdWJzZWN0aW9uXG5cdFx0Y29uc3Qgb3BTZWN0aW9uVG9TZWxlY3QgPSBvcExheW91dC5nZXRTZWN0aW9ucygpLmZpbmQoKHNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSA9PiBzZWN0aW9uLmdldElkKCkgPT09IHNlbGVjdGVkU2VjdGlvbik7XG5cdFx0Y29uc3QgaXNTdWJTZWN0aW9uSWQgPSAhb3BTZWN0aW9uVG9TZWxlY3QgJiYgdGhpcy5nZXRWaWV3KCkuYnlJZChzZWxlY3RlZFNlY3Rpb24pPy5pc0EoXCJzYXAudXhhcC5PYmplY3RQYWdlU3ViU2VjdGlvblwiKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSB0YXJnZXQgdG8gbmF2aWdhdGUgdG86IHByZWZlciBzdWJzZWN0aW9uIGlmIGF2YWlsYWJsZVxuXHRcdGNvbnN0IG5hdmlnYXRpb25UYXJnZXQgPSBzZWxlY3RlZFN1YlNlY3Rpb24gPz8gc2VsZWN0ZWRTZWN0aW9uO1xuXHRcdGNvbnN0IGlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9ICEhc2VsZWN0ZWRTdWJTZWN0aW9uIHx8IGlzU3ViU2VjdGlvbklkO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRhcmdldCBzZWN0aW9uIElEIGZvciBjb21wYXJpc29uICAobmVlZGVkIGJlZm9yZSBwYWdlUmVhZHkpXG5cdFx0Y29uc3QgZ2V0VGFyZ2V0U2VjdGlvbklkID0gKCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRpZiAoaXNTdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0cmV0dXJuIG9wTGF5b3V0XG5cdFx0XHRcdFx0LmdldFNlY3Rpb25zKClcblx0XHRcdFx0XHQuZmluZCgocykgPT4gcy5nZXRTdWJTZWN0aW9ucygpLnNvbWUoKHNzKSA9PiBzcy5nZXRJZCgpID09PSBuYXZpZ2F0aW9uVGFyZ2V0KSlcblx0XHRcdFx0XHQ/LmdldElkKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0ZWRTZWN0aW9uO1xuXHRcdH07XG5cblx0XHQvLyBXYWl0IGZvciBwYWdlUmVhZHksIHRoZW4gbmF2aWdhdGUgYW5kIHBvbGwgZm9yIFVYIHJ1bGVzIHJlc2V0XG5cdFx0Y29udHJvbGxlci5wYWdlUmVhZHlcblx0XHRcdC53YWl0UGFnZVJlYWR5KClcblx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0U2VjdGlvbklkID0gZ2V0VGFyZ2V0U2VjdGlvbklkKCk7XG5cblx0XHRcdFx0Ly8gU2tpcCBpZiBubyB2YWxpZCB0YXJnZXQgc2VjdGlvbiAoZS5nLiwgc3Vic2VjdGlvbidzIHBhcmVudCBubyBsb25nZXIgZXhpc3RzKVxuXHRcdFx0XHQvLyBvciBhbHJlYWR5IG9uIHRhcmdldCBzZWN0aW9uIC0gbm8gbmF2aWdhdGlvbiBvciBwb2xsaW5nIG5lZWRlZFxuXHRcdFx0XHRpZiAoIXRhcmdldFNlY3Rpb25JZCB8fCBvcExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKSA9PT0gdGFyZ2V0U2VjdGlvbklkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGVyZm9ybU5hdmlnYXRpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Ly8gR3VhcmQ6IGRvbid0IG5hdmlnYXRlIGlmIE9iamVjdFBhZ2VMYXlvdXQgaGFzIGJlZW4gZGVzdHJveWVkXG5cdFx0XHRcdFx0aWYgKCFvcExheW91dC5nZXREb21SZWYoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEd1YXJkOiBkb24ndCBuYXZpZ2F0ZSBpZiBhbHJlYWR5IG9uIHRhcmdldCBzZWN0aW9uXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFNlY3Rpb24gPSBvcExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKTtcblx0XHRcdFx0XHRpZiAoY3VycmVudFNlY3Rpb24gPT09IHRhcmdldFNlY3Rpb25JZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpc05hdmlnYXRpbmdUb1N1YlNlY3Rpb24pIHtcblx0XHRcdFx0XHRcdC8vIEZvciBzdWJzZWN0aW9uIG5hdmlnYXRpb24sIHVzZSBuYXZpZ2F0ZVRvU3ViU2VjdGlvbiB3aGljaCBoYW5kbGVzIHBhcmVudCBzZWN0aW9uIGFjdGl2YXRpb25cblx0XHRcdFx0XHRcdGNvbnN0IGxvY2FsSWQgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRMb2NhbElkKG5hdmlnYXRpb25UYXJnZXQpO1xuXHRcdFx0XHRcdFx0aWYgKGxvY2FsSWQpIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5nZXRFeHRlbnNpb25BUEkoKS5uYXZpZ2F0ZVRvU3ViU2VjdGlvbihsb2NhbElkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9wTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihuYXZpZ2F0aW9uVGFyZ2V0LCAwKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9wU2VjdGlvblRvU2VsZWN0ICYmIG9wU2VjdGlvblRvU2VsZWN0LmdldFZpc2libGUoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gRm9yIHNlY3Rpb24gSURzLCBuYXZpZ2F0ZSBpZiBzZWN0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRcdG9wTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihzZWxlY3RlZFNlY3Rpb24sIDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBTa2lwIG5hdmlnYXRpb24gYW5kIHBvbGxpbmcgb24gc3Vic2VxdWVudCBsb2FkcyAtIG9ubHkgcmVzdG9yZSBzZWN0aW9uIGR1cmluZyBpbml0aWFsIGxvYWRcblx0XHRcdFx0Ly8gVGhpcyBwcmV2ZW50cyBvdmVycmlkaW5nIHVzZXIncyBtYW51YWwgdGFiIHNlbGVjdGlvbiB3aGVuIHN0YXRlIGlzIHJlc3RvcmVkIGxhdGVyXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXJXaXRoRmxhZyA9IGNvbnRyb2xsZXIgYXMgdW5rbm93biBhcyB7IHNraXBWaWV3U3RhdGVTZWN0aW9uUmVzdG9yZT86IGJvb2xlYW4gfTtcblx0XHRcdFx0aWYgKGNvbnRyb2xsZXJXaXRoRmxhZy5za2lwVmlld1N0YXRlU2VjdGlvblJlc3RvcmUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOYXZpZ2F0ZSBpbW1lZGlhdGVseVxuXHRcdFx0XHRwZXJmb3JtTmF2aWdhdGlvbigpO1xuXG5cdFx0XHRcdC8vIFNraXAgcG9sbGluZyBpZiBhbHJlYWR5IG9uIHRhcmdldCBzZWN0aW9uXG5cdFx0XHRcdGlmIChvcExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKSA9PT0gdGFyZ2V0U2VjdGlvbklkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUG9sbCB0byBkZXRlY3QgVVggcnVsZXMgcmVzZXQgZHVyaW5nIGluaXRpYWwgbG9hZFxuXHRcdFx0XHQvLyBVc2VzIHNoYXJlZCB1dGlsaXR5IGZyb20gaGVscGVycy9TZWN0aW9uTmF2aWdhdGlvbkhlbHBlci50c1xuXHRcdFx0XHRhd2FpdCBwb2xsRm9yU2VjdGlvblN0YWJpbGl0eSh7XG5cdFx0XHRcdFx0Z2V0U2VsZWN0ZWRTZWN0aW9uOiAoKSA9PiBvcExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKSxcblx0XHRcdFx0XHR0YXJnZXRTZWN0aW9uSWQsXG5cdFx0XHRcdFx0b25SZXNldERldGVjdGVkOiBwZXJmb3JtTmF2aWdhdGlvbixcblx0XHRcdFx0XHRndWFyZENoZWNrOiAoKSA9PiAhIW9wTGF5b3V0LmdldERvbVJlZigpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm47IC8vIFJlcXVpcmVkIGJ5IGxpbnRlciBydWxlIHByb21pc2UvYWx3YXlzLXJldHVyblxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdC8vIFZpZXdTdGF0ZTogT2JqZWN0UGFnZUxheW91dCBzZWN0aW9uIHN0YXRlIGNvdWxkbid0IGJlIGFwcGxpZWRcblx0XHRcdFx0Ly8gRG9uJ3QgcmUtdGhyb3cgLSBhbGxvdyBwYWdlIHRvIGNvbnRpbnVlIGV2ZW4gaWYgbmF2aWdhdGlvbiBmYWlsc1xuXHRcdFx0fSk7XG5cdH0sXG5cdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbiAob09QTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09QTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRpZiAob0JpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc1N0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aChvT1BMYXlvdXQsIHNNZXRhUGF0aCk7XG5cdFx0XHRpZiAoc1N0cmF0ZWd5ID09PSBcInNlbGZcIikge1xuXHRcdFx0XHQvLyBSZWZyZXNoIG1haW4gY29udGV4dCBhbmQgMS0xIG5hdmlnYXRpb24gcHJvcGVydGllcyBvciBPUFxuXHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdG9OYXZpZ2F0aW9uUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+ID1cblx0XHRcdFx0XHRcdChDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc01ldGFQYXRoLCB7XG5cdFx0XHRcdFx0XHRcdCRraW5kOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXG5cdFx0XHRcdFx0XHR9KSBhcyBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4pIHx8IHt9LFxuXHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKFxuXHRcdFx0XHRcdFx0YVByZXY6IHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdFx0XHRcdFx0XHRzTmF2UHJvcDogc3RyaW5nXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdGFQcmV2LnB1c2goeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc05hdlByb3AgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0fSwgW10pLFxuXHRcdFx0XHRcdGFQcm9wZXJ0aWVzOiAoeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KVtdID0gW3sgJFByb3BlcnR5UGF0aDogXCIqXCIgfV0sXG5cdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LnJlcXVlc3RTaWRlRWZmZWN0cyhhUHJvcGVydGllcy5jb25jYXQoYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QpLCBzR3JvdXBJZCk7XG5cdFx0XHR9IGVsc2UgaWYgKHNTdHJhdGVneSA9PT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRvQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5pbmZvKGBPYmplY3RQYWdlOiAke29PUExheW91dC5nZXRJZCgpfSB3YXMgbm90IHJlZnJlc2hlZC4gTm8gYmluZGluZyBmb3VuZCFgKTtcblx0XHR9XG5cdH1cbn07XG5cbmNvbnN0IFZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlID0ge1xuXHRfZ2V0T2JqZWN0UGFnZUxheW91dDogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSk6IE9iamVjdFBhZ2VMYXlvdXQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXIuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdGUgaGFuZGxlciBmb3IgT2JqZWN0UGFnZUxheW91dCBpbiB2aWV3LlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCBmb3Igc3RhdGUgaW50ZXJhY3Rpb25cblx0ICogQHJldHVybnMgU3RhdGUgaGFuZGxlclxuXHQgKi9cblx0X2dldE9QU3RhdGVIYW5kbGVyOiBmdW5jdGlvbiAoXG5cdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdGNvbnRyb2w6IE1hbmFnZWRPYmplY3Rcblx0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxPYmplY3RQYWdlTGF5b3V0LCBPYmplY3RQYWdlU3RhdGU+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB2aWV3T1AgPSBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZS5fZ2V0T2JqZWN0UGFnZUxheW91dC5jYWxsKHRoaXMpO1xuXHRcdGlmICh2aWV3T1AgPT09IGNvbnRyb2wpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJldHJpZXZlOiBvcENvbnRyb2xIYW5kbGVycy5yZXRyaWV2ZSxcblx0XHRcdFx0YXBwbHk6IG9wQ29udHJvbEhhbmRsZXJzLmFwcGx5XG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSByZWZyZXNoIGhhbmRsZXIgZm9yIE9iamVjdFBhZ2VMYXlvdXQgaW4gdmlldy5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgYmVpbmcgcmVmcmVzaGVkXG5cdCAqIEByZXR1cm5zIFJlZnJlc2ggaGFuZGxlclxuXHQgKi9cblx0X2dldE9QUmVmcmVzaEhhbmRsZXI6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBWaWV3U3RhdGUsXG5cdFx0Y29udHJvbDogTWFuYWdlZE9iamVjdFxuXHQpOiBDb250cm9sU3RhdGVIYW5kbGVyPE9iamVjdFBhZ2VMYXlvdXQsIE9iamVjdFBhZ2VTdGF0ZT4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHZpZXdPUCA9IFZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlLl9nZXRPYmplY3RQYWdlTGF5b3V0LmNhbGwodGhpcyk7XG5cdFx0aWYgKHZpZXdPUCA9PT0gY29udHJvbCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cmVmcmVzaEJpbmRpbmc6IG9wQ29udHJvbEhhbmRsZXJzLnJlZnJlc2hCaW5kaW5nXG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUGFzcyB0aGUgc3RhdGUgaGFuZGxlcnMgb2Ygb2JqZWN0IHBhZ2UgdmlldyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRyb2wgaW4gY29uY2Vybi5cblx0ICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHN0YXRlIGludGVyYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250cm9sU3RhdGVIYW5kbGVycyBTdGF0ZSBoYW5kbGVyc1xuXHQgKi9cblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyOiBmdW5jdGlvbiAoXG5cdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdGNvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0Y29udHJvbFN0YXRlSGFuZGxlcnM6IENvbnRyb2xTdGF0ZUhhbmRsZXI8T2JqZWN0UGFnZUxheW91dCwgT2JqZWN0UGFnZVN0YXRlPltdXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9wU3RhdGVIYW5kbGVyID0gVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUuX2dldE9QU3RhdGVIYW5kbGVyLmNhbGwodGhpcywgY29udHJvbCk7XG5cdFx0aWYgKG9wU3RhdGVIYW5kbGVyKSB7XG5cdFx0XHRjb250cm9sU3RhdGVIYW5kbGVycy5wdXNoKG9wU3RhdGVIYW5kbGVyKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhc3MgdGhlIHJlZnJlc2ggaGFuZGxlcnMgb2Ygb2JqZWN0IHBhZ2UgdmlldyBhY2NvcmRpbmcgdG8gdGhlIGNvbnRyb2wgYmVpbmcgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCBiZWluZyByZWZyZXNoZWRcblx0ICogQHBhcmFtIGNvbnRyb2xSZWZyZXNoSGFuZGxlcnMgUmVmcmVzaCBoYW5kbGVyc1xuXHQgKi9cblx0YWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXI6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBWaWV3U3RhdGUsXG5cdFx0Y29udHJvbDogTWFuYWdlZE9iamVjdCxcblx0XHRjb250cm9sUmVmcmVzaEhhbmRsZXJzOiBDb250cm9sU3RhdGVIYW5kbGVyPE9iamVjdFBhZ2VMYXlvdXQsIE9iamVjdFBhZ2VTdGF0ZT5cblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb3BTdGF0ZUhhbmRsZXIgPSBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZS5fZ2V0T1BSZWZyZXNoSGFuZGxlci5jYWxsKHRoaXMsIGNvbnRyb2wpO1xuXHRcdGlmIChvcFN0YXRlSGFuZGxlcikge1xuXHRcdFx0Y29udHJvbFJlZnJlc2hIYW5kbGVycy5yZWZyZXNoQmluZGluZyA9IG9wU3RhdGVIYW5kbGVyLnJlZnJlc2hCaW5kaW5nO1xuXHRcdH1cblx0fSxcblxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHk6IGZ1bmN0aW9uICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IENvbnRyb2xbXSk6IHZvaWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKSxcblx0XHRcdG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCk7XG5cdFx0c3dpdGNoIChvVmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnQuQ29udHJvbDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50LlBhZ2U6XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50Lk5vbmU6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bmhhbmRsZWQgdmFyaWFudCBzZXR0aW5nOiAke29WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudH1gKTtcblx0XHR9XG5cblx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9WaWV3LmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBDb250cm9sKTtcblx0fSxcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0c1JlZnJlc2hTdHJhdGVneSA9IEtlZXBBbGl2ZUhlbHBlci5nZXRWaWV3UmVmcmVzaEluZm8ob1ZpZXcpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0bGV0IGFDb250cm9sc1RvUmVmcmVzaDogQ29udHJvbFtdID0gW107XG5cblx0XHRpZiAoc1JlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2VDb250cm9sID0gKG9Db250cm9sbGVyIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaC5wdXNoKG9PYmplY3RQYWdlQ29udHJvbCk7XG5cdFx0fVxuXHRcdGlmIChzUmVmcmVzaFN0cmF0ZWd5ICE9PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0Y29uc3QgYVZpZXdDb250cm9scyA9IChvQ29udHJvbGxlciBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaCA9IGFDb250cm9sc1RvUmVmcmVzaC5jb25jYXQoS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xzRm9yUmVmcmVzaChvVmlldywgYVZpZXdDb250cm9scykgfHwgW10pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNvbnRyb2xzVG9SZWZyZXNoLnJlZHVjZShmdW5jdGlvbiAoYVByZXZDb250cm9scywgb0NvbnRyb2wpIHtcblx0XHRcdGlmICghYVByZXZDb250cm9scy5pbmNsdWRlcyhvQ29udHJvbCkpIHtcblx0XHRcdFx0YVByZXZDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhUHJldkNvbnRyb2xzO1xuXHRcdH0sIGFDb250cm9scyk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQWdCQSxNQUFNQSxpQkFBaUIsR0FBR0MsV0FBVyxDQUFDRCxpQkFBaUI7RUFHdkQsTUFBTUUsaUJBQWlCLEdBQUc7SUFDekJDLFFBQVEsRUFBRSxTQUFBQSxDQUEyQkMsU0FBMkIsRUFBbUI7TUFDbEYsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQXlCO01BQ3pFO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUlILFVBQVUsQ0FBK0RHLGdCQUFnQjtNQUNuSCxNQUFNQyxlQUFlLEdBQUdMLFNBQVMsQ0FBQ00sa0JBQWtCLENBQUMsQ0FBQztNQUN0RCxNQUFN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
|
|
@@ -5,6 +5,7 @@ import { type ControlStateHandler } from "sap/fe/core/controllerextensions/ViewS
|
|
|
5
5
|
import KeepAliveHelper from "sap/fe/core/helpers/KeepAliveHelper";
|
|
6
6
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
7
7
|
import CoreLibrary from "sap/fe/core/library";
|
|
8
|
+
import { pollForSectionStability } from "sap/fe/templates/ObjectPage/helpers/SectionNavigationHelper";
|
|
8
9
|
import type ObjectPageController from "sap/fe/templates/ObjectPage/ObjectPageController.controller";
|
|
9
10
|
import type ManagedObject from "sap/ui/base/ManagedObject";
|
|
10
11
|
import type Control from "sap/ui/core/Control";
|
|
@@ -14,34 +15,119 @@ import type ObjectPageSection from "sap/uxap/ObjectPageSection";
|
|
|
14
15
|
import type { MetaModelNavProperty } from "types/metamodel_types";
|
|
15
16
|
|
|
16
17
|
const VariantManagement = CoreLibrary.VariantManagement;
|
|
17
|
-
export type ObjectPageState = { selectedSection: string | null };
|
|
18
|
+
export type ObjectPageState = { selectedSection: string | null; selectedSubSection?: string | null };
|
|
18
19
|
|
|
19
20
|
const opControlHandlers = {
|
|
20
|
-
retrieve: function (oOPLayout: ObjectPageLayout): ObjectPageState {
|
|
21
|
+
retrieve: function (this: ViewState, oOPLayout: ObjectPageLayout): ObjectPageState {
|
|
22
|
+
const controller = this.getView().getController() as ObjectPageController;
|
|
23
|
+
// Get subsection from controller's stored target subsection (set by onNavigateChange or targetControlId navigation)
|
|
24
|
+
const targetSubSection = (controller as unknown as { targetSubSection?: { getId: () => string } }).targetSubSection;
|
|
25
|
+
const selectedSection = oOPLayout.getSelectedSection();
|
|
26
|
+
const selectedSubSection = targetSubSection?.getId() ?? null;
|
|
21
27
|
return {
|
|
22
|
-
selectedSection
|
|
28
|
+
selectedSection,
|
|
29
|
+
selectedSubSection
|
|
23
30
|
};
|
|
24
31
|
},
|
|
25
|
-
apply: function (
|
|
32
|
+
apply: function (
|
|
33
|
+
this: ViewState,
|
|
34
|
+
opLayout: ObjectPageLayout,
|
|
35
|
+
controlState?: { selectedSection: string | null; selectedSubSection?: string | null }
|
|
36
|
+
): void {
|
|
26
37
|
const selectedSection = controlState?.selectedSection;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
controller.pageReady
|
|
32
|
-
.waitPageReady()
|
|
33
|
-
.then(function (): void {
|
|
34
|
-
opLayout.setSelectedSection(selectedSection);
|
|
35
|
-
return undefined;
|
|
36
|
-
})
|
|
37
|
-
.catch((err: unknown): void => {
|
|
38
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
39
|
-
Log.error(`FE V4 : OP : ViewState : ObjectPageLayout state couldn't be applied : ${message}`);
|
|
40
|
-
});
|
|
41
|
-
} else {
|
|
42
|
-
opLayout.setSelectedSection(selectedSection);
|
|
43
|
-
}
|
|
38
|
+
const selectedSubSection = controlState?.selectedSubSection;
|
|
39
|
+
|
|
40
|
+
if (!selectedSection) {
|
|
41
|
+
return;
|
|
44
42
|
}
|
|
43
|
+
|
|
44
|
+
// Check if the selected section is a section or subsection
|
|
45
|
+
const opSectionToSelect = opLayout.getSections().find((section: ObjectPageSection) => section.getId() === selectedSection);
|
|
46
|
+
const isSubSectionId = !opSectionToSelect && this.getView().byId(selectedSection)?.isA("sap.uxap.ObjectPageSubSection");
|
|
47
|
+
const controller = this.getView().getController() as ObjectPageController;
|
|
48
|
+
|
|
49
|
+
// Determine the target to navigate to: prefer subsection if available
|
|
50
|
+
const navigationTarget = selectedSubSection ?? selectedSection;
|
|
51
|
+
const isNavigatingToSubSection = !!selectedSubSection || isSubSectionId;
|
|
52
|
+
|
|
53
|
+
// Determine target section ID for comparison (needed before pageReady)
|
|
54
|
+
const getTargetSectionId = (): string | undefined => {
|
|
55
|
+
if (isSubSectionId) {
|
|
56
|
+
return opLayout
|
|
57
|
+
.getSections()
|
|
58
|
+
.find((s) => s.getSubSections().some((ss) => ss.getId() === navigationTarget))
|
|
59
|
+
?.getId();
|
|
60
|
+
}
|
|
61
|
+
return selectedSection;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Wait for pageReady, then navigate and poll for UX rules reset
|
|
65
|
+
controller.pageReady
|
|
66
|
+
.waitPageReady()
|
|
67
|
+
.then(async () => {
|
|
68
|
+
const targetSectionId = getTargetSectionId();
|
|
69
|
+
|
|
70
|
+
// Skip if no valid target section (e.g., subsection's parent no longer exists)
|
|
71
|
+
// or already on target section - no navigation or polling needed
|
|
72
|
+
if (!targetSectionId || opLayout.getSelectedSection() === targetSectionId) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const performNavigation = (): void => {
|
|
77
|
+
// Guard: don't navigate if ObjectPageLayout has been destroyed
|
|
78
|
+
if (!opLayout.getDomRef()) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Guard: don't navigate if already on target section
|
|
83
|
+
const currentSection = opLayout.getSelectedSection();
|
|
84
|
+
if (currentSection === targetSectionId) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (isNavigatingToSubSection) {
|
|
89
|
+
// For subsection navigation, use navigateToSubSection which handles parent section activation
|
|
90
|
+
const localId = controller.getView().getLocalId(navigationTarget);
|
|
91
|
+
if (localId) {
|
|
92
|
+
controller.getExtensionAPI().navigateToSubSection(localId);
|
|
93
|
+
} else {
|
|
94
|
+
opLayout.scrollToSection(navigationTarget, 0);
|
|
95
|
+
}
|
|
96
|
+
} else if (opSectionToSelect && opSectionToSelect.getVisible() === true) {
|
|
97
|
+
// For section IDs, navigate if section is visible
|
|
98
|
+
opLayout.scrollToSection(selectedSection, 0);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// Skip navigation and polling on subsequent loads - only restore section during initial load
|
|
103
|
+
// This prevents overriding user's manual tab selection when state is restored later
|
|
104
|
+
const controllerWithFlag = controller as unknown as { skipViewStateSectionRestore?: boolean };
|
|
105
|
+
if (controllerWithFlag.skipViewStateSectionRestore === true) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Navigate immediately
|
|
110
|
+
performNavigation();
|
|
111
|
+
|
|
112
|
+
// Skip polling if already on target section
|
|
113
|
+
if (opLayout.getSelectedSection() === targetSectionId) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Poll to detect UX rules reset during initial load
|
|
118
|
+
// Uses shared utility from helpers/SectionNavigationHelper.ts
|
|
119
|
+
await pollForSectionStability({
|
|
120
|
+
getSelectedSection: () => opLayout.getSelectedSection(),
|
|
121
|
+
targetSectionId,
|
|
122
|
+
onResetDetected: performNavigation,
|
|
123
|
+
guardCheck: () => !!opLayout.getDomRef()
|
|
124
|
+
});
|
|
125
|
+
return; // Required by linter rule promise/always-return
|
|
126
|
+
})
|
|
127
|
+
.catch(() => {
|
|
128
|
+
// ViewState: ObjectPageLayout section state couldn't be applied
|
|
129
|
+
// Don't re-throw - allow page to continue even if navigation fails
|
|
130
|
+
});
|
|
45
131
|
},
|
|
46
132
|
refreshBinding: function (oOPLayout: ObjectPageLayout): void {
|
|
47
133
|
const oBindingContext = oOPLayout.getBindingContext() as ODataV4Context | undefined;
|
|
@@ -150,7 +236,7 @@ const ViewStateExtensionOverride = {
|
|
|
150
236
|
): void {
|
|
151
237
|
const opStateHandler = ViewStateExtensionOverride._getOPRefreshHandler.call(this, control);
|
|
152
238
|
if (opStateHandler) {
|
|
153
|
-
|
|
239
|
+
controlRefreshHandlers.refreshBinding = opStateHandler.refreshBinding;
|
|
154
240
|
}
|
|
155
241
|
},
|
|
156
242
|
|
package/src/sap/fe/templates/ObjectPage/view/fragments/EmphasizedFirstHeaderAction.fragment.xml
CHANGED
|
@@ -157,6 +157,7 @@
|
|
|
157
157
|
|
|
158
158
|
<template:if test="{= ${emphHeaderAction>type} !== 'Menu' }">
|
|
159
159
|
<Button
|
|
160
|
+
core:require="{FPM: 'sap/fe/core/helpers/FPMHelper'}"
|
|
160
161
|
id="{= ID.generate(['fe', (${emphHeaderAction>id} ? ${emphHeaderAction>id} : ${emphHeaderAction>key}), 'EmphasizedFirst']) }"
|
|
161
162
|
dt:designtime="not-adaptable"
|
|
162
163
|
text="{emphHeaderAction>text}"
|
|
@@ -35,16 +35,16 @@ OP: 'sap/fe/templates/ObjectPage/ObjectPageTemplating'
|
|
|
35
35
|
<template:if test="{= ${header>aiNotice} && ${header>aiNotice/visible} !== false }">
|
|
36
36
|
<macros:AINotice visible="{header>aiNotice/visible}" placementType="Bottom">
|
|
37
37
|
<macros:popoverContent>
|
|
38
|
-
<template:if test="{header>aiNotice/
|
|
38
|
+
<template:if test="{header>aiNotice/contentFragmentName}">
|
|
39
39
|
<template:then>
|
|
40
|
-
<Text text="{header>aiNotice/contentText}" />
|
|
41
|
-
</template:then>
|
|
42
|
-
<template:elseif test="{header>aiNotice/contentFragmentName}">
|
|
43
40
|
<fpm:CustomFragment
|
|
44
41
|
id="fe::expandedHeaderNotice"
|
|
45
42
|
fragmentName="{header>aiNotice/contentFragmentName}"
|
|
46
43
|
contextPath="{fullContextPath>}"
|
|
47
44
|
/>
|
|
45
|
+
</template:then>
|
|
46
|
+
<template:elseif test="{header>aiNotice/contentText}">
|
|
47
|
+
<Text text="{header>aiNotice/contentText}" />
|
|
48
48
|
</template:elseif>
|
|
49
49
|
</template:if>
|
|
50
50
|
</macros:popoverContent>
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
<template:if test="{= ${header>aiNotice} && ${header>aiNotice/visible} !== false }">
|
|
45
45
|
<macros:AINotice visible="{header>aiNotice/visible}" placementType="Bottom">
|
|
46
46
|
<macros:popoverContent>
|
|
47
|
-
<template:if test="{header>aiNotice/
|
|
47
|
+
<template:if test="{header>aiNotice/contentFragmentName}">
|
|
48
48
|
<template:then>
|
|
49
|
-
<Text text="{header>aiNotice/contentText}" />
|
|
50
|
-
</template:then>
|
|
51
|
-
<template:elseif test="{header>aiNotice/contentFragmentName}">
|
|
52
49
|
<fpm:CustomFragment
|
|
53
50
|
id="fe::snappedHeaderNotice"
|
|
54
51
|
fragmentName="{header>aiNotice/contentFragmentName}"
|
|
55
52
|
contextPath="{fullContextPath>}"
|
|
56
53
|
/>
|
|
54
|
+
</template:then>
|
|
55
|
+
<template:elseif test="{header>aiNotice/contentText}">
|
|
56
|
+
<Text text="{header>aiNotice/contentText}" />
|
|
57
57
|
</template:elseif>
|
|
58
58
|
</template:if>
|
|
59
59
|
</macros:popoverContent>
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
displayInline="true"
|
|
19
19
|
binding="{= OP.createBindingForAlternateAndSecondaryKeys((MODEL.getNavigationPath(${headerFacet>Target/$AnnotationPath@@UI.getDataModelObjectPath})))}"
|
|
20
20
|
>
|
|
21
|
-
<Title text="{headerFacet>Label}" />
|
|
21
|
+
<Title text="{headerFacet>Label}" level="H3" />
|
|
22
22
|
<Text renderWhitespace="true" class="sapMLabel" text="{addressPath>label@@MODEL.format}" />
|
|
23
23
|
</VBox>
|
|
24
24
|
</template:with>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
binding="{= OP.createBindingForAlternateAndSecondaryKeys(${headerFacet>Target/$AnnotationPath@@UI.getDataModelObjectPath})}"
|
|
20
20
|
>
|
|
21
21
|
<template:if test="{headerFacet>@@MODEL.label}">
|
|
22
|
-
<Title text="{headerFacet>@@MODEL.label}" class="sapUiSmallMarginBottom" />
|
|
22
|
+
<Title text="{headerFacet>@@MODEL.label}" level="H3" class="sapUiSmallMarginBottom" />
|
|
23
23
|
</template:if>
|
|
24
24
|
<template:with path="headerFacet>Target/$AnnotationPath" var="metaPath">
|
|
25
25
|
<macro:Contact
|
|
@@ -36,7 +36,7 @@ sap.ui.define(["sap/f/library", "sap/fe/core/library", "sap/fe/macros/library",
|
|
|
36
36
|
controls: [],
|
|
37
37
|
elements: [],
|
|
38
38
|
// eslint-disable-next-line no-template-curly-in-string
|
|
39
|
-
version: "1.
|
|
39
|
+
version: "1.148.1",
|
|
40
40
|
noLibraryCSS: true
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
42
|
});
|