@sapui5/sap.fe.templates 1.95.0 → 1.98.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/package.json +6 -3
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -1
  4. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +3 -3
  5. package/src/sap/fe/templates/ListComponent.js +1 -1
  6. package/src/sap/fe/templates/ListReport/Component.js +1 -1
  7. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
  8. package/src/sap/fe/templates/ListReport/ListReport.view.xml +6 -4
  9. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +136 -85
  10. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +7 -3
  11. package/src/sap/fe/templates/ListReport/overrides/MassEdit.js +95 -0
  12. package/src/sap/fe/templates/ListReport/overrides/Share.js +37 -22
  13. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +166 -33
  14. package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +23 -3
  15. package/src/sap/fe/templates/ObjectPage/Component.js +31 -18
  16. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +16 -1
  17. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +103 -88
  18. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +235 -174
  19. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -1
  20. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -1
  21. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -2
  22. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  23. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
  24. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
  25. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
  26. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
  27. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
  28. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
  29. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
  30. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +13 -1
  31. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +89 -72
  32. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +10 -6
  33. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +14 -11
  34. package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +26 -12
  35. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +2 -2
  36. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +26 -16
  37. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +5 -5
  38. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +24 -5
  39. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +1 -4
  40. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContentLazyLoader.fragment.xml +181 -0
  41. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +1 -0
  42. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +1 -0
  43. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +111 -8
  44. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +88 -32
  45. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +161 -144
  46. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
  47. package/src/sap/fe/templates/RootContainer/view/Fcl.view.xml +2 -1
  48. package/src/sap/fe/templates/RootContainer/view/NavContainer.view.xml +1 -1
  49. package/src/sap/fe/templates/TableScroller.js +1 -1
  50. package/src/sap/fe/templates/controls/Chart.fragment.xml +6 -2
  51. package/src/sap/fe/templates/controls/Table.fragment.xml +2 -0
  52. package/src/sap/fe/templates/library.js +2 -2
  53. package/src/sap/fe/templates/messagebundle.properties +25 -2
  54. package/src/sap/fe/templates/messagebundle_ar.properties +1 -1
  55. package/src/sap/fe/templates/messagebundle_bg.properties +1 -1
  56. package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
  57. package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
  58. package/src/sap/fe/templates/messagebundle_cy.properties +1 -1
  59. package/src/sap/fe/templates/messagebundle_da.properties +1 -1
  60. package/src/sap/fe/templates/messagebundle_de.properties +1 -1
  61. package/src/sap/fe/templates/messagebundle_el.properties +1 -1
  62. package/src/sap/fe/templates/messagebundle_en.properties +1 -1
  63. package/src/sap/fe/templates/messagebundle_en_GB.properties +1 -1
  64. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -2
  65. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -2
  66. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +2 -2
  67. package/src/sap/fe/templates/messagebundle_es.properties +9 -9
  68. package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
  69. package/src/sap/fe/templates/messagebundle_et.properties +1 -1
  70. package/src/sap/fe/templates/messagebundle_fi.properties +1 -1
  71. package/src/sap/fe/templates/messagebundle_fr.properties +2 -2
  72. package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -2
  73. package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
  74. package/src/sap/fe/templates/messagebundle_hr.properties +2 -2
  75. package/src/sap/fe/templates/messagebundle_hu.properties +1 -1
  76. package/src/sap/fe/templates/messagebundle_id.properties +1 -1
  77. package/src/sap/fe/templates/messagebundle_it.properties +1 -1
  78. package/src/sap/fe/templates/messagebundle_iw.properties +1 -1
  79. package/src/sap/fe/templates/messagebundle_ja.properties +2 -2
  80. package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
  81. package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
  82. package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
  83. package/src/sap/fe/templates/messagebundle_lv.properties +1 -1
  84. package/src/sap/fe/templates/messagebundle_ms.properties +1 -1
  85. package/src/sap/fe/templates/messagebundle_nl.properties +1 -1
  86. package/src/sap/fe/templates/messagebundle_no.properties +2 -2
  87. package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
  88. package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
  89. package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
  90. package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
  91. package/src/sap/fe/templates/messagebundle_ru.properties +1 -1
  92. package/src/sap/fe/templates/messagebundle_sh.properties +1 -1
  93. package/src/sap/fe/templates/messagebundle_sk.properties +1 -1
  94. package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
  95. package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
  96. package/src/sap/fe/templates/messagebundle_th.properties +1 -1
  97. package/src/sap/fe/templates/messagebundle_tr.properties +2 -2
  98. package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
  99. package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
  100. package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
  101. package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
  102. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderImage.fragment.xml +0 -24
  103. package/src/sap/fe/templates/RootContainer/view/PlaceholderLR.view.xml +0 -617
  104. package/src/sap/fe/templates/RootContainer/view/PlaceholderOP.view.xml +0 -588
  105. package/src/sap/fe/templates/controls/OverflowToolbarButtonHover.js +0 -25
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/uxap/BlockBase"], function(BlockBase) {
@@ -9,7 +9,7 @@ sap.ui.define(["sap/uxap/BlockBase"], function(BlockBase) {
9
9
  var SubSectionBlock = BlockBase.extend("sap.fe.templates.ObjectPage.controls.SubSectionBlock", {
10
10
  metadata: {
11
11
  properties: {
12
- "columnLayout": { type: "sap.uxap.BlockBaseColumnLayout", group: "Behavior", defaultValue: 4 }
12
+ columnLayout: { type: "sap.uxap.BlockBaseColumnLayout", group: "Behavior", defaultValue: 4 }
13
13
  },
14
14
  aggregations: {
15
15
  content: {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  // Provides the Design Time Metadata for the sap.m.FlexBox control
6
6
  sap.ui.define([], function() {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides the Design Time Metadata for the sap.fe.templates.ObjectPage.controls.StashableHBox control
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  // Provides the Design Time Metadata for the sap.fe.templates.ObjectPage.controls.StashableVBox control
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define(["sap/ui/fl/changeHandler/BaseRename"], function(BaseRename) {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
 
6
6
  sap.ui.define([], function() {
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant"], function(CommonUtils, SelectionVariant) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/navigation/SelectionVariant"], function(CommonUtils, SelectionVariant) {
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define([], function() {
6
6
  "use strict";
@@ -1,10 +1,22 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define([], function() {
6
6
  "use strict";
7
7
  return {
8
+ onBeforeContextUpdate: function(oListBinding, iCurrentContextIndex, iIndexUpdate) {
9
+ var oCurrentView = this.getView(),
10
+ oControlContext = oCurrentView && oCurrentView.getBindingContext(),
11
+ aCurrentContexts = oListBinding && oListBinding.getCurrentContexts(),
12
+ oPaginatorCurrentContext = aCurrentContexts[iCurrentContextIndex];
13
+
14
+ if (oPaginatorCurrentContext && oControlContext && oPaginatorCurrentContext.getPath() !== oControlContext.getPath()) {
15
+ // Prevent default update of context index in Object Page Paginator when view context is different from the paginator context.
16
+ return true;
17
+ }
18
+ },
19
+
8
20
  onContextUpdate: function(oContext) {
9
21
  var that = this;
10
22
  that.base._routing.navigateToContext(oContext, { callExtension: true });
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
5
  sap.ui.define(
6
6
  [
@@ -13,9 +13,9 @@ sap.ui.define(
13
13
  ],
14
14
  function(HashChanger, ModelHelper, SemanticKeyHelper, Filter, FilterOperator, Log) {
15
15
  "use strict";
16
- var bIsActiveEntity, bHasActiveEntity, bIsStickySupported, oUIModel, sEditMode;
16
+ var bIsStickySupported, oUIModel, sEditMode;
17
17
 
18
- function createFilterToFetchActiveContext(mKeyValues) {
18
+ function createFilterToFetchActiveContext(mKeyValues, bIsActiveEntityDefined) {
19
19
  var aFilters,
20
20
  aKeys = Object.keys(mKeyValues);
21
21
 
@@ -25,12 +25,16 @@ sap.ui.define(
25
25
  return new Filter(sKey, FilterOperator.EQ, sValue);
26
26
  }
27
27
  });
28
- var oActiveFilter = new Filter({
29
- filters: [new Filter("SiblingEntity/IsActiveEntity", FilterOperator.EQ, true)],
30
- and: false
31
- });
32
28
 
33
- aFilters.push(oActiveFilter);
29
+ if (bIsActiveEntityDefined) {
30
+ var oActiveFilter = new Filter({
31
+ filters: [new Filter("SiblingEntity/IsActiveEntity", FilterOperator.EQ, true)],
32
+ and: false
33
+ });
34
+
35
+ aFilters.push(oActiveFilter);
36
+ }
37
+
34
38
  var oCombinedFilter = new Filter(aFilters, true);
35
39
  return oCombinedFilter;
36
40
  }
@@ -68,22 +72,40 @@ sap.ui.define(
68
72
  // which is required to create a filter to fetch the relavant/correct active context
69
73
  // Example: {SalesOrderManage:{technicalID:technicalIDValue}, _Item:{technicalID:technicalIDValue}} etc.,
70
74
  var oPageMap = {};
75
+ var aPageHashArray = [];
71
76
  aCurrentHashArray.forEach(function(sPageHash) {
72
77
  var aKeyValues = sPageHash.substring(sPageHash.indexOf("(") + 1, sPageHash.length - 1).split(",");
73
78
  var mKeyValues = {};
74
- aKeyValues.forEach(function(sKeyAssignment) {
75
- var aParts = sKeyAssignment.split("="),
76
- sKeyValue = aParts[1];
79
+ var sPageHashName = sPageHash.split("(")[0];
80
+ oPageMap[sPageHashName] = {};
81
+ aPageHashArray.push(sPageHashName);
82
+ oPageMap[sPageHashName]["bIsActiveEntityDefined"] = true;
83
+ for (var i = 0; i < aKeyValues.length; i++) {
84
+ var sKeyAssignment = aKeyValues[i];
85
+ var aParts = sKeyAssignment.split("=");
86
+ var sKeyValue = aParts[1];
87
+ var sKey = aParts[0];
88
+ // In case if only one technical key is defined then the url just contains the technicalIDValue but not the technicalID
89
+ // Example: SalesOrderManage(ID=11111129-aaaa-bbbb-cccc-ddddeeeeffff,IsActiveEntity=false)/_Item(11111129-aaaa-bbbb-cccc-ddddeeeeffff)
90
+ // In above example SalesOrderItem has only one technical key defined, hence technicalID info is not present in the url
91
+ // Hence in such cases we get technical key and use them to fetch active context
92
+ if (sKeyAssignment.indexOf("=") === -1) {
93
+ var oMetaModel = oContext.getModel().getMetaModel();
94
+ var aTechnicalKeys = oMetaModel.getObject("/" + aPageHashArray.join("/") + "/$Type/$Key");
95
+ sKeyValue = aParts[0];
96
+ sKey = aTechnicalKeys[0];
97
+ oPageMap[sPageHash.split("(")[0]]["bIsActiveEntityDefined"] = false;
98
+ }
77
99
 
78
- if (aParts[0] !== "IsActiveEntity") {
100
+ if (sKey !== "IsActiveEntity") {
79
101
  if (sKeyValue.indexOf("'") === 0 && sKeyValue.lastIndexOf("'") === sKeyValue.length - 1) {
80
102
  // Remove the quotes from the value and decode special chars
81
103
  sKeyValue = decodeURIComponent(sKeyValue.substring(1, sKeyValue.length - 1));
82
104
  }
83
- mKeyValues[aParts[0]] = sKeyValue;
105
+ mKeyValues[sKey] = sKeyValue;
84
106
  }
85
- });
86
- oPageMap[sPageHash.split("(")[0]] = mKeyValues;
107
+ }
108
+ oPageMap[sPageHashName].mKeyValues = mKeyValues;
87
109
  });
88
110
 
89
111
  var oPageEntitySet = oEntitySet;
@@ -101,12 +123,13 @@ sap.ui.define(
101
123
  } else {
102
124
  oPageInfo.pageEntityName = sNavigationPath;
103
125
  }
104
- oPageInfo.mKeyValues = oPageMap[sNavigationPath];
126
+ oPageInfo.mKeyValues = oPageMap[sNavigationPath].mKeyValues;
127
+ oPageInfo.bIsActiveEntityDefined = oPageMap[sNavigationPath].bIsActiveEntityDefined;
105
128
  aPages.push(oPageInfo);
106
129
  });
107
130
 
108
131
  aPages.forEach(function(oPageInfo) {
109
- var oFilter = createFilterToFetchActiveContext(oPageInfo.mKeyValues);
132
+ var oFilter = createFilterToFetchActiveContext(oPageInfo.mKeyValues, oPageInfo.bIsActiveEntityDefined);
110
133
  aActiveContextpromises.push(getActiveContextPath(oController, oPageInfo.pageEntityName, oFilter));
111
134
  });
112
135
 
@@ -199,8 +222,6 @@ sap.ui.define(
199
222
  // 2. In case of draft enabled Sub Object Pages (where semantic bookmarking is not supported)
200
223
  var oViewData = oController.getView().getViewData();
201
224
  if (oContext && !bIsStickySupported && ((oViewData.viewLevel === 1 && !aSemanticKeys) || oViewData.viewLevel >= 2)) {
202
- bIsActiveEntity = oContext.getObject().IsActiveEntity;
203
- bHasActiveEntity = oContext.getObject().HasActiveEntity;
204
225
  oPromise = getActiveContextPaths(oContext, oController);
205
226
  return oPromise;
206
227
  } else {
@@ -208,34 +229,36 @@ sap.ui.define(
208
229
  }
209
230
  }
210
231
 
211
- /**
212
- * Get share URL.
213
- * @param sEditMode
214
- * @param bIsActiveEntity
215
- * @param bHasActiveEntity
216
- * @param bIsStickySupported
217
- * @param aActiveContextPaths
218
- * @returns {string} The share URL
219
- * @protected
220
- * @static
221
- */
222
- function getShareUrl(sEditMode, bIsActiveEntity, bHasActiveEntity, bIsStickySupported, aActiveContextPaths) {
223
- var sShareUrl;
224
- var sHash = HashChanger.getInstance().getHash();
225
- var sBasePath = HashChanger.getInstance().hrefForAppSpecificHash ? HashChanger.getInstance().hrefForAppSpecificHash("") : "";
226
- if (sEditMode === "Editable" && !bIsStickySupported && !bIsActiveEntity && bHasActiveEntity && aActiveContextPaths) {
227
- sShareUrl = sBasePath + aActiveContextPaths.join("/");
232
+ // /**
233
+ // * Get share URL.
234
+ // * @param sEditMode
235
+ // * @param bIsStickySupported
236
+ // * @param aActiveContextPaths
237
+ // * @returns {string} The share URL
238
+ // * @protected
239
+ // * @static
240
+ // */
241
+ function getShareUrl() {
242
+ var oUShellContainer = sap.ushell && sap.ushell.Container;
243
+ if (oUShellContainer) {
244
+ return oUShellContainer
245
+ .getFLPUrlAsync(true)
246
+ .then(function(sFLPUrl) {
247
+ return sFLPUrl;
248
+ })
249
+ .catch(function(sError) {
250
+ Log.error("Could not retrieve cFLP URL for the sharing dialog (dialog will not be opened)", sError);
251
+ });
228
252
  } else {
229
- sShareUrl = sHash ? sBasePath + sHash : window.location.hash;
253
+ return Promise.resolve(document.URL);
230
254
  }
231
- return sShareUrl;
232
255
  }
233
256
 
234
- function getJamUrl(sEditMode, bIsActiveEntity, bHasActiveEntity, bIsStickySupported, aActiveContextPaths) {
257
+ function getJamUrl(sEditMode, bIsStickySupported, aActiveContextPaths) {
235
258
  var sJamUrl;
236
259
  var sHash = HashChanger.getInstance().getHash();
237
260
  var sBasePath = HashChanger.getInstance().hrefForAppSpecificHash ? HashChanger.getInstance().hrefForAppSpecificHash("") : "";
238
- if (sEditMode === "Editable" && !bIsStickySupported && !bIsActiveEntity && bHasActiveEntity && aActiveContextPaths) {
261
+ if (sEditMode === "Editable" && !bIsStickySupported && aActiveContextPaths) {
239
262
  sJamUrl = sBasePath + aActiveContextPaths.join("/");
240
263
  } else {
241
264
  sJamUrl = sHash ? sBasePath + sHash : window.location.hash;
@@ -263,38 +286,32 @@ sap.ui.define(
263
286
  oUIModel = this.base.getView().getModel("ui");
264
287
  sEditMode = oUIModel.getProperty("/editMode");
265
288
  return fetchActiveContextPaths(oContext, that.base.getView().getController()).then(function(aActiveContextPaths) {
266
- var aPromises = [];
267
- aPromises.push(
268
- that.base
269
- .getView()
270
- .getController()
271
- ._getPageTitleInformation()
272
- );
273
- aPromises.push(getJamUrl(sEditMode, bIsActiveEntity, bHasActiveEntity, bIsStickySupported, aActiveContextPaths));
274
- return Promise.all(aPromises).then(function(oData) {
275
- var oPageTitleInfo = oData[0];
276
- var sJamUrl = oData[1];
277
- var sTitle = oPageTitleInfo.title;
278
- var sObjectSubtitle = oPageTitleInfo.subtitle.toString();
279
- if (sObjectSubtitle) {
280
- sTitle = sTitle + " - " + sObjectSubtitle;
281
- }
282
- oShareMetadata.tile = {
283
- title: oPageTitleInfo.title,
284
- subtitle: oPageTitleInfo.subtitle.toString()
285
- };
286
- oShareMetadata.email.title = sTitle;
287
- oShareMetadata.title = sTitle;
288
- oShareMetadata.url = getShareUrl(
289
- sEditMode,
290
- bIsActiveEntity,
291
- bHasActiveEntity,
292
- bIsStickySupported,
293
- aActiveContextPaths
294
- );
295
- oShareMetadata.jam.url = sJamUrl;
296
- return oShareMetadata;
297
- });
289
+ var oPageTitleInfo = that.base
290
+ .getView()
291
+ .getController()
292
+ ._getPageTitleInformation();
293
+
294
+ return Promise.all([getJamUrl(sEditMode, bIsStickySupported, aActiveContextPaths), getShareUrl()])
295
+ .then(function(oData) {
296
+ var sTitle = oPageTitleInfo.title;
297
+ var sObjectSubtitle = oPageTitleInfo.subtitle.toString();
298
+ if (sObjectSubtitle) {
299
+ sTitle = sTitle + " - " + sObjectSubtitle;
300
+ }
301
+ oShareMetadata.tile = {
302
+ title: oPageTitleInfo.title,
303
+ subtitle: oPageTitleInfo.subtitle.toString()
304
+ };
305
+ oShareMetadata.email.title = sTitle;
306
+ oShareMetadata.title = sTitle;
307
+ oShareMetadata.jam.url = oData[0];
308
+ oShareMetadata.url = oData[1];
309
+
310
+ return oShareMetadata;
311
+ })
312
+ .catch(function(error) {
313
+ Log.error(error);
314
+ });
298
315
  });
299
316
  }
300
317
  };
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
3
+ * (c) Copyright 2009-2022 SAP SE. All rights reserved.
4
4
  */
5
- sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreLibrary, CommonUtils) {
5
+ sap.ui.define(["sap/fe/core/library", "sap/fe/core/helpers/KeepAliveHelper"], function(CoreLibrary, KeepAliveHelper) {
6
6
  "use strict";
7
7
 
8
8
  var VariantManagement = CoreLibrary.VariantManagement;
@@ -42,7 +42,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreL
42
42
  },
43
43
  adaptBindingRefreshControls: function(aControls) {
44
44
  var oView = this.getView(),
45
- sRefreshStrategy = CommonUtils.getViewRefreshInfo(oView),
45
+ sRefreshStrategy = KeepAliveHelper.getViewRefreshInfo(oView),
46
46
  oController = oView.getController(),
47
47
  aControlsToRefresh = [];
48
48
 
@@ -52,10 +52,14 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/core/CommonUtils"], function(CoreL
52
52
  }
53
53
  if (sRefreshStrategy !== "includingDependents") {
54
54
  var aViewControls = oController._findTables();
55
- aControlsToRefresh = aControlsToRefresh.concat(CommonUtils.getControlsForRefresh(oView, aViewControls) || []);
55
+ aControlsToRefresh = aControlsToRefresh.concat(KeepAliveHelper.getControlsForRefresh(oView, aViewControls) || []);
56
56
  }
57
-
58
- Array.prototype.push.apply(aControls, aControlsToRefresh);
57
+ return aControlsToRefresh.reduce(function(aPrevControls, oControl) {
58
+ if (aPrevControls.indexOf(oControl) === -1) {
59
+ aPrevControls.push(oControl);
60
+ }
61
+ return aPrevControls;
62
+ }, aControls);
59
63
  }
60
64
  };
61
65
  });
@@ -9,6 +9,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
9
9
  var isStickySessionSupported = EntitySetHelper.isStickySessionSupported;
10
10
  var formatValueRecursively = FieldTemplating.formatValueRecursively;
11
11
  var addTextArrangementToBindingExpression = FieldTemplating.addTextArrangementToBindingExpression;
12
+ var Entity = BindingHelper.Entity;
12
13
  var Draft = BindingHelper.Draft;
13
14
  var UI = BindingHelper.UI;
14
15
  var compileBinding = BindingExpression.compileBinding;
@@ -35,31 +36,33 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
35
36
 
36
37
  /**
37
38
  * Compute the title for the object page.
38
- *
39
39
  * @param oHeaderInfo The @UI.HeaderInfo annotation content
40
40
  * @param oViewData The view data object we're currently on
41
41
  * @param fullContextPath The full context path used to reach that object page
42
+ * @param oDraftRoot
42
43
  * @returns The binding expression for the object page title
43
44
  */
44
- var getExpressionForTitle = function (oHeaderInfo, oViewData, fullContextPath) {
45
- var _oHeaderInfo$Title, _oHeaderInfo$Title2, _oHeaderInfo$Title2$V, _oHeaderInfo$Title2$V2, _oHeaderInfo$Title2$V3, _oHeaderInfo$Title2$V4, _oHeaderInfo$Title2$V5, _oHeaderInfo$Title2$V6, _oHeaderInfo$Title2$V7;
45
+ var getExpressionForTitle = function (oHeaderInfo, oViewData, fullContextPath, oDraftRoot) {
46
+ var _oHeaderInfo$Title, _oHeaderInfo$Title2, _oHeaderInfo$Title3, _oHeaderInfo$Title3$V, _oHeaderInfo$Title3$V2, _oHeaderInfo$Title3$V3, _oHeaderInfo$Title3$V4, _oHeaderInfo$Title3$V5, _oHeaderInfo$Title3$V6, _oHeaderInfo$Title3$V7;
46
47
 
47
- var titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, null, oViewData.entitySet);
48
- var titleWithHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE", oViewData.resourceBundle, null, oViewData.entitySet);
49
- var titleForActiveHeaderNoHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle);
50
- var titleValueExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title = oHeaderInfo.Title) === null || _oHeaderInfo$Title === void 0 ? void 0 : _oHeaderInfo$Title.Value);
48
+ var titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, undefined, oViewData.entitySet);
49
+ var titleWithHeaderInfo = CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE", oViewData.resourceBundle, undefined, oViewData.entitySet);
50
+ var oEmptyHeaderInfoTitle = (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === undefined || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : oHeaderInfo.Title) === "" || (oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title = oHeaderInfo.Title) === null || _oHeaderInfo$Title === void 0 ? void 0 : _oHeaderInfo$Title.Value) === "";
51
+ var titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle) : "";
52
+ var titleValueExpression = annotationExpression(oHeaderInfo === null || oHeaderInfo === void 0 ? void 0 : (_oHeaderInfo$Title2 = oHeaderInfo.Title) === null || _oHeaderInfo$Title2 === void 0 ? void 0 : _oHeaderInfo$Title2.Value);
51
53
 
52
- if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Title2 = oHeaderInfo.Title) !== null && _oHeaderInfo$Title2 !== void 0 && (_oHeaderInfo$Title2$V = _oHeaderInfo$Title2.Value) !== null && _oHeaderInfo$Title2$V !== void 0 && (_oHeaderInfo$Title2$V2 = _oHeaderInfo$Title2$V.$target) !== null && _oHeaderInfo$Title2$V2 !== void 0 && (_oHeaderInfo$Title2$V3 = _oHeaderInfo$Title2$V2.annotations) !== null && _oHeaderInfo$Title2$V3 !== void 0 && (_oHeaderInfo$Title2$V4 = _oHeaderInfo$Title2$V3.Common) !== null && _oHeaderInfo$Title2$V4 !== void 0 && (_oHeaderInfo$Title2$V5 = _oHeaderInfo$Title2$V4.Text) !== null && _oHeaderInfo$Title2$V5 !== void 0 && (_oHeaderInfo$Title2$V6 = _oHeaderInfo$Title2$V5.annotations) !== null && _oHeaderInfo$Title2$V6 !== void 0 && (_oHeaderInfo$Title2$V7 = _oHeaderInfo$Title2$V6.UI) !== null && _oHeaderInfo$Title2$V7 !== void 0 && _oHeaderInfo$Title2$V7.TextArrangement) {
54
+ if (oHeaderInfo !== null && oHeaderInfo !== void 0 && (_oHeaderInfo$Title3 = oHeaderInfo.Title) !== null && _oHeaderInfo$Title3 !== void 0 && (_oHeaderInfo$Title3$V = _oHeaderInfo$Title3.Value) !== null && _oHeaderInfo$Title3$V !== void 0 && (_oHeaderInfo$Title3$V2 = _oHeaderInfo$Title3$V.$target) !== null && _oHeaderInfo$Title3$V2 !== void 0 && (_oHeaderInfo$Title3$V3 = _oHeaderInfo$Title3$V2.annotations) !== null && _oHeaderInfo$Title3$V3 !== void 0 && (_oHeaderInfo$Title3$V4 = _oHeaderInfo$Title3$V3.Common) !== null && _oHeaderInfo$Title3$V4 !== void 0 && (_oHeaderInfo$Title3$V5 = _oHeaderInfo$Title3$V4.Text) !== null && _oHeaderInfo$Title3$V5 !== void 0 && (_oHeaderInfo$Title3$V6 = _oHeaderInfo$Title3$V5.annotations) !== null && _oHeaderInfo$Title3$V6 !== void 0 && (_oHeaderInfo$Title3$V7 = _oHeaderInfo$Title3$V6.UI) !== null && _oHeaderInfo$Title3$V7 !== void 0 && _oHeaderInfo$Title3$V7.TextArrangement) {
53
55
  // In case an explicit text arrangement was set we make use of it in the description as well
54
56
  titleValueExpression = addTextArrangementToBindingExpression(titleValueExpression, fullContextPath);
55
57
  }
56
58
 
57
59
  titleValueExpression = formatValueRecursively(titleValueExpression, fullContextPath); // If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
58
60
 
59
- var createModeTitle = oHeaderInfo !== null && oHeaderInfo !== void 0 && oHeaderInfo.TypeName ? concat(titleWithHeaderInfo, " ", annotationExpression(oHeaderInfo.TypeName.toString())) : titleNoHeaderInfo;
61
+ var createModeTitle = oHeaderInfo !== null && oHeaderInfo !== void 0 && oHeaderInfo.TypeName ? concat(titleWithHeaderInfo, ": ", annotationExpression(oHeaderInfo.TypeName.toString())) : titleNoHeaderInfo;
62
+ var activeExpression = oDraftRoot ? Entity.IsActive : true;
60
63
  return compileBinding(ifElse( // If Create Mode && Empty expression
61
64
  and(UI.IsCreateMode, titleValueExpression && isEmpty(titleValueExpression)), createModeTitle, // Otherwise show the default expression
62
- ifElse(titleValueExpression && isEmpty(titleValueExpression), titleForActiveHeaderNoHeaderInfo, titleValueExpression)));
65
+ ifElse(and(activeExpression, titleValueExpression && isEmpty(titleValueExpression)), titleForActiveHeaderNoHeaderInfo, titleValueExpression)));
63
66
  };
64
67
  /**
65
68
  * Retrieves the expression for the description of an object page.
@@ -114,4 +117,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/
114
117
  _exports.getExpressionForSaveButton = getExpressionForSaveButton;
115
118
  return _exports;
116
119
  }, false);
117
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwidGl0bGVOb0hlYWRlckluZm8iLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJlbnRpdHlTZXQiLCJ0aXRsZVdpdGhIZWFkZXJJbmZvIiwidGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8iLCJ0aXRsZVZhbHVlRXhwcmVzc2lvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVGl0bGUiLCJWYWx1ZSIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiY3JlYXRlTW9kZVRpdGxlIiwiVHlwZU5hbWUiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvbXBpbGVCaW5kaW5nIiwiaWZFbHNlIiwiYW5kIiwiSXNDcmVhdGVNb2RlIiwiaXNFbXB0eSIsImdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiIsImJpbmRpbmdFeHByZXNzaW9uIiwiRGVzY3JpcHRpb24iLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsInNhdmVCdXR0b25UZXh0IiwiY3JlYXRlQnV0dG9uVGV4dCIsInNhdmVFeHByZXNzaW9uIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJJc0NyZWF0ZU1vZGVTdGlja3kiLCJEcmFmdCIsIklzTmV3T2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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K0g7QUFDOUg7QUFDQWEsTUFBQUEsaUJBQWlCLEdBQUdaLHFDQUFxQyxDQUFDWSxpQkFBRCxFQUFvQjlCLGVBQXBCLENBQXpEO0FBQ0E7O0FBRUQsV0FBT3dCLGNBQWMsQ0FBQ0wsc0JBQXNCLENBQUNXLGlCQUFELEVBQW9COUIsZUFBcEIsQ0FBdkIsQ0FBckI7QUFDQSxHQVhNO0FBYVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTWdDLDBCQUEwQixHQUFHLFVBQVNqQyxTQUFULEVBQThCQyxlQUE5QixFQUErRjtBQUN4SSxRQUFNaUMsY0FBYyxHQUFHL0IsV0FBVyxDQUFDQyxpQkFBWixDQUE4Qix1QkFBOUIsRUFBdURKLFNBQVMsQ0FBQ0ssY0FBakUsQ0FBdkI7QUFDQSxRQUFNOEIsZ0JBQWdCLEdBQUdoQyxXQUFXLENBQUNDLGlCQUFaLENBQThCLHlCQUE5QixFQUF5REosU0FBUyxDQUFDSyxjQUFuRSxDQUF6QjtBQUNBLFFBQUkrQixjQUFKOztBQUNBLFFBQUlDLHdCQUF3QixDQUFDcEMsZUFBZSxDQUFDcUMsaUJBQWpCLENBQTVCLEVBQWlFO0FBQ2hFO0FBQ0FGLE1BQUFBLGNBQWMsR0FBR1YsTUFBTSxDQUFDVCxFQUFFLENBQUNzQixrQkFBSixFQUF3QkosZ0JBQXhCLEVBQTBDRCxjQUExQyxDQUF2QjtBQUNBLEtBSEQsTUFHTztBQUNOO0FBQ0FFLE1BQUFBLGNBQWMsR0FBR1YsTUFBTSxDQUFDYyxLQUFLLENBQUNDLFdBQVAsRUFBb0JOLGdCQUFwQixFQUFzQ0QsY0FBdEMsQ0FBdkI7QUFDQTs7QUFDRCxXQUFPVCxjQUFjLENBQUNXLGNBQUQsQ0FBckI7QUFDQSxHQVpNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB7XG5cdGFuZCxcblx0aWZFbHNlLFxuXHRpc0VtcHR5LFxuXHRjb25jYXQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0QmluZGluZ0V4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IFVJLCBEcmFmdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbHMsIFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgeyBIZWFkZXJJbmZvVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24sIGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL1VJXCI7XG5pbXBvcnQgeyBpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcblxuLy9gYGBtZXJtYWlkXG4vLyBncmFwaCBURFxuLy8gQVtPYmplY3QgUGFnZSBUaXRsZV0gLS0+fEdldCBEYXRhRmllbGQgVmFsdWV8IEN7RXZhbHVhdGUgQ3JlYXRlIE1vZGV9XG4vLyBDIC0tPnxJbiBDcmVhdGUgTW9kZXwgRHtJcyBEYXRhRmllbGQgVmFsdWUgZW1wdHl9XG4vLyBEIC0tPnxZZXN8IEZ7SXMgdGhlcmUgYSBUeXBlTmFtZX1cbi8vIEYgLS0+fFllc3wgR1tJcyB0aGVyZSBhbiBjdXN0b20gdGl0bGVdXG4vLyBHIC0tPnxZZXN8IEcxW1Nob3cgdGhlIGN1c3RvbSB0aXRsZSArICdUeXBlTmFtZSddXG4vLyBHIC0tPnxOb3wgRzJbRGlzcGxheSB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnXVxuLy8gRiAtLT58Tm98IEhbSXMgdGhlcmUgYSBjdXN0b20gdGl0bGVdXG4vLyBIIC0tPnxZZXN8IElbU2hvdyB0aGUgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58Tm98IEpbU2hvdyB0aGUgZGVmYXVsdCAnVW5hbW5lZCBPYmplY3QnXVxuLy8gRCAtLT58Tm98IEVcbi8vIEMgLS0+fE5vdCBpbiBjcmVhdGUgbW9kZXwgRVtTaG93IERhdGFGaWVsZCBWYWx1ZV1cbi8vIGBgYFxuLyoqXG4gKiBDb21wdXRlIHRoZSB0aXRsZSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSB2aWV3IGRhdGEgb2JqZWN0IHdlJ3JlIGN1cnJlbnRseSBvblxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgdGl0bGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JUaXRsZSA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGNvbnN0IHRpdGxlTm9IZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX05FV19PQkpFQ1RcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlLCBudWxsLCBvVmlld0RhdGEuZW50aXR5U2V0KTtcblxuXHRjb25zdCB0aXRsZVdpdGhIZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfT0JKRUNUX1BBR0VfSEVBREVSX1RJVExFXCIsXG5cdFx0b1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlLFxuXHRcdG51bGwsXG5cdFx0b1ZpZXdEYXRhLmVudGl0eVNldFxuXHQpO1xuXG5cdGNvbnN0IHRpdGxlRm9yQWN0aXZlSGVhZGVyTm9IZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XCJUX0FOTk9UQVRJT05fSEVMUEVSX0RFRkFVTFRfT0JKRUNUX1BBR0VfSEVBREVSX1RJVExFX05PX0hFQURFUl9JTkZPXCIsXG5cdFx0b1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlXG5cdCk7XG5cblx0bGV0IHRpdGxlVmFsdWVFeHByZXNzaW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlKTtcblx0aWYgKChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHQvLyBJbiBjYXNlIGFuIGV4cGxpY2l0IHRleHQgYXJyYW5nZW1lbnQgd2FzIHNldCB3ZSBtYWtlIHVzZSBvZiBpdCBpbiB0aGUgZGVzY3JpcHRpb24gYXMgd2VsbFxuXHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZm9ybWF0VmFsdWVSZWN1cnNpdmVseSh0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblxuXHQvLyBJZiB0aGVyZSBpcyBhIFR5cGVOYW1lIGRlZmluZWQsIHNob3cgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJywgb3RoZXJ3aXNlIHNob3cgdGhlIGN1c3RvbSB0aXRsZSBvciB0aGUgZGVmYXVsdCAnTmV3IG9iamVjdCdcblx0Y29uc3QgY3JlYXRlTW9kZVRpdGxlID0gb0hlYWRlckluZm8/LlR5cGVOYW1lXG5cdFx0PyBjb25jYXQodGl0bGVXaXRoSGVhZGVySW5mbywgXCIgXCIsIGFubm90YXRpb25FeHByZXNzaW9uKG9IZWFkZXJJbmZvLlR5cGVOYW1lLnRvU3RyaW5nKCkpKVxuXHRcdDogdGl0bGVOb0hlYWRlckluZm87XG5cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdGlmRWxzZShcblx0XHRcdC8vIElmIENyZWF0ZSBNb2RlICYmIEVtcHR5IGV4cHJlc3Npb25cblx0XHRcdGFuZChVSS5Jc0NyZWF0ZU1vZGUsIHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSxcblxuXHRcdFx0Y3JlYXRlTW9kZVRpdGxlLFxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHNob3cgdGhlIGRlZmF1bHQgZXhwcmVzc2lvblxuXHRcdFx0aWZFbHNlKHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pLCB0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbywgdGl0bGVWYWx1ZUV4cHJlc3Npb24pXG5cdFx0KVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGxldCBiaW5kaW5nRXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRiaW5kaW5nRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24oYmluZGluZ0V4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZm9ybWF0VmFsdWVSZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uKG9WaWV3RGF0YTogVmlld0RhdGEsIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGxldCBzYXZlRXhwcmVzc2lvbjtcblx0aWYgKGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoc2F2ZUV4cHJlc3Npb24pO1xufTtcbiJdfQ==
120
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwib0RyYWZ0Um9vdCIsInRpdGxlTm9IZWFkZXJJbmZvIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInJlc291cmNlQnVuZGxlIiwidW5kZWZpbmVkIiwiZW50aXR5U2V0IiwidGl0bGVXaXRoSGVhZGVySW5mbyIsIm9FbXB0eUhlYWRlckluZm9UaXRsZSIsIlRpdGxlIiwiVmFsdWUiLCJ0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0VmFsdWVSZWN1cnNpdmVseSIsImNyZWF0ZU1vZGVUaXRsZSIsIlR5cGVOYW1lIiwiY29uY2F0IiwidG9TdHJpbmciLCJhY3RpdmVFeHByZXNzaW9uIiwiRW50aXR5IiwiSXNBY3RpdmUiLCJjb21waWxlQmluZGluZyIsImlmRWxzZSIsImFuZCIsIklzQ3JlYXRlTW9kZSIsImlzRW1wdHkiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJiaW5kaW5nRXhwcmVzc2lvbiIsIkRlc2NyaXB0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24iLCJzYXZlQnV0dG9uVGV4dCIsImNyZWF0ZUJ1dHRvblRleHQiLCJzYXZlRXhwcmVzc2lvbiIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiSXNDcmVhdGVNb2RlU3RpY2t5IiwiRHJhZnQiLCJJc05ld09iamVjdCJdLCJtYXBwaW5ncyI6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Y0FBSjs7QUFDQSxRQUFJQyx3QkFBd0IsQ0FBQzFDLGVBQWUsQ0FBQzJDLGlCQUFqQixDQUE1QixFQUFpRTtBQUNoRTtBQUNBRixNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ1osRUFBRSxDQUFDeUIsa0JBQUosRUFBd0JKLGdCQUF4QixFQUEwQ0QsY0FBMUMsQ0FBdkI7QUFDQSxLQUhELE1BR087QUFDTjtBQUNBRSxNQUFBQSxjQUFjLEdBQUdWLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQyxXQUFQLEVBQW9CTixnQkFBcEIsRUFBc0NELGNBQXRDLENBQXZCO0FBQ0E7O0FBQ0QsV0FBT1QsY0FBYyxDQUFDVyxjQUFELENBQXJCO0FBQ0EsR0FaTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0dGVycyBmb3IgdGhlIE9iamVjdCBQYWdlXG5pbXBvcnQge1xuXHRhbmQsXG5cdGlmRWxzZSxcblx0aXNFbXB0eSxcblx0Y29uY2F0LFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdEJpbmRpbmdFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBVSSwgRHJhZnQsIEVudGl0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmVcIjtcbmltcG9ydCB7IEhlYWRlckluZm9UeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiwgZm9ybWF0VmFsdWVSZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHsgRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0VudGl0eVNldEhlbHBlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VCdW5kbGUgfSBmcm9tIFwic2FwL2Jhc2UvaTE4blwiO1xuXG50eXBlIFZpZXdEYXRhID0ge1xuXHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGU7XG5cdGVudGl0eVNldDogc3RyaW5nO1xufTtcblxuLy9gYGBtZXJtYWlkXG4vLyBncmFwaCBURFxuLy8gQVtPYmplY3QgUGFnZSBUaXRsZV0gLS0+fEdldCBEYXRhRmllbGQgVmFsdWV8IEN7RXZhbHVhdGUgQ3JlYXRlIE1vZGV9XG4vLyBDIC0tPnxJbiBDcmVhdGUgTW9kZXwgRHtJcyBEYXRhRmllbGQgVmFsdWUgZW1wdHl9XG4vLyBEIC0tPnxZZXN8IEZ7SXMgdGhlcmUgYSBUeXBlTmFtZX1cbi8vIEYgLS0+fFllc3wgR1tJcyB0aGVyZSBhbiBjdXN0b20gdGl0bGVdXG4vLyBHIC0tPnxZZXN8IEcxW1Nob3cgdGhlIGN1c3RvbSB0aXRsZSArICdUeXBlTmFtZSddXG4vLyBHIC0tPnxOb3wgRzJbRGlzcGxheSB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnXVxuLy8gRiAtLT58Tm98IEhbSXMgdGhlcmUgYSBjdXN0b20gdGl0bGVdXG4vLyBIIC0tPnxZZXN8IElbU2hvdyB0aGUgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58Tm98IEpbU2hvdyB0aGUgZGVmYXVsdCAnVW5hbW5lZCBPYmplY3QnXVxuLy8gRCAtLT58Tm98IEVcbi8vIEMgLS0+fE5vdCBpbiBjcmVhdGUgbW9kZXwgRVtTaG93IERhdGFGaWVsZCBWYWx1ZV1cbi8vIGBgYFxuLyoqXG4gKiBDb21wdXRlIHRoZSB0aXRsZSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIG9IZWFkZXJJbmZvIFRoZSBAVUkuSGVhZGVySW5mbyBhbm5vdGF0aW9uIGNvbnRlbnRcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIHZpZXcgZGF0YSBvYmplY3Qgd2UncmUgY3VycmVudGx5IG9uXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSBvRHJhZnRSb290XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgdGl0bGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JUaXRsZSA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b0RyYWZ0Um9vdDogT2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgdGl0bGVOb0hlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfTkVXX09CSkVDVFwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUsIHVuZGVmaW5lZCwgb1ZpZXdEYXRhLmVudGl0eVNldCk7XG5cblx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0b1ZpZXdEYXRhLmVudGl0eVNldFxuXHQpO1xuXG5cdGNvbnN0IG9FbXB0eUhlYWRlckluZm9UaXRsZSA9XG5cdFx0b0hlYWRlckluZm8/LlRpdGxlID09PSB1bmRlZmluZWQgfHwgb0hlYWRlckluZm8/LlRpdGxlID09PSBcIlwiIHx8IChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSA9PT0gXCJcIjtcblxuXHRjb25zdCB0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyA9ICFvRW1wdHlIZWFkZXJJbmZvVGl0bGVcblx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRV9OT19IRUFERVJfSU5GT1wiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpXG5cdFx0OiBcIlwiO1xuXG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24odGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHR0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkodGl0bGVWYWx1ZUV4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cblx0Ly8gSWYgdGhlcmUgaXMgYSBUeXBlTmFtZSBkZWZpbmVkLCBzaG93IHRoZSBkZWZhdWx0IHRpdGxlICdOZXcgKyBUeXBlTmFtZScsIG90aGVyd2lzZSBzaG93IHRoZSBjdXN0b20gdGl0bGUgb3IgdGhlIGRlZmF1bHQgJ05ldyBvYmplY3QnXG5cdGNvbnN0IGNyZWF0ZU1vZGVUaXRsZSA9IG9IZWFkZXJJbmZvPy5UeXBlTmFtZVxuXHRcdD8gY29uY2F0KHRpdGxlV2l0aEhlYWRlckluZm8sIFwiOiBcIiwgYW5ub3RhdGlvbkV4cHJlc3Npb24ob0hlYWRlckluZm8uVHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblx0Y29uc3QgYWN0aXZlRXhwcmVzc2lvbiA9IG9EcmFmdFJvb3QgPyBFbnRpdHkuSXNBY3RpdmUgOiB0cnVlO1xuXG5cdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRpZkVsc2UoXG5cdFx0XHQvLyBJZiBDcmVhdGUgTW9kZSAmJiBFbXB0eSBleHByZXNzaW9uXG5cdFx0XHRhbmQoVUkuSXNDcmVhdGVNb2RlLCB0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSksXG5cblx0XHRcdGNyZWF0ZU1vZGVUaXRsZSxcblx0XHRcdC8vIE90aGVyd2lzZSBzaG93IHRoZSBkZWZhdWx0IGV4cHJlc3Npb25cblx0XHRcdGlmRWxzZShcblx0XHRcdFx0YW5kKGFjdGl2ZUV4cHJlc3Npb24sIHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSxcblx0XHRcdFx0dGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8sXG5cdFx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPiB7XG5cdGxldCBiaW5kaW5nRXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRiaW5kaW5nRXhwcmVzc2lvbiA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24oYmluZGluZ0V4cHJlc3Npb24sIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoZm9ybWF0VmFsdWVSZWN1cnNpdmVseShiaW5kaW5nRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uKG9WaWV3RGF0YTogVmlld0RhdGEsIGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIsIG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSk7XG5cdGxldCBzYXZlRXhwcmVzc2lvbjtcblx0aWYgKGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoc2F2ZUV4cHJlc3Npb24pO1xufTtcbiJdfQ==
@@ -8,13 +8,19 @@ import {
8
8
  compileBinding,
9
9
  BindingExpression
10
10
  } from "sap/fe/core/helpers/BindingExpression";
11
- import { UI, Draft } from "sap/fe/core/converters/helpers/BindingHelper";
12
- import { CommonUtils, ViewData } from "sap/fe/core";
11
+ import { UI, Draft, Entity } from "sap/fe/core/converters/helpers/BindingHelper";
12
+ import { CommonUtils } from "sap/fe/core";
13
13
  import { HeaderInfoType } from "@sap-ux/vocabularies-types";
14
14
  import { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
15
15
  import { addTextArrangementToBindingExpression, formatValueRecursively } from "sap/fe/macros/field/FieldTemplating";
16
16
  import { DataFieldTypes } from "@sap-ux/vocabularies-types/dist/generated/UI";
17
17
  import { isStickySessionSupported } from "sap/fe/core/templating/EntitySetHelper";
18
+ import { ResourceBundle } from "sap/base/i18n";
19
+
20
+ type ViewData = {
21
+ resourceBundle: ResourceBundle;
22
+ entitySet: string;
23
+ };
18
24
 
19
25
  //```mermaid
20
26
  // graph TD
@@ -32,30 +38,33 @@ import { isStickySessionSupported } from "sap/fe/core/templating/EntitySetHelper
32
38
  // ```
33
39
  /**
34
40
  * Compute the title for the object page.
35
- *
36
41
  * @param oHeaderInfo The @UI.HeaderInfo annotation content
37
42
  * @param oViewData The view data object we're currently on
38
43
  * @param fullContextPath The full context path used to reach that object page
44
+ * @param oDraftRoot
39
45
  * @returns The binding expression for the object page title
40
46
  */
41
47
  export const getExpressionForTitle = function(
42
48
  oHeaderInfo: HeaderInfoType | undefined,
43
49
  oViewData: ViewData,
44
- fullContextPath: DataModelObjectPath
50
+ fullContextPath: DataModelObjectPath,
51
+ oDraftRoot: Object | undefined
45
52
  ): BindingExpression<string> {
46
- const titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, null, oViewData.entitySet);
53
+ const titleNoHeaderInfo = CommonUtils.getTranslatedText("T_NEW_OBJECT", oViewData.resourceBundle, undefined, oViewData.entitySet);
47
54
 
48
55
  const titleWithHeaderInfo = CommonUtils.getTranslatedText(
49
56
  "T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE",
50
57
  oViewData.resourceBundle,
51
- null,
58
+ undefined,
52
59
  oViewData.entitySet
53
60
  );
54
61
 
55
- const titleForActiveHeaderNoHeaderInfo = CommonUtils.getTranslatedText(
56
- "T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO",
57
- oViewData.resourceBundle
58
- );
62
+ const oEmptyHeaderInfoTitle =
63
+ oHeaderInfo?.Title === undefined || oHeaderInfo?.Title === "" || (oHeaderInfo?.Title as DataFieldTypes)?.Value === "";
64
+
65
+ const titleForActiveHeaderNoHeaderInfo = !oEmptyHeaderInfoTitle
66
+ ? CommonUtils.getTranslatedText("T_ANNOTATION_HELPER_DEFAULT_OBJECT_PAGE_HEADER_TITLE_NO_HEADER_INFO", oViewData.resourceBundle)
67
+ : "";
59
68
 
60
69
  let titleValueExpression = annotationExpression((oHeaderInfo?.Title as DataFieldTypes)?.Value);
61
70
  if ((oHeaderInfo?.Title as DataFieldTypes)?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement) {
@@ -67,8 +76,9 @@ export const getExpressionForTitle = function(
67
76
 
68
77
  // If there is a TypeName defined, show the default title 'New + TypeName', otherwise show the custom title or the default 'New object'
69
78
  const createModeTitle = oHeaderInfo?.TypeName
70
- ? concat(titleWithHeaderInfo, " ", annotationExpression(oHeaderInfo.TypeName.toString()))
79
+ ? concat(titleWithHeaderInfo, ": ", annotationExpression(oHeaderInfo.TypeName.toString()))
71
80
  : titleNoHeaderInfo;
81
+ const activeExpression = oDraftRoot ? Entity.IsActive : true;
72
82
 
73
83
  return compileBinding(
74
84
  ifElse(
@@ -77,7 +87,11 @@ export const getExpressionForTitle = function(
77
87
 
78
88
  createModeTitle,
79
89
  // Otherwise show the default expression
80
- ifElse(titleValueExpression && isEmpty(titleValueExpression), titleForActiveHeaderNoHeaderInfo, titleValueExpression)
90
+ ifElse(
91
+ and(activeExpression, titleValueExpression && isEmpty(titleValueExpression)),
92
+ titleForActiveHeaderNoHeaderInfo,
93
+ titleValueExpression
94
+ )
81
95
  )
82
96
  );
83
97
  };
@@ -4,7 +4,7 @@
4
4
  xmlns:macrodata="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
5
5
  xmlns="sap.m"
6
6
  xmlns:core="sap.ui.core"
7
- xmlns:macro="sap.fe.macros"
7
+ xmlns:macro="sap.fe.macros.internal"
8
8
  template:require="{
9
9
  ID: 'sap/fe/core/helpers/StableIdHelper',
10
10
  OP: 'sap/fe/templates/ObjectPage/AnnotationHelper',
@@ -179,5 +179,5 @@
179
179
  </template:repeat>
180
180
  </template:if>
181
181
  <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.RelatedApps" type="XML" />
182
- <macro:Share id="fe::Share" shortCutExists="true" visible="{= OP.getShareButtonVisibility(${viewData>/}) }" />
182
+ <macro:Share id="fe::Share" visible="{= OP.getShareButtonVisibility(${viewData>/}) }" />
183
183
  </core:FragmentDefinition>