@sapui5/sap.suite.ui.generic.template 1.130.7 → 1.130.10

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 (23) hide show
  1. package/package.json +2 -2
  2. package/src/sap/suite/ui/generic/template/.library +1 -1
  3. package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
  5. package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
  6. package/src/sap/suite/ui/generic/template/ListReport/view/fragments/SmartFilterBar.fragment.xml +1 -1
  7. package/src/sap/suite/ui/generic/template/ObjectPage/controller/ControllerImplementation.js +49 -7
  8. package/src/sap/suite/ui/generic/template/ObjectPage/controllerFrameworkExtensions.js +21 -4
  9. package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
  10. package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
  11. package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
  12. package/src/sap/suite/ui/generic/template/fragments/DraftAdminDataPopover.fragment.xml +1 -0
  13. package/src/sap/suite/ui/generic/template/fragments/HeaderFormDataField.fragment.xml +10 -4
  14. package/src/sap/suite/ui/generic/template/genericUtilities/controlHelper.js +10 -9
  15. package/src/sap/suite/ui/generic/template/genericUtilities/filterHelper.js +3 -1
  16. package/src/sap/suite/ui/generic/template/lib/AppComponent.js +1 -1
  17. package/src/sap/suite/ui/generic/template/lib/CommonUtils.js +74 -74
  18. package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +1 -1
  19. package/src/sap/suite/ui/generic/template/library.js +1 -1
  20. package/src/sap/suite/ui/generic/template/themes/base/ObjectPage.less +0 -4
  21. package/src/sap/suite/ui/generic/template/themes/sap_belize_base/ObjectPage.less +0 -4
  22. package/src/sap/suite/ui/generic/template/themes/sap_bluecrystal_base/ObjectPage.less +0 -4
  23. package/src/sap/suite/ui/generic/template/themes/sap_hcb/base_ObjectPage.less +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.generic.template",
3
- "version": "1.130.7",
3
+ "version": "1.130.10",
4
4
  "description": "SAPUI5 Library sap.suite.ui.generic.template",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -16,7 +16,7 @@
16
16
  "testsuite-qunit" : "ui5 serve --config ./ui5-local.yaml --open \"/test-resources/sap/suite/ui/generic/template/qunit/testsuite.qunit.html\""
17
17
  },
18
18
  "devDependencies": {
19
- "sonarqube-scanner": "^2.8.1",
19
+ "sonarqube-scanner": "3.5.0",
20
20
  "@sap/ux-ui5-tooling": "latest"
21
21
  }
22
22
  }
@@ -7,7 +7,7 @@
7
7
 
8
8
  (c) Copyright 2009-2015 SAP SE. All rights reserved
9
9
  </copyright>
10
- <version>1.130.7</version>
10
+ <version>1.130.10</version>
11
11
 
12
12
  <documentation>Library with generic Suite UI templates.</documentation>
13
13
 
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.130.7"
11
+ "version": "1.130.10"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.130.7"
11
+ "version": "1.130.10"
12
12
  },
13
13
  "title": "Canvas",
14
14
  "description": "Canvas Page",
@@ -8,7 +8,7 @@
8
8
  "i18n": "i18n/i18n.properties",
9
9
  "applicationVersion": {
10
10
  "__comment": "applicationVersion oder componentversion??",
11
- "version": "1.130.7"
11
+ "version": "1.130.10"
12
12
  },
13
13
  "title": "{{TITLE}}",
14
14
  "description": "{{DESCRIPTION}}",
@@ -35,7 +35,7 @@
35
35
  label="{i18n>EDITING_STATUS}"
36
36
  groupId="_BASIC">
37
37
  <smartfilterbar:customControl>
38
- <Select selectedKey="{_templPriv>/listReport/vDraftState}" id="editStateFilter">
38
+ <Select selectedKey="{_templPriv>/listReport/vDraftState}" id="editStateFilter" wrapItemsText="true">
39
39
  <items>
40
40
  <core:Item key="0" text="{i18n>ALL_OBJECTS}"/>
41
41
  <core:Item key="5" text="{i18n>ALL_OBJECTS_HIDING_DRAFT}"/>
@@ -45,7 +45,10 @@ sap.ui.define([
45
45
  ) {
46
46
  "use strict";
47
47
  var sClassName = "ObjectPage.controller.ControllerImplementation";
48
- var oLogger = new FeLogger(sClassName).getLogger();
48
+ var oFeLogger = new FeLogger(sClassName);
49
+ var oLogger = oFeLogger.getLogger();
50
+ var oLevel = oFeLogger.Level;
51
+ oLogger.setLevel(oLevel.ALL);
49
52
  var DEFAULT_GROWING_THRESHOLD = 20;
50
53
 
51
54
  // Scroll the specified object page to top
@@ -1450,15 +1453,54 @@ sap.ui.define([
1450
1453
  }); // Normalize the return value such that it always is a Promise
1451
1454
  }
1452
1455
 
1453
- function fnFocusForEdit(bFocusAtTop){
1454
- setTimeout(function(){
1455
- var oFocusControlPromise = getFocusForEditPromise(bFocusAtTop);
1456
- oFocusControlPromise.then(function(oFocusControl){
1457
- controlHelper.focusUI5Control(oFocusControl);
1458
- });
1456
+ function fnFocusForEdit(bFocusAtTop) {
1457
+ setTimeout(function () {
1458
+ // check if extension is found
1459
+ var bhasExtensionFound = oController.hasOwnProperty("focusOnEditExtension");
1460
+ var oFocusControl;
1461
+ if (bhasExtensionFound) {
1462
+ var sSelectedSection = oObjectPage.getSelectedSection();
1463
+ // call the extension method and get the control passed by application
1464
+ oFocusControl = oController.focusOnEditExtension(sSelectedSection);
1465
+ }
1466
+
1467
+ // Check if the passed control is defined, focusable, and visible within the viewport.
1468
+ if (oFocusControl && oFocusControl.focus && oFocusControl.getDomRef()) {
1469
+ //set the focus on the control passed by application
1470
+ if (controlHelper.isSmartField(oFocusControl)) {
1471
+ // check whether the SmartField is the correct target for focussing
1472
+ controlHelper.getSmartFieldIsFocussableForInputPromise(oFocusControl).then(function (bIsFocusable) {
1473
+ if (bIsFocusable) {
1474
+ controlHelper.focusUI5Control(oFocusControl);
1475
+ } else {
1476
+ oLogger.info("Provided control is not focusable or visible in the viewport, hence fall back to the standard focus handling");
1477
+ fnStandardFocusHandlingOnEdit(bFocusAtTop);
1478
+ }
1479
+ });
1480
+ } else {
1481
+ //if the passed control is not a smart field, check and set the focus on
1482
+ controlHelper.focusUI5Control(oFocusControl);
1483
+ }
1484
+ } else {
1485
+ // If no extension is defined, proceed with the standard execution flow.
1486
+ // If the control passed via the extension does not meet the required conditions,
1487
+ // fall back to the standard focus handling mechanism.
1488
+ if (bhasExtensionFound) {
1489
+ oLogger.info("Provided control is not focusable or visible in the viewport, hence fall back to the standard focus handling");
1490
+ }
1491
+ fnStandardFocusHandlingOnEdit(bFocusAtTop);
1492
+ }
1459
1493
  }, 0);
1460
1494
  }
1461
1495
 
1496
+ function fnStandardFocusHandlingOnEdit(bFocusAtTop) {
1497
+ var oFocusControlPromise = getFocusForEditPromise(bFocusAtTop);
1498
+ oFocusControlPromise.then(function (oFocusControl) {
1499
+ controlHelper.focusUI5Control(oFocusControl);
1500
+ });
1501
+ }
1502
+
1503
+
1462
1504
  /* Begin: Functions dealing with the search field on tables */
1463
1505
 
1464
1506
  // a search field in one of the tables is used to trigger a search.
@@ -28,7 +28,8 @@ sap.ui.define([
28
28
  onChildOpenedExtension: { "public": true, "final": false, overrideExecution: OverrideExecution.After},
29
29
  onSubSectionEnteredExtension: { "public": true, "final": false, overrideExecution: OverrideExecution.After},
30
30
  beforeSmartLinkPopoverOpensExtension: { "public": true, "final": false, overrideExecution: OverrideExecution.After},
31
- onBeforeExportTableExtension: { "public": true, "final": false, overrideExecution: OverrideExecution.After}
31
+ onBeforeExportTableExtension: { "public": true, "final": false, overrideExecution: OverrideExecution.After},
32
+ focusOnEditExtension:{ "public": true, "final": false, overrideExecution: OverrideExecution.After}
32
33
  }
33
34
  },
34
35
 
@@ -262,6 +263,22 @@ sap.ui.define([
262
263
  */
263
264
  getContext: function(oContext) {
264
265
  return oContext;
265
- }
266
- };
267
- });
266
+ },
267
+
268
+ /**
269
+ * Extension point for the application to specify the control to focus on in the object page upon edit.
270
+ *
271
+ * @param {String} sSelectedSection - The ID of the selected section.
272
+ * @returns {sap.ui.core.Control} - The control that needs to be focused.
273
+ *
274
+ * The returned control must meet the following criteria:
275
+ * - Be focusable and have a "focus" property.
276
+ * - Be visible within the viewport.
277
+ *
278
+ * If the returned control does not satisfy these conditions, the standard focus handling logic is executed.
279
+ */
280
+ focusOnEditExtension: function (sSelectedSection) {
281
+ return {};
282
+ }
283
+ };
284
+ });
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.130.7"
9
+ "version": "1.130.10"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.130.7"
9
+ "version": "1.130.10"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -6,7 +6,7 @@
6
6
  "type": "component",
7
7
  "i18n": "i18n/i18n.properties",
8
8
  "applicationVersion": {
9
- "version": "1.130.7"
9
+ "version": "1.130.10"
10
10
  },
11
11
  "title": "{{TITLE}}",
12
12
  "description": "{{DESCRIPTION}}",
@@ -4,6 +4,7 @@
4
4
  ariaLabelledBy="objectNoDataText unsavedPopoverText lockedPopoverText objectChangedText"
5
5
  contentWidth="15.625rem"
6
6
  verticalScrolling="false"
7
+ placement="Auto"
7
8
  class="sapSmartTemplatesListReportPopover sapUiContentPadding">
8
9
  <endButton>
9
10
  <Button icon="sap-icon://decline" tooltip="{i18n>CLOSE}" press="closeDraftAdminPopover" />
@@ -17,7 +17,9 @@
17
17
  <Label id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Label"
18
18
  labelFor="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Field"
19
19
  text="{path: 'dataField>Label', formatter: 'AHModel.format'}"
20
- class="sapSmartTemplatesObjectPageHeaderFormLabel sapUiTinyMarginEnd"/>
20
+ class="sapSmartTemplatesObjectPageHeaderFormLabel sapUiTinyMarginEnd"
21
+ showColon="true"
22
+ />
21
23
  <fe:Link id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Field"
22
24
  press="._templateEventHandlers.onContactDetails"
23
25
  ariaLabelledBy="{:= ${parameter>/stableId}.getStableId({type: 'ObjectPageHeader', subType: 'HeaderTitle', sFacet: ${facetId>id}})} header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Label"
@@ -37,9 +39,11 @@
37
39
  <HBox binding="{parts: [{path: 'headerFacet>Target'}, {path: 'entitySet>'}], formatter: 'AH.getNavigationPathWithExpand'}"
38
40
  visible="{path: 'dataField>', formatter: 'AH.getBindingForHiddenPath'}">
39
41
  <Label
40
- id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Label"
41
- text="{parts: [{path: 'dataField>'}, {path: 'entitySet>'}], formatter: 'AH.getLabelForDFwithIBN'}"
42
- class="sapSmartTemplatesObjectPageHeaderFormLabel sapUiTinyMarginEnd"/>
42
+ id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Label"
43
+ text="{parts: [{path: 'dataField>'}, {path: 'entitySet>'}], formatter: 'AH.getLabelForDFwithIBN'}"
44
+ class="sapSmartTemplatesObjectPageHeaderFormLabel sapUiTinyMarginEnd"
45
+ showColon="true"
46
+ />
43
47
  <fe:Link
44
48
  id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Field"
45
49
  text="{parts: [{path: 'dataField>'}, {path: 'entitySet>'}], formatter: 'AH.getLinkTextForDFwithIBN'}"
@@ -61,6 +65,7 @@
61
65
  binding="{parts: [{path: 'headerFacet>Target'}, {path: 'entitySet>'}], formatter: 'AH.getNavigationPathWithExpand'}"
62
66
  visible="{path: 'dataField>', formatter: 'AH.getBindingForHiddenPath'}" >
63
67
  <sfi:SmartLabel
68
+ showColon="true"
64
69
  labelFor="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Field"
65
70
  class="sapSmartTemplatesObjectPageHeaderFormLabel sapUiTinyMarginEnd" />
66
71
 
@@ -88,6 +93,7 @@
88
93
  <sfi:SmartLabel
89
94
  id="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Label"
90
95
  labelFor="header::{path: 'headerFacet>', formatter: 'AH.getStableIdPartFromFacet'}::{path: 'dataField>', formatter: 'AH.getStableIdPartFromDataField'}::Field"
96
+ showColon="true"
91
97
  class="{= ${dataField>Criticality} ? 'sapSmartTemplatesObjectPageHeaderFormLabel': 'sapSmartTemplatesObjectPageHeaderFormLabelNCriticcal' } sapUiTinyMarginEnd"/>
92
98
  <!-- TODO: Should also work with ...format -->
93
99
  <template:with path="headerFacet>Target" helper="AHModel.gotoEntitySet" var="annotation">
@@ -64,16 +64,17 @@ sap.ui.define([
64
64
  }
65
65
 
66
66
  // returns a Promise that resolves to the boolean information whether the SmartField is a possible focus target for input.
67
- function getSmartFieldIsFocussableForInputPromise(oSmartField){
68
- var oSmartFieldMetadataAvailablePromise = oSmartField._getComputedMetadata();
69
- return oSmartFieldMetadataAvailablePromise.then(function(){
70
- return (oSmartField.getMode() === "edit") && (oSmartField._getICRenderedPromise() || Promise.resolve()).then(function(){
71
- var oFirstFocusableInput = !oSmartField._bEdmBoolDetected && getFirstEditableInput(oSmartField.getDomRef());
72
- return !(!oFirstFocusableInput || oFirstFocusableInput.type === "checkbox");
73
- });
67
+ function getSmartFieldIsFocussableForInputPromise(oSmartField) {
68
+ return oSmartField._getComputedMetadata().then(function () {
69
+ return (oSmartField.getMode() === "edit") && (oSmartField._getICRenderedPromise() || Promise.resolve());
70
+ }).then(function () {
71
+ var oFirstFocusableInput = !oSmartField._bEdmBoolDetected && getFirstEditableInput(oSmartField.getDomRef());
72
+ return !(!oFirstFocusableInput || oFirstFocusableInput.type === "checkbox");
73
+ }).catch(function () {
74
+ return false;
74
75
  });
75
- }
76
-
76
+ }
77
+
77
78
  // returns the UI5 control which currently has the focus, if there is one. Otherwise returns a faulty value.
78
79
  // Implementation as recommended by UI5 until the provide an own abstraction.
79
80
  function getControlWithFocus(){
@@ -204,10 +204,12 @@ sap.ui.define([
204
204
  }
205
205
  var sRet = aFiltersForProperty.map(function (oFilter) {
206
206
  var bCaseSensitive = true;
207
+ // Define the date range operations that need date formatting
208
+ var dateRangeOperations = ["DATE", "DATERANGE", "DATETIMERANGE", "FROM", "TO"];
207
209
  if (oFilter.bCaseSensitive === undefined) {
208
210
  bCaseSensitive = true;
209
211
  }
210
- if ((oProperty.type === "Edm.DateTime" || oProperty.type === "Edm.DateTimeOffset") && oParams.oFilterData[sPropertyForFilterData].conditionTypeInfo && oParams.oFilterData[sPropertyForFilterData].conditionTypeInfo.data.operation !== "DATE") {
212
+ if ((oProperty.type === "Edm.DateTime" || oProperty.type === "Edm.DateTimeOffset") && oParams.oFilterData[sPropertyForFilterData].conditionTypeInfo && !dateRangeOperations.includes(oParams.oFilterData[sPropertyForFilterData].conditionTypeInfo.data.operation)) {
211
213
  if (!DynamicDateUtil.getAllOptionKeys().includes(oParams.oFilterData[sPropertyForFilterData].conditionTypeInfo.data.operation)) {
212
214
  oParams.bIsStatic = true;
213
215
  return;
@@ -938,7 +938,7 @@ sap.ui.define([
938
938
  * @public
939
939
  * @extends sap.ui.core.UIComponent
940
940
  * @author SAP SE
941
- * @version 1.130.7
941
+ * @version 1.130.10
942
942
  * @name sap.suite.ui.generic.template.lib.AppComponent
943
943
  */
944
944
  var oAppComponent = UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
@@ -243,7 +243,7 @@ sap.ui.define(["sap/ui/base/Object",
243
243
  var iEntitySetName = sSmartControlId.indexOf("::" + oComponent.getEntitySet() + "--") + 2; //Ensure only Entity set is picked up for processing
244
244
  var sI18nKey = sSmartControlId.substring(iEntitySetName, sSmartControlId.lastIndexOf("::")),
245
245
  sI18nKey = sI18nKey.replace(/--/g, "|").replace(/::/g, "|"); //sId = "STTA_C_MP_Product|to_ProductText|com.sap.vocabularies.UI.v1.LineItem"
246
-
246
+
247
247
  return sI18nKey;
248
248
  }
249
249
 
@@ -291,9 +291,9 @@ sap.ui.define(["sap/ui/base/Object",
291
291
 
292
292
  /*
293
293
  * Sets the enabled value for Toolbar buttons
294
- *
295
- * Currently, the property applicablePath (resp. sap:applicable-path) is only evaluated for buttons in header and
296
- * footer (influencing the visibility) and for toolbar buttons which require a context (influencing the enablement).
294
+ *
295
+ * Currently, the property applicablePath (resp. sap:applicable-path) is only evaluated for buttons in header and
296
+ * footer (influencing the visibility) and for toolbar buttons which require a context (influencing the enablement).
297
297
  * For static toolbar buttons (i.e. toolbar buttons that do not require a selection) the property is ignored.
298
298
  * TO DO : make sure the properties applicablePath/sap:applicable-path influence the visibility of static toolbar buttons as well
299
299
  *
@@ -348,11 +348,11 @@ sap.ui.define(["sap/ui/base/Object",
348
348
  oComponentUtils.getTemplatePrivateModel().setProperty("/listReport/multiEditEnabled", aContexts.filter(fnIsContextEditable).length > 0);
349
349
  }
350
350
  if (oEnabledPromise){
351
- // check if "enabled" is bound to the path '/generic/controlProperties/' in the model - otherwise it's bound to another path or has a hard coded true/false
351
+ // check if "enabled" is bound to the path '/generic/controlProperties/' in the model - otherwise it's bound to another path or has a hard coded true/false
352
352
  if (oEnabledPromise && !/generic\/controlProperties/.test(oButton.getBindingPath("enabled"))) {
353
353
  oEnabledPromise = null;
354
354
  bEnabled = oButton.getEnabled();
355
- }
355
+ }
356
356
  }
357
357
  return {
358
358
  enabledPromise: oEnabledPromise,
@@ -548,21 +548,21 @@ sap.ui.define(["sap/ui/base/Object",
548
548
  // This method is invoked twice in ALP. Once for smart table and once again for smart chart.
549
549
  // In the first iteration (smart table actions), the calculated enablement value is stored on "mBreakoutActionEnabled".
550
550
  // In the second iteration (smart chart actions), the enablement should be calculated only for the chart actions (oBreakoutAction.filter = "chart").
551
- // As the previously calculated value for the table actions should be retained, the value stored on "mBreakoutActionEnabled" is used as the default value.
551
+ // As the previously calculated value for the table actions should be retained, the value stored on "mBreakoutActionEnabled" is used as the default value.
552
552
  var bDefaultValue = !bIsAnalyticalListPage || !!mBreakOutActionEnabled[sControlId].enabled;
553
553
  var bEnabled = fnIsBreakoutActionEnabled(oBreakoutAction, aContexts, oModel, oControl, bDefaultValue, bIsAnalyticalListPage);
554
-
554
+
555
555
  mBreakOutActionEnabled[sControlId] = {
556
556
  enabled: bEnabled
557
- };
557
+ };
558
558
  }
559
-
559
+
560
560
  /**
561
561
  * This method analyzes the applicable contexts and tells whether the breakout action should be enabled.
562
- *
563
- * If the context based analysis is not required (i.e the action doesn't require selection),
562
+ *
563
+ * If the context based analysis is not required (i.e the action doesn't require selection),
564
564
  * it will simply return the default value <code>bDefaultValue</code>.
565
- *
565
+ *
566
566
  * @param {object} oBreakoutAction Manifest information about the breakout action
567
567
  * @param {Array<sap.ui.model.Context>} aContexts Applicable contexts
568
568
  * @param {sap.ui.model.Model} oModel Model of the smart control
@@ -583,14 +583,14 @@ sap.ui.define(["sap/ui/base/Object",
583
583
  // check if applicablePath is true for this context
584
584
  var oObject = oModel.getObject(oContext.getPath() + oApplicablePathInfo.navigationPath);
585
585
  return oObject[oApplicablePathInfo.property] === true;
586
- });
586
+ });
587
587
  } else {
588
588
  bEnabled = bEnabled || (bFilterIsChart ? controlHelper.isSmartChart(oControl) : controlHelper.isSmartTable(oControl));
589
589
  }
590
590
  } else if (controlHelper.isSmartChart(oControl)) {
591
591
  //table button chart ondata received
592
592
  // For LR/OP, directly evaluate the drill stack filters and enable the action accordingly.
593
- // For ALP, evaluate the drill stack filters only when oBreakoutAction.filter is "chart" and skip the evaluation for table based actions.
593
+ // For ALP, evaluate the drill stack filters only when oBreakoutAction.filter is "chart" and skip the evaluation for table based actions.
594
594
  if (!bIsAnalyticalListPage || bFilterIsChart) {
595
595
  // If enabled Selection is made on the chart but drilldown is performed later.
596
596
  bEnabled = oControl.getDrillStackFilters().length > 0;
@@ -601,7 +601,7 @@ sap.ui.define(["sap/ui/base/Object",
601
601
  }
602
602
  }
603
603
  return bEnabled;
604
-
604
+
605
605
  }
606
606
 
607
607
  function fnUpdateBreakoutEnablement(mBreakOutActionEnabled, mBreakoutActions, aContexts, oModel, sSelectedTabKey, oControl) {
@@ -828,13 +828,13 @@ sap.ui.define(["sap/ui/base/Object",
828
828
 
829
829
  /**
830
830
  * Provides the Navigation Context about the smart link clicked by the user
831
- *
831
+ *
832
832
  * @param {Array} aKeys - Array of Navigation Key Properties Object
833
833
  * @param {object} oResponse - response of oDataModel's GET request
834
834
  * @returns {string} route string for Context Navigation
835
835
  * @private
836
836
  */
837
-
837
+
838
838
  function fnMergeNavigationKeyPropertiesWithValues(aKeys, oResponse) {
839
839
  var sKeySeparator, sRoute;
840
840
  for (var i = 0, ilength = aKeys.length; i < ilength; i++) {
@@ -904,7 +904,7 @@ sap.ui.define(["sap/ui/base/Object",
904
904
 
905
905
  /**
906
906
  * Provides the information about the smart link clicked by user
907
- *
907
+ *
908
908
  * @param {*} oEvent beforePopoverOpens event
909
909
  * @returns {object} oSourceInfo - object contains the smart link info
910
910
  * oSourceInfo.smartLink - The clicked smart link
@@ -916,9 +916,9 @@ sap.ui.define(["sap/ui/base/Object",
916
916
  oSmartLink = sap.ui.getCore().byId(sSmartLinkId),
917
917
  oOwnerControl = getOwnerControl(oSmartLink, true),
918
918
  oSourceInfo = Object.create(null);
919
-
919
+
920
920
  oSourceInfo.smartLink = oSmartLink;
921
-
921
+
922
922
  if (controlHelper.isSmartTable(oOwnerControl)) {
923
923
  var oSmartTableHandler = oServices.oPresentationControlHandlerFactory.getPresentationControlHandler(oOwnerControl);
924
924
  oSourceInfo.smartTable = oOwnerControl;
@@ -1001,7 +1001,7 @@ sap.ui.define(["sap/ui/base/Object",
1001
1001
  // call extension
1002
1002
  oController.adaptNavigationParameterExtension(oSelectionVariant, oObjectInfo);
1003
1003
  sSelectionVariantPrepared = oSelectionVariant.toJSONString();
1004
- }
1004
+ }
1005
1005
  delete oEventParameters.semanticAttributes;
1006
1006
  oNavigationHandler.processBeforeSmartLinkPopoverOpens(oEventParameters, sSelectionVariantPrepared);
1007
1007
  }
@@ -1025,7 +1025,7 @@ sap.ui.define(["sap/ui/base/Object",
1025
1025
  var sOwnerComponentEntitySet = oController.getOwnerComponent().getEntitySet();
1026
1026
  if (controlHelper.isSemanticObjectController(oControl) || controlHelper.isSmartTable(oControl)) {
1027
1027
  sControlEntitySet = oControl.getEntitySet();
1028
- } else {
1028
+ } else {
1029
1029
  // When navigation from table is triggered from an OP Table, oControl is not a smart table but a link or a button in the table.
1030
1030
  var oOwnerControl = getOwnerControl(oControl);
1031
1031
  var oParentControl = oOwnerControl && oOwnerControl.getParent();
@@ -1087,7 +1087,7 @@ sap.ui.define(["sap/ui/base/Object",
1087
1087
  fnHandleMandatoryField("HasActiveEntity");
1088
1088
  }
1089
1089
  }
1090
-
1090
+
1091
1091
  function isMultiViewMultiEntity() {
1092
1092
  return !!(oComponentUtils && oComponentUtils.getSettings() && oComponentUtils.getSettings().quickVariantSelectionX);
1093
1093
  }
@@ -1369,7 +1369,7 @@ sap.ui.define(["sap/ui/base/Object",
1369
1369
  var aLinksToCheck = [], aInternalLinks = [];
1370
1370
  var oAppComponent = oComponent.getAppComponent();
1371
1371
  var UshellContainer = sap.ui.require("sap/ushell/Container");
1372
- var oXApplNavigation = UshellContainer && UshellContainer.getServiceAsync("Navigation");
1372
+ var oXAppNavigation = UshellContainer && UshellContainer.getServiceAsync("Navigation");
1373
1373
  var oSupportedIntents = oTemplatePrivateModel.getProperty("/generic/supportedIntents/");
1374
1374
  var aToolbarContent = oToolbar.getContent();
1375
1375
  var iButtonsNumber = aToolbarContent.length;
@@ -1390,51 +1390,51 @@ sap.ui.define(["sap/ui/base/Object",
1390
1390
  }
1391
1391
  }
1392
1392
 
1393
- if (aLinksToCheck.length > 0 && oXApplNavigation) {
1394
- oXApplNavigation.then(function(oCrossAppNavigator) {
1395
- var oDeferredLinks = oCrossAppNavigator.getLinks(aLinksToCheck);
1396
- oDeferredLinks.then(function(aLinks) {
1397
- oSupportedIntents = oTemplatePrivateModel.getProperty("/generic/supportedIntents/");
1398
- var iLinksNumber = aLinks.length;
1399
- // Entries in aLinks should correspond to aInternalLinks: if a link is not supported an empty object is returned by the method getLinks
1400
- var aHrefPromises = [];
1401
- for (var i = 0; i < iLinksNumber; i++) {
1402
- if (aLinks[i].length > 0) {
1403
- var sHref = oCrossAppNavigator.getHref({ target: { shellHash: aLinks[i][0].intent } }, oAppComponent);
1404
- aHrefPromises.push(sHref);
1393
+ if (!aLinksToCheck.length || !oXAppNavigation) {
1394
+ return;
1395
+ }
1396
+ oXAppNavigation.then(function(oCrossAppNavigator) {
1397
+ var oDeferredLinks = oCrossAppNavigator.getLinks(aLinksToCheck);
1398
+ oDeferredLinks.then(function(aLinks) {
1399
+ oSupportedIntents = oTemplatePrivateModel.getProperty("/generic/supportedIntents/");
1400
+ var iLinksNumber = aLinks.length;
1401
+ // Entries in aLinks should correspond to aInternalLinks: if a link is not supported an empty object is returned by the method getLinks
1402
+ var aHrefPromises = [],
1403
+ aHrefLinks = [];
1404
+ for (var i = 0; i < iLinksNumber; i++) {
1405
+ if (aLinks[i].length > 0) {
1406
+ var sHref = oCrossAppNavigator.getHref({ target: { shellHash: aLinks[i][0].intent } }, oAppComponent);
1407
+ aHrefPromises.push(sHref);
1408
+ // Store value in separate array. Count in aHrefLinks and in aInternalLinks may differs
1409
+ aHrefLinks.push(aInternalLinks[i]);
1410
+ }
1411
+ }
1412
+ Promise.all(aHrefPromises).then(function(aResponses) {
1413
+ for (var j = 0; j < aResponses.length; j++) {
1414
+ if (aResponses[j]) {
1415
+ aHrefLinks[j].bLinkIsSupported = true;
1405
1416
  }
1406
1417
  }
1407
- Promise.all(aHrefPromises).then(function(aResponses) {
1408
- for (var j = 0; j < aResponses.length; j++) {
1409
- if (aResponses[j]) {
1410
- aInternalLinks[j].bLinkIsSupported = true;
1411
- }
1412
- // add the value to the model
1413
- var sSemObj = aInternalLinks[j].semanticObject;
1414
- var sAction = aInternalLinks[j].action;
1415
-
1416
- var oSemObjProp = oTemplatePrivateModel.getProperty("/generic/supportedIntents/" + sSemObj); if (!oSemObjProp) { // no semantic object in the model yet
1417
- oSupportedIntents[sSemObj] = {};
1418
- oSupportedIntents[sSemObj][sAction] =
1419
- {
1420
- "visible" :aInternalLinks[j].bLinkIsSupported
1421
- };
1422
- } else if (!oSemObjProp[sAction]) { // no action in the model yet
1423
- oSemObjProp[sAction] =
1424
- {
1425
- "visible" :aInternalLinks[j].bLinkIsSupported
1426
- };
1427
- } else {
1428
- oSemObjProp[sAction]["visible"] = aInternalLinks[i].bLinkIsSupported;
1429
- }
1418
+ }).then(function() {
1419
+ aInternalLinks.forEach(function(entry) {
1420
+ // add the value to the model
1421
+ var sSemObj = entry.semanticObject,
1422
+ sAction = entry.action,
1423
+ oSemObjProp = oTemplatePrivateModel.getProperty("/generic/supportedIntents/" + sSemObj);
1424
+
1425
+ if (!oSemObjProp) { // no semantic object in the model yet
1426
+ oSupportedIntents[sSemObj] = {};
1427
+ oSupportedIntents[sSemObj][sAction] = { "visible" :entry.bLinkIsSupported };
1428
+ } else if (!oSemObjProp[sAction]) { // no action in the model yet
1429
+ oSemObjProp[sAction] = { "visible" :entry.bLinkIsSupported };
1430
+ } else {
1431
+ oSemObjProp[sAction]["visible"] = entry.bLinkIsSupported;
1430
1432
  }
1431
- }).then(function() {
1432
- oTemplatePrivateModel.updateBindings();
1433
1433
  });
1434
+ oTemplatePrivateModel.updateBindings();
1434
1435
  });
1435
1436
  });
1436
-
1437
- }
1437
+ });
1438
1438
  }
1439
1439
 
1440
1440
  // This function executes the given handler fnHandler if preconditions are given
@@ -1607,10 +1607,10 @@ sap.ui.define(["sap/ui/base/Object",
1607
1607
  }
1608
1608
 
1609
1609
  /**
1610
- * While exporting data from a table, this function removes the technical properties
1611
- * (like "IsActiveEntity", "HasActiveEntity") and adds the actual value of "Editing Status" select box
1612
- * into the exported file.
1613
- *
1610
+ * While exporting data from a table, this function removes the technical properties
1611
+ * (like "IsActiveEntity", "HasActiveEntity") and adds the actual value of "Editing Status" select box
1612
+ * into the exported file.
1613
+ *
1614
1614
  * @param {sap.ui.export.util.Filter[]} aFilterSettings Filters in the exported file
1615
1615
  */
1616
1616
  function fnTransformTechnicalPropsOnExportedFile (aFilterSettings) {
@@ -1625,7 +1625,7 @@ sap.ui.define(["sap/ui/base/Object",
1625
1625
  // Find the technical props for the selected draft state value
1626
1626
  var sDraftStateValue = oEditStateControl.getSelectedKey(),
1627
1627
  aTechnicalProps = oDraftStateToTechnicalProps[sDraftStateValue];
1628
-
1628
+
1629
1629
  aTechnicalProps.forEach(function (oTechnicalProp){
1630
1630
  // Find the index of filter settings to be removed
1631
1631
  var iIndexOfFilterSettingsToBeRemoved = aFilterSettings.findIndex(function (oFilterSettings){
@@ -1639,7 +1639,7 @@ sap.ui.define(["sap/ui/base/Object",
1639
1639
  aFilterSettings.splice(iIndexOfFilterSettingsToBeRemoved, 1);
1640
1640
  }
1641
1641
  });
1642
-
1642
+
1643
1643
  //Create a new filter with the value retrieved from "editStateFilter" select control
1644
1644
  var sEditStateLabel = oEditStateControl.getLabels().at(0).getText(),
1645
1645
  sEditStateValue = oEditStateControl.getSelectedItem().getText(),
@@ -1651,9 +1651,9 @@ sap.ui.define(["sap/ui/base/Object",
1651
1651
  }
1652
1652
 
1653
1653
  /**
1654
- * This method reads the values of analytical parameters from the smart filter bar
1654
+ * This method reads the values of analytical parameters from the smart filter bar
1655
1655
  * and adds them to the list of filters in the exported file
1656
- *
1656
+ *
1657
1657
  * @param {sap.ui.comp.smarttable.SmartTable} oSmartTable The smart table which has the data to be exported
1658
1658
  * @param {sap.ui.export.util.Filter[]} aFilterSettings Current filters in the exported file
1659
1659
  */
@@ -1755,7 +1755,7 @@ sap.ui.define(["sap/ui/base/Object",
1755
1755
  }, fnReject);
1756
1756
  });
1757
1757
  };
1758
-
1758
+
1759
1759
  var fnIsFieldModified = function(oSourceControl) {
1760
1760
  var oInnerControl = oSourceControl.getFirstInnerControl && oSourceControl.getFirstInnerControl();
1761
1761
  if (oInnerControl.getValue() !== oInnerControl.getLastValue()) {
@@ -1780,7 +1780,7 @@ sap.ui.define(["sap/ui/base/Object",
1780
1780
  if (!fnIsFieldModified(oSourceControl)) {
1781
1781
  mAdditionalParameters.callPreparationOnly = true;
1782
1782
  }
1783
- fnCallExecuteSideEffect();
1783
+ fnCallExecuteSideEffect();
1784
1784
  // Resolve the promise and exit the loop for Inactive transient row
1785
1785
  return fnResolve();
1786
1786
  }
@@ -3181,7 +3181,7 @@ sap.ui.define(["sap/ui/base/Object",
3181
3181
  * @param {sap.suite.ui.generic.template.lib.AppComponent} oAppComponent The AppComponent instance
3182
3182
  * @public
3183
3183
  * @extends sap.ui.base.Object
3184
- * @version 1.130.7
3184
+ * @version 1.130.10
3185
3185
  * @since 1.30.0
3186
3186
  * @alias sap.suite.ui.generic.template.lib.NavigationController
3187
3187
  */
@@ -64,7 +64,7 @@ sap.ui.define([
64
64
  interfaces: [],
65
65
  controls: [],
66
66
  elements: [],
67
- version: "1.130.7",
67
+ version: "1.130.10",
68
68
  extensions: {
69
69
  //Configuration used for rule loading of Support Assistant
70
70
  "sap.ui.support": {
@@ -217,10 +217,6 @@ html[dir="rtl"] .sapSmartTemplatesObjectPage .sapUxAPObjectPageHeaderContent .sa
217
217
  float: right;
218
218
  }
219
219
 
220
- .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabelNCriticcal.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabel.sapMLabel:after, .sapSmartTemplatesObjectPageDataPointLabel.sapMLabel:after {
221
- content: ":";
222
- }
223
-
224
220
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMText,
225
221
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMLnk,
226
222
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField.sapMLnk,
@@ -217,10 +217,6 @@ html[dir="rtl"] .sapSmartTemplatesObjectPage .sapUxAPObjectPageHeaderContent .sa
217
217
  float: right;
218
218
  }
219
219
 
220
- .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabelNCriticcal.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabel.sapMLabel:after, .sapSmartTemplatesObjectPageDataPointLabel.sapMLabel:after {
221
- content: ":";
222
- }
223
-
224
220
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMText,
225
221
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMLnk,
226
222
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField.sapMLnk,
@@ -217,10 +217,6 @@ html[dir="rtl"] .sapSmartTemplatesObjectPage .sapUxAPObjectPageHeaderContent .sa
217
217
  float: right;
218
218
  }
219
219
 
220
- .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabelNCriticcal.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabel.sapMLabel:after, .sapSmartTemplatesObjectPageDataPointLabel.sapMLabel:after {
221
- content: ":";
222
- }
223
-
224
220
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMText,
225
221
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMLnk,
226
222
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField.sapMLnk,
@@ -217,10 +217,6 @@ html[dir="rtl"] .sapSmartTemplatesObjectPage .sapUxAPObjectPageHeaderContent .sa
217
217
  float: right;
218
218
  }
219
219
 
220
- .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabelNCriticcal.sapMLabel:after, .sapSmartTemplatesObjectPageHeaderFormLabel.sapMLabel:after, .sapSmartTemplatesObjectPageDataPointLabel.sapMLabel:after {
221
- content: ":";
222
- }
223
-
224
220
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMText,
225
221
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField .sapMLnk,
226
222
  .sapSmartTemplatesObjectPage .sapSmartTemplatesObjectPageHeaderForm .sapSmartTemplatesObjectPageHeaderFormField.sapMLnk,