@openui5/sap.ui.mdc 1.92.0 → 1.93.3

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 (180) hide show
  1. package/.reuse/dep5 +5 -0
  2. package/THIRDPARTY.txt +10 -1
  3. package/package.json +4 -4
  4. package/src/sap/ui/mdc/.library +1 -1
  5. package/src/sap/ui/mdc/ActionToolbar.js +1 -1
  6. package/src/sap/ui/mdc/Chart.js +1 -1
  7. package/src/sap/ui/mdc/ChartDelegate.js +1 -1
  8. package/src/sap/ui/mdc/ChartNew.js +67 -9
  9. package/src/sap/ui/mdc/Control.js +1 -1
  10. package/src/sap/ui/mdc/Element.js +1 -1
  11. package/src/sap/ui/mdc/Field.js +15 -2
  12. package/src/sap/ui/mdc/FilterBar.js +11 -1
  13. package/src/sap/ui/mdc/FilterField.js +2 -2
  14. package/src/sap/ui/mdc/Link.js +2 -2
  15. package/src/sap/ui/mdc/MultiValueField.js +406 -0
  16. package/src/sap/ui/mdc/Table.js +73 -46
  17. package/src/sap/ui/mdc/TableDelegate.js +10 -18
  18. package/src/sap/ui/mdc/chartNew/ChartSelectionDetailsNew.js +1 -1
  19. package/src/sap/ui/mdc/chartNew/ChartToolbarNew.js +9 -18
  20. package/src/sap/ui/mdc/chartNew/ItemNew.js +1 -1
  21. package/src/sap/ui/mdc/chartNew/PropertyHelperNew.js +1 -1
  22. package/src/sap/ui/mdc/condition/Condition.js +2 -2
  23. package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
  24. package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
  25. package/src/sap/ui/mdc/condition/FilterConverter.js +27 -15
  26. package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +3 -3
  27. package/src/sap/ui/mdc/condition/Operator.js +10 -5
  28. package/src/sap/ui/mdc/condition/RangeOperator.js +3 -6
  29. package/src/sap/ui/mdc/field/BoolFieldHelp.js +1 -1
  30. package/src/sap/ui/mdc/field/ConditionFieldHelp.js +5 -4
  31. package/src/sap/ui/mdc/field/ConditionType.js +51 -30
  32. package/src/sap/ui/mdc/field/ConditionsType.js +4 -3
  33. package/src/sap/ui/mdc/field/CustomFieldHelp.js +1 -1
  34. package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
  35. package/src/sap/ui/mdc/field/DefineConditionPanel.js +1 -11
  36. package/src/sap/ui/mdc/field/FieldBase.js +29 -9
  37. package/src/sap/ui/mdc/field/FieldBaseDelegate.js +16 -0
  38. package/src/sap/ui/mdc/field/FieldHelpBase.js +1 -1
  39. package/src/sap/ui/mdc/field/FieldInfoBase.js +1 -1
  40. package/src/sap/ui/mdc/field/FieldInput.js +1 -1
  41. package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
  42. package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
  43. package/src/sap/ui/mdc/field/FieldValueHelp.js +49 -33
  44. package/src/sap/ui/mdc/field/FieldValueHelpContentWrapperBase.js +1 -1
  45. package/src/sap/ui/mdc/field/FieldValueHelpMTableWrapper.js +1 -1
  46. package/src/sap/ui/mdc/field/FieldValueHelpMdcTableWrapper.js +52 -32
  47. package/src/sap/ui/mdc/field/FieldValueHelpTableWrapperBase.js +7 -9
  48. package/src/sap/ui/mdc/field/FieldValueHelpUITableWrapper.js +2 -1
  49. package/src/sap/ui/mdc/field/InParameter.js +1 -1
  50. package/src/sap/ui/mdc/field/ListFieldHelp.js +1 -1
  51. package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
  52. package/src/sap/ui/mdc/field/MultiValueFieldDelegate.js +49 -0
  53. package/src/sap/ui/mdc/field/MultiValueFieldItem.js +70 -0
  54. package/src/sap/ui/mdc/field/OutParameter.js +1 -1
  55. package/src/sap/ui/mdc/field/ValueHelpPanel.js +1 -1
  56. package/src/sap/ui/mdc/field/content/ContentFactory.js +2 -2
  57. package/src/sap/ui/mdc/filterbar/FilterBarBase.js +49 -37
  58. package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +51 -26
  59. package/src/sap/ui/mdc/filterbar/p13n/FilterGroupLayout.js +9 -3
  60. package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +1 -1
  61. package/src/sap/ui/mdc/filterbar/vh/GenericFilterBarDelegate.js +55 -39
  62. package/src/sap/ui/mdc/flexibility/AggregateFlex.js +31 -22
  63. package/src/sap/ui/mdc/flexibility/AggregationConfigFlex.js +33 -29
  64. package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +10 -5
  65. package/src/sap/ui/mdc/flexibility/ChartItemFlex.js +18 -6
  66. package/src/sap/ui/mdc/flexibility/ColumnFlex.js +15 -4
  67. package/src/sap/ui/mdc/flexibility/ConditionFlex.js +84 -82
  68. package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
  69. package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
  70. package/src/sap/ui/mdc/flexibility/GroupFlex.js +70 -52
  71. package/src/sap/ui/mdc/flexibility/ItemBaseFlex.js +203 -140
  72. package/src/sap/ui/mdc/flexibility/Panel.flexibility.js +59 -41
  73. package/src/sap/ui/mdc/flexibility/SortFlex.js +72 -54
  74. package/src/sap/ui/mdc/flp/FlpLinkDelegate.js +2 -1
  75. package/src/sap/ui/mdc/library.js +46 -5
  76. package/src/sap/ui/mdc/link/ContactDetails.js +1 -1
  77. package/src/sap/ui/mdc/link/ContactDetailsAddressItem.js +1 -1
  78. package/src/sap/ui/mdc/link/ContactDetailsEmailItem.js +1 -1
  79. package/src/sap/ui/mdc/link/ContactDetailsItem.js +1 -1
  80. package/src/sap/ui/mdc/link/ContactDetailsPhoneItem.js +1 -1
  81. package/src/sap/ui/mdc/link/Factory.js +1 -1
  82. package/src/sap/ui/mdc/link/FakeFlpConnector.js +1 -1
  83. package/src/sap/ui/mdc/link/LinkItem.js +1 -1
  84. package/src/sap/ui/mdc/link/Panel.js +1 -1
  85. package/src/sap/ui/mdc/link/PanelItem.js +1 -1
  86. package/src/sap/ui/mdc/link/PanelListItem.js +1 -1
  87. package/src/sap/ui/mdc/link/SelectionDialog.js +1 -1
  88. package/src/sap/ui/mdc/link/SelectionDialogItem.js +1 -1
  89. package/src/sap/ui/mdc/link/SemanticObjectMapping.js +1 -1
  90. package/src/sap/ui/mdc/link/SemanticObjectMappingItem.js +1 -1
  91. package/src/sap/ui/mdc/link/SemanticObjectUnavailableAction.js +1 -1
  92. package/src/sap/ui/mdc/messagebundle.properties +7 -3
  93. package/src/sap/ui/mdc/messagebundle_ar.properties +6 -3
  94. package/src/sap/ui/mdc/messagebundle_bg.properties +6 -3
  95. package/src/sap/ui/mdc/messagebundle_ca.properties +6 -3
  96. package/src/sap/ui/mdc/messagebundle_cs.properties +6 -3
  97. package/src/sap/ui/mdc/messagebundle_cy.properties +6 -3
  98. package/src/sap/ui/mdc/messagebundle_da.properties +6 -3
  99. package/src/sap/ui/mdc/messagebundle_de.properties +12 -9
  100. package/src/sap/ui/mdc/messagebundle_el.properties +6 -3
  101. package/src/sap/ui/mdc/messagebundle_en.properties +5 -2
  102. package/src/sap/ui/mdc/messagebundle_en_GB.properties +6 -3
  103. package/src/sap/ui/mdc/messagebundle_en_US_sappsd.properties +3 -1
  104. package/src/sap/ui/mdc/messagebundle_en_US_saprigi.properties +3 -1
  105. package/src/sap/ui/mdc/messagebundle_en_US_saptrc.properties +3 -2
  106. package/src/sap/ui/mdc/messagebundle_es.properties +6 -3
  107. package/src/sap/ui/mdc/messagebundle_es_MX.properties +6 -3
  108. package/src/sap/ui/mdc/messagebundle_et.properties +6 -3
  109. package/src/sap/ui/mdc/messagebundle_fi.properties +6 -3
  110. package/src/sap/ui/mdc/messagebundle_fr.properties +6 -3
  111. package/src/sap/ui/mdc/messagebundle_fr_CA.properties +6 -3
  112. package/src/sap/ui/mdc/messagebundle_hi.properties +4 -1
  113. package/src/sap/ui/mdc/messagebundle_hr.properties +6 -3
  114. package/src/sap/ui/mdc/messagebundle_hu.properties +6 -3
  115. package/src/sap/ui/mdc/messagebundle_id.properties +4 -1
  116. package/src/sap/ui/mdc/messagebundle_it.properties +6 -3
  117. package/src/sap/ui/mdc/messagebundle_iw.properties +6 -3
  118. package/src/sap/ui/mdc/messagebundle_ja.properties +4 -1
  119. package/src/sap/ui/mdc/messagebundle_kk.properties +6 -3
  120. package/src/sap/ui/mdc/messagebundle_ko.properties +4 -1
  121. package/src/sap/ui/mdc/messagebundle_lt.properties +6 -3
  122. package/src/sap/ui/mdc/messagebundle_lv.properties +6 -3
  123. package/src/sap/ui/mdc/messagebundle_ms.properties +4 -1
  124. package/src/sap/ui/mdc/messagebundle_nl.properties +6 -3
  125. package/src/sap/ui/mdc/messagebundle_no.properties +6 -3
  126. package/src/sap/ui/mdc/messagebundle_pl.properties +6 -3
  127. package/src/sap/ui/mdc/messagebundle_pt.properties +6 -3
  128. package/src/sap/ui/mdc/messagebundle_pt_PT.properties +5 -2
  129. package/src/sap/ui/mdc/messagebundle_ro.properties +6 -3
  130. package/src/sap/ui/mdc/messagebundle_ru.properties +6 -3
  131. package/src/sap/ui/mdc/messagebundle_sh.properties +6 -3
  132. package/src/sap/ui/mdc/messagebundle_sk.properties +6 -3
  133. package/src/sap/ui/mdc/messagebundle_sl.properties +6 -3
  134. package/src/sap/ui/mdc/messagebundle_sv.properties +6 -3
  135. package/src/sap/ui/mdc/messagebundle_th.properties +4 -1
  136. package/src/sap/ui/mdc/messagebundle_tr.properties +6 -3
  137. package/src/sap/ui/mdc/messagebundle_uk.properties +7 -4
  138. package/src/sap/ui/mdc/messagebundle_vi.properties +6 -3
  139. package/src/sap/ui/mdc/messagebundle_zh_CN.properties +4 -1
  140. package/src/sap/ui/mdc/messagebundle_zh_TW.properties +4 -1
  141. package/src/sap/ui/mdc/mixin/AdaptationMixin.js +1 -1
  142. package/src/sap/ui/mdc/mixin/DelegateMixin.js +1 -1
  143. package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +26 -14
  144. package/src/sap/ui/mdc/odata/json/FilterBarDelegate.js +9 -8
  145. package/src/sap/ui/mdc/odata/v4/ChartDelegate.js +5 -5
  146. package/src/sap/ui/mdc/odata/v4/ChartPropertyHelperNew.js +1 -1
  147. package/src/sap/ui/mdc/odata/v4/FieldBaseDelegate.js +9 -0
  148. package/src/sap/ui/mdc/odata/v4/FilterBarDelegate.js +82 -74
  149. package/src/sap/ui/mdc/odata/v4/TypeUtil.js +17 -0
  150. package/src/sap/ui/mdc/odata/v4/util/DelegateUtil.js +45 -53
  151. package/src/sap/ui/mdc/odata/v4/vizChart/ChartDelegateNew.js +31 -17
  152. package/src/sap/ui/mdc/p13n/DefaultProviderRegistry.js +1 -1
  153. package/src/sap/ui/mdc/p13n/Engine.js +21 -16
  154. package/src/sap/ui/mdc/p13n/PropertyHelper.js +1 -1
  155. package/src/sap/ui/mdc/p13n/UIManager.js +1 -1
  156. package/src/sap/ui/mdc/p13n/modification/ModificationHandler.js +133 -54
  157. package/src/sap/ui/mdc/p13n/panels/BasePanel.js +5 -5
  158. package/src/sap/ui/mdc/p13n/panels/GroupPanel.js +1 -1
  159. package/src/sap/ui/mdc/p13n/panels/GroupView.js +9 -6
  160. package/src/sap/ui/mdc/p13n/panels/ListView.js +58 -2
  161. package/src/sap/ui/mdc/p13n/panels/QueryPanel.js +2 -2
  162. package/src/sap/ui/mdc/p13n/panels/SortQueryPanel.js +6 -1
  163. package/src/sap/ui/mdc/p13n/panels/Wrapper.js +1 -1
  164. package/src/sap/ui/mdc/p13n/subcontroller/BaseController.js +1 -1
  165. package/src/sap/ui/mdc/p13n/subcontroller/ColumnController.js +10 -11
  166. package/src/sap/ui/mdc/p13n/subcontroller/FilterController.js +1 -1
  167. package/src/sap/ui/mdc/p13n/subcontroller/GroupController.js +1 -1
  168. package/src/sap/ui/mdc/p13n/subcontroller/SortController.js +11 -2
  169. package/src/sap/ui/mdc/table/CreationRow.js +1 -1
  170. package/src/sap/ui/mdc/table/PropertyHelper.js +1 -1
  171. package/src/sap/ui/mdc/table/ResponsiveTableType.js +4 -0
  172. package/src/sap/ui/mdc/table/RowSettings.js +1 -1
  173. package/src/sap/ui/mdc/table/TableSettings.js +4 -49
  174. package/src/sap/ui/mdc/table/V4AnalyticsPropertyHelper.js +1 -1
  175. package/src/sap/ui/mdc/themes/base/FieldBase.less +4 -0
  176. package/src/sap/ui/mdc/ui/Container.js +3 -3
  177. package/src/sap/ui/mdc/ui/ContainerItem.js +2 -2
  178. package/src/sap/ui/mdc/util/FilterUtil.js +56 -15
  179. package/src/sap/ui/mdc/util/PropertyHelper.js +6 -2
  180. package/test/sap/ui/mdc/testutils/opa/p13n/Actions.js +17 -17
@@ -7,8 +7,13 @@
7
7
  // ------------------------------------------------------------------------------------------
8
8
  // Utility class used by mdc v4 delegates for parameter handling
9
9
  // ------------------------------------------------------------------------------------------
10
- sap.ui.define(['sap/ui/mdc/util/FilterUtil', "sap/ui/mdc/condition/ConditionConverter", 'sap/base/Log', 'sap/base/util/merge', "sap/ui/model/odata/v4/ODataUtils"],
11
- function(FilterUtil, ConditionConverter, Log, merge, ODataUtils) {
10
+ sap.ui.define(['sap/ui/mdc/util/FilterUtil',
11
+ "sap/ui/mdc/condition/ConditionConverter",
12
+ 'sap/base/Log',
13
+ 'sap/base/util/merge',
14
+ "sap/ui/model/FilterOperator",
15
+ "sap/ui/model/odata/v4/ODataUtils"],
16
+ function(FilterUtil, ConditionConverter, Log, merge, FilterOperator, ODataUtils) {
12
17
  "use strict";
13
18
 
14
19
  /**
@@ -33,75 +38,62 @@ sap.ui.define(['sap/ui/mdc/util/FilterUtil', "sap/ui/mdc/condition/ConditionConv
33
38
  return oParameters;
34
39
  },
35
40
 
36
- _getParameterPath: function(oMDCFilterBar, mConditions, oParameters) {
41
+ /**
42
+ * Determines the parameter path
43
+ *
44
+ * @param {sap.ui.mdc.FilterBar} oMDCFilterBar - instance of the filter bar
45
+ * @returns {string | null} path information
46
+ * @protected
47
+ */
48
+ getParametersInfo : function(oMDCFilterBar) {
49
+ var oParameters = DelegateUtil._getParameters(oMDCFilterBar);
37
50
 
38
- var i, sFieldPath, mInternalParameterConditions = {}, oConditionInternal;
39
- var aParams, sEdmType;
51
+ return DelegateUtil._getParameterPath(oMDCFilterBar, oParameters);
52
+ },
40
53
 
41
- if (!oParameters || (oParameters.parameters.length <= 0)) {
54
+ _getParametersListUrl : function(oMDCFilterBar, aParameterNames) {
55
+ var aParams = [];
56
+ var mConditionsMap = FilterUtil.getConditionsMap(oMDCFilterBar, aParameterNames);
57
+ var aPropertyInfos = oMDCFilterBar.getPropertyInfoSet();
58
+
59
+ aParameterNames.forEach(function(sParameterName) {
60
+ var oProperty = FilterUtil.getPropertyByKey(aPropertyInfos, sParameterName);
61
+
62
+ if (oProperty && (oProperty.maxConditions === 1)) { // only single valued parameters are considered
63
+ mConditionsMap[sParameterName].forEach(function(oCondition) {
64
+ if (oCondition.operator === FilterOperator.EQ) { // only the EQ operators are considered
65
+ aParams.push(sParameterName + '=' + encodeURIComponent(ODataUtils.formatLiteral(oCondition.values[0], oProperty.typeConfig.className)));
66
+ }
67
+ });
68
+ }
69
+ });
70
+
71
+ return aParams;
72
+ },
73
+
74
+ _getParameterPath: function(oMDCFilterBar, oParameters) {
75
+
76
+ if (!oMDCFilterBar || !oMDCFilterBar.isA("sap.ui.mdc.FilterBar")) {
42
77
  return null;
43
78
  }
44
79
 
45
- var aPropertiesMetadata = oMDCFilterBar.getPropertyInfoSet ? oMDCFilterBar.getPropertyInfoSet() : null;
46
- if (!aPropertiesMetadata) {
80
+ if (!oParameters || (oParameters.parameters.length <= 0)) {
47
81
  return null;
48
82
  }
49
83
 
50
84
  var sEntitySetName = oMDCFilterBar.getDelegate().payload.collectionName;
51
85
 
52
- for (sFieldPath in mConditions) {
53
- var oProperty = FilterUtil.getPropertyByKey(aPropertiesMetadata, sFieldPath);
54
- if (oProperty && (oParameters.parameters.indexOf(sFieldPath) >= 0)) {
55
-
56
- mInternalParameterConditions[sFieldPath] = [];
57
- //convert from externalized to model-specific value representation
58
- for (i = 0; i < mConditions[sFieldPath].length; i++) {
59
- oConditionInternal = merge({}, mConditions[sFieldPath][i]);
60
- mInternalParameterConditions[sFieldPath].push(ConditionConverter.toType(oConditionInternal, oProperty.typeConfig, oMDCFilterBar.getTypeUtil()));
61
- }
62
- } else if (!oProperty) {
63
- Log.error("no such property: " + sFieldPath);
64
- }
65
- }
66
-
67
- aParams = [];
68
- for (i = 0; i < oParameters.parameters.length; i++) {
69
- sFieldPath = oParameters.parameters[i];
70
- if (mInternalParameterConditions[sFieldPath] && (mInternalParameterConditions[sFieldPath].length > 0)) {
71
- sEdmType = oParameters.parameterTypes[sFieldPath];
72
- aParams.push(sFieldPath + '=' + encodeURIComponent(ODataUtils.formatLiteral(mInternalParameterConditions[sFieldPath][0].values[0], sEdmType)));
73
- } else {
74
- Log.error("no value found parameter '" + sFieldPath + "'");
75
- }
76
-
77
- }
78
-
86
+ var aParams = DelegateUtil._getParametersListUrl(oMDCFilterBar, oParameters.parameters);
79
87
 
80
88
  // create parameter context
81
89
  return '/' + sEntitySetName + '(' + aParams.toString() + ")/" + oParameters.parameterNavigationName;
82
90
  },
83
91
 
84
92
  /**
85
- * Determines the parameter path
86
- *
87
- * @param {sap.ui.mdc.FilterBar} oMDCFilterBar - instance of the filter bar
88
- * @param {map} mConditions - map with externalized conditions
89
- * @returns {string} path information
90
- * @protected
91
- */
92
- getParametersInfo : function(oMDCFilterBar, mConditions) {
93
- var oParameters = DelegateUtil._getParameters(oMDCFilterBar);
94
-
95
- return DelegateUtil._getParameterPath(oMDCFilterBar, mConditions, oParameters);
96
- },
97
-
98
-
99
- /**
100
- * Static function that replaces special characters with a underscore.<br>
93
+ * Static function that returns the parameter names..
101
94
  *
102
95
  * @param {sap.ui.mdc.FilterBar} oMDCFilterBar - instance of the filter bar
103
- * @param {map} mConditions - map with externalized conditions
104
- * @returns {string} path information
96
+ * @returns {array | null} list of parameter names
105
97
  * @protected
106
98
  */
107
99
  getParameterNames : function(oMDCFilterBar) {
@@ -359,17 +359,26 @@ sap.ui.define([
359
359
 
360
360
  //TODO: Alias might be changing after backend request
361
361
  aVisibleMeasures.push(this._getAggregatedMeasureNameForMDCItem(oItem));
362
- var oMeasure = new Measure({
362
+
363
+ var oMeasureSettings = {
363
364
  name: this._getAggregatedMeasureNameForMDCItem(oItem),//"average" + oItem.getName(),
364
365
  label: oItem.getLabel(),
365
- role: "axis1",
366
- analyticalInfo: {
367
- propertyPath: propertyPath, //TODO: What to fill here without PropertyInfos? Consider property at MDC Item level
366
+ role: oItem.getRole() ? oItem.getRole() : "axis1"
367
+ };
368
+
369
+ if (aggregationMethod && propertyPath) {
370
+ oMeasureSettings.analyticalInfo = {
371
+ propertyPath: propertyPath,
368
372
  "with": aggregationMethod
369
- }
370
- });
373
+ };
374
+ }
375
+
376
+ var oMeasure = new Measure(oMeasureSettings);
371
377
  this._oInnerChart.addMeasure(oMeasure);
372
378
  break;
379
+
380
+ default:
381
+ Log.error("MDC Chart Item " + oItem.getId() + " with label " + oItem.getLabel() + " has no known type. Supported typed are: \"groupable\" & \"aggregatable\"");
373
382
  }
374
383
 
375
384
  aColorPromises.push(this._prepareColoringForItem(oItem));
@@ -838,15 +847,22 @@ sap.ui.define([
838
847
  var propertyPath = oPropertyInfo.propertyPath;
839
848
 
840
849
  //TODO: Check for Criticality, Coloring and so on
841
- var oMeasure = new Measure({
850
+
851
+ var oMeasureSettings = {
842
852
  name: this._getAggregatedMeasureNameForMDCItem(oMDChartItem),//"average" + oItem.getName(),
843
853
  label: oMDChartItem.getLabel(),
844
- role: "axis1",
845
- analyticalInfo: {
854
+ role: oMDChartItem.getRole() ? oMDChartItem.getRole() : "axis1"
855
+ };
856
+
857
+ if (aggregationMethod && propertyPath) {
858
+ oMeasureSettings.analyticalInfo = {
846
859
  propertyPath: propertyPath, //TODO: What to fill here without PropertyInfos? Consider property at MDC Item level
847
860
  "with": aggregationMethod
848
- }
849
- });
861
+ };
862
+ }
863
+
864
+
865
+ var oMeasure = new Measure(oMeasureSettings);
850
866
  this._oInnerChart.addMeasure(oMeasure);
851
867
  }.bind(this));
852
868
 
@@ -929,19 +945,19 @@ sap.ui.define([
929
945
 
930
946
  var aPropertiesMetadata = oFilter.getPropertyInfoSet ? oFilter.getPropertyInfoSet() : null;
931
947
  var aParameterNames = DelegateUtil.getParameterNames(oFilter);
932
- var oFilterInfo = FilterUtil.getFilterInfo(oFilter, mConditions, aPropertiesMetadata, aParameterNames);
948
+ var oFilterInfo = FilterUtil.getFilterInfo(ChartDelegate.getTypeUtil(), mConditions, aPropertiesMetadata, aParameterNames);
933
949
  if (oFilterInfo) {
934
950
  oBindingInfo.filters = oFilterInfo.filters;
935
951
  }
936
952
 
937
- var sParameterPath = DelegateUtil.getParametersInfo(oFilter, mConditions);
953
+ var sParameterPath = DelegateUtil.getParametersInfo(oFilter);
938
954
  if (sParameterPath) {
939
955
  oBindingInfo.path = sParameterPath;
940
956
  }
941
957
  }
942
958
 
943
959
  // get the basic search
944
- var sSearchText = oFilter.getSearch();
960
+ var sSearchText = oFilter.getSearch instanceof Function ? oFilter.getSearch() : "";
945
961
  if (sSearchText) {
946
962
 
947
963
  if (!oBindingInfo) {
@@ -1034,11 +1050,9 @@ sap.ui.define([
1034
1050
  }
1035
1051
  // Make this dynamic for setter calls
1036
1052
  this._vizTooltip.connect(this._oInnerChart.getVizUid());
1037
- } else {
1038
- if (this._vizTooltip) {
1053
+ } else if (this._vizTooltip) {
1039
1054
  this._vizTooltip.destroy();
1040
1055
  }
1041
- }
1042
1056
  } else {
1043
1057
  Log.error("Trying to set chart tooltip while inner chart was not yet initialized");
1044
1058
  }
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.base.Object
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.92.0
28
+ * @version 1.93.3
29
29
  *
30
30
  * @private
31
31
  * @ui5-restricted sap.ui.mdc
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * @extends sap.ui.base.Object
40
40
  *
41
41
  * @author SAP SE
42
- * @version 1.92.0
42
+ * @version 1.93.3
43
43
  *
44
44
  * @private
45
45
  * @ui5-restricted sap.ui.mdc
@@ -353,37 +353,42 @@ sap.ui.define([
353
353
  * @param {object} mEnhanceConfig.controlMeta.property The affected property name (such as <code>width</code> or <code>lable</code>)
354
354
  * @param {object} mEnhanceConfig.value The value that should be written in the xConfig
355
355
  * @param {object} [mEnhanceConfig.propertyBag] Optional propertybag for the <code>ModificationHandler</code>
356
+ * @returns {Promise} Promise resolving when the XConfig is successfully enhanced
356
357
  */
357
358
  Engine.prototype.enhanceXConfig = function(vControl, mEnhanceConfig) {
358
359
 
359
360
  var oControl = Engine.getControlInstance(vControl);
360
361
  var oRegistryEntry = this._getRegistryEntry(vControl);
361
362
 
362
- if (oRegistryEntry) {
363
- var oModificationHandler = this.getModificationHandler(vControl);
364
- var oConfig = oModificationHandler.enhanceConfig(oControl, mEnhanceConfig);
365
-
366
- oRegistryEntry.xConfig = oConfig;
367
- } else {
368
- throw new Error("The control instance needs to be registered to use xConfig!");
369
- }
370
-
363
+ return Promise.resolve()
364
+ .then(function() {
365
+ if (oRegistryEntry) {
366
+ var oModificationHandler = this.getModificationHandler(vControl);
367
+ return oModificationHandler.enhanceConfig(oControl, mEnhanceConfig)
368
+ .then(function(oConfig){
369
+ oRegistryEntry.xConfig = oConfig;
370
+ });
371
+ } else {
372
+ throw new Error("The control instance needs to be registered to use xConfig!");
373
+ }
374
+ }.bind(this));
371
375
  };
372
376
 
373
377
  /**
374
378
  * Returns a copy of the xConfig object
375
379
  *
376
- * @param {sap.ui.core.Element} oControl The according element which should be checked
377
- * @param {object} [oModificationPayload] An object providing a modification handler specific payload
378
- * @param {object} [oModificationPayload.propertyBag] Optional propertybag for different modification handler derivations
380
+ * @param {sap.ui.core.Element} vControl The according element which should be checked
381
+ * @param {object} [mEnhanceConfig] An object providing a modification handler specific payload
382
+ * @param {object} [mEnhanceConfig.propertyBag] Optional propertybag for different modification handler derivations
383
+ * @param {boolean} [bSync] If the method should be executed synchronously; e.g. for the Table
379
384
  *
380
- * @returns {object} The adapted xConfig object
385
+ * @returns {Promise<object>} Promise resolving with the adapted xConfig object
381
386
  */
382
- Engine.prototype.readXConfig = function(vControl, mEnhanceConfig) {
387
+ Engine.prototype.readXConfig = function(vControl, mEnhanceConfig, bSync) {
383
388
 
384
389
  var oControl = Engine.getControlInstance(vControl);
385
390
  var oModificationHandler = this.getModificationHandler(vControl);
386
- return oModificationHandler.readConfig(oControl, mEnhanceConfig) || {};
391
+ return oModificationHandler.readConfig(oControl, mEnhanceConfig, bSync) || Promise.resolve({});
387
392
 
388
393
  };
389
394
 
@@ -29,7 +29,7 @@ sap.ui.define([
29
29
  * @extends sap.ui.mdc.util.PropertyHelper
30
30
  *
31
31
  * @author SAP SE
32
- * @version 1.92.0
32
+ * @version 1.93.3
33
33
  *
34
34
  * @private
35
35
  * @experimental
@@ -31,7 +31,7 @@ sap.ui.define([
31
31
  * @extends sap.ui.base.Object
32
32
  *
33
33
  * @author SAP SE
34
- * @version 1.92.0
34
+ * @version 1.93.3
35
35
  *
36
36
  * @private
37
37
  * @ui5-restricted sap.ui.mdc
@@ -88,67 +88,89 @@ sap.ui.define([
88
88
  * @param {object} oModificationPayload.value The value that should be written in nthe xConfig
89
89
  * @param {object} [oModificationPayload.propertyBag] Optional propertybag for different modification handler derivations
90
90
  *
91
- * @returns {object} The adapted xConfig object
91
+ * @returns {Promise<object>} Promise resolving to the adapted xConfig object
92
92
  */
93
93
  ModificationHandler.prototype.enhanceConfig = function(oControl, oModificationPayload) {
94
94
  var mPropertyBag = oModificationPayload.propertyBag;
95
- var oModifier = mPropertyBag ? mPropertyBag.modifier : JsControlTreeModifier;
95
+ var oModifier = mPropertyBag ? mPropertyBag.modifier : JsControlTreeModifier;
96
96
  var sPropertyInfoKey = oModificationPayload.name;
97
97
  var mControlMeta = oModificationPayload.controlMeta;
98
98
 
99
- var sAffectedAggregation = mControlMeta.aggregation;
100
- var sAffectedProperty = mControlMeta.property;
99
+ var sAffectedAggregation = mControlMeta.aggregation;
100
+ var sAffectedProperty = mControlMeta.property;
101
101
 
102
- var vValue = oModificationPayload.value;
102
+ var vValue = oModificationPayload.value;
103
+ var oControlMetadata;
104
+ var sAggregationName;
105
+ var oXConfig;
103
106
 
104
- var oControlMetadata = oModifier.getControlMetadata(oControl);
105
- var sAggregationName = sAffectedAggregation ? sAffectedAggregation : oControlMetadata.getDefaultAggregation().name;
107
+ return Promise.resolve()
108
+ .then(oModifier.getControlMetadata.bind(oModifier, oControl))
109
+ .then(function(oRetrievedControlMetadata) {
110
+ oControlMetadata = oRetrievedControlMetadata;
111
+ sAggregationName = sAffectedAggregation ? sAffectedAggregation : oControlMetadata.getDefaultAggregation().name;
112
+ return oModifier.getAggregation(oControl, "customData");
113
+ })
114
+ .then(function(aCustomData) {
115
+ return aCustomData.find(function(oCustomData) {
116
+ return Promise.resolve()
117
+ .then(oModifier.getProperty.bind(oModifier, oCustomData, "key"))
118
+ .then(function(sKey) {
119
+ return sKey == "xConfig";
120
+ });
121
+ });
122
+ })
123
+ .then(function(oRetrievedXConfig) {
124
+ oXConfig = oRetrievedXConfig;
125
+ if (oXConfig) {
126
+ return oModifier.getProperty(oXConfig, "value");
127
+ }
128
+ return {
129
+ aggregations: {}
130
+ };
131
+ })
132
+ .then(function(oConfig) {
133
+ if (!oConfig.aggregations.hasOwnProperty(sAggregationName)) {
134
+ if (oControlMetadata.hasAggregation(sAggregationName)) {
135
+ oConfig.aggregations[sAggregationName] = {};
136
+ } else {
137
+ throw new Error("The aggregation " + sAggregationName + " does not exist for" + oControl);
138
+ }
139
+ }
106
140
 
107
- var oXConfig = oModifier.getAggregation(oControl, "customData").find(function(oCustomData){
108
- return oModifier.getProperty(oCustomData, "key") == "xConfig";
109
- });
141
+ if (!oConfig.aggregations.hasOwnProperty(sPropertyInfoKey)) {
142
+ oConfig.aggregations[sAggregationName][sPropertyInfoKey] = {};
143
+ }
110
144
 
111
- var oConfig = oXConfig ? oModifier.getProperty(oXConfig, "value") : {
112
- aggregations: {}
113
- };
114
-
115
- if (!oConfig.aggregations.hasOwnProperty(sAggregationName)) {
116
- if (oControlMetadata.hasAggregation(sAggregationName)) {
117
- oConfig.aggregations[sAggregationName] = {};
118
- } else {
119
- throw new Error("The aggregation " + sAggregationName + " does not exist for" + oControl);
120
- }
121
- }
122
-
123
- if (!oConfig.aggregations.hasOwnProperty(sPropertyInfoKey)) {
124
- oConfig.aggregations[sAggregationName][sPropertyInfoKey] = {};
125
- }
145
+ if (vValue !== null) {
146
+ oConfig.aggregations[sAggregationName][sPropertyInfoKey][sAffectedProperty] = vValue;
147
+ } else {
148
+ delete oConfig.aggregations[sAggregationName][sPropertyInfoKey][sAffectedProperty];
126
149
 
127
- if (vValue !== null) {
128
- oConfig.aggregations[sAggregationName][sPropertyInfoKey][sAffectedProperty] = vValue;
129
- } else {
130
- delete oConfig.aggregations[sAggregationName][sPropertyInfoKey][sAffectedProperty];
150
+ //Delete empty property name object
151
+ if (Object.keys(oConfig.aggregations[sAggregationName][sPropertyInfoKey]).length === 0) {
152
+ delete oConfig.aggregations[sAggregationName][sPropertyInfoKey];
131
153
 
132
- //Delete empty property name object
133
- if (Object.keys(oConfig.aggregations[sAggregationName][sPropertyInfoKey]).length === 0) {
134
- delete oConfig.aggregations[sAggregationName][sPropertyInfoKey];
154
+ //Delete empty aggregation name object
155
+ if (Object.keys(oConfig.aggregations[sAggregationName]).length === 0) {
156
+ delete oConfig.aggregations[sAggregationName];
157
+ }
158
+ }
159
+ }
135
160
 
136
- //Delete empty aggregation name object
137
- if (Object.keys(oConfig.aggregations[sAggregationName]).length === 0) {
138
- delete oConfig.aggregations[sAggregationName];
139
- }
140
- }
141
- }
161
+ var oAppComponent = mPropertyBag ? mPropertyBag.appComponent : undefined;
142
162
 
143
- var oAppComponent = mPropertyBag ? mPropertyBag.appComponent : undefined;
144
-
145
- if (!oXConfig) {
146
- oModifier.createAndAddCustomData(oControl, "xConfig", oConfig, oAppComponent);
147
- } else {
148
- oModifier.setProperty(oXConfig, "value", oConfig);
149
- }
150
-
151
- return oConfig;
163
+ if (!oXConfig) {
164
+ return Promise.resolve()
165
+ .then(oModifier.createAndAddCustomData.bind(oModifier, oControl, "xConfig", oConfig, oAppComponent))
166
+ .then(function() {
167
+ return oConfig;
168
+ });
169
+ } else {
170
+ oModifier.setProperty(oXConfig, "value", oConfig);
171
+ return oConfig;
172
+ }
173
+ });
152
174
  };
153
175
 
154
176
  /**
@@ -158,16 +180,73 @@ sap.ui.define([
158
180
  * @param {object} [oModificationPayload] An object providing a modification handler specific payload
159
181
  * @param {object} [oModificationPayload.propertyBag] Optional propertybag for different modification handler derivations
160
182
  *
161
- * @returns {object} The adapted xConfig object
183
+ * @returns {Promise<object>|object} A promise resolving to the adapted xConfig object or the object directly
162
184
  */
163
185
  ModificationHandler.prototype.readConfig = function(oControl, oModificationPayload) {
164
- var oConfig, oAggregationConfig;
165
- var oModifier = oModificationPayload && oModificationPayload.propertyBag ? oModificationPayload.propertyBag .modifier : JsControlTreeModifier;
166
- oAggregationConfig = oModifier.getAggregation(oControl, "customData").find(function(oCustomData){
167
- return oModifier.getProperty(oCustomData, "key") == "xConfig";
186
+ var oConfig, oAggregationConfig;
187
+
188
+ if (oModificationPayload) {
189
+ var oModifier = oModificationPayload.propertyBag ? oModificationPayload.propertyBag.modifier : JsControlTreeModifier;
190
+ return Promise.resolve()
191
+ .then(oModifier.getAggregation.bind(oModifier, oControl, "customData"))
192
+ .then(function(aCustomData) {
193
+ return aCustomData.find(function(oCustomData) {
194
+ return Promise.resolve()
195
+ .then(oModifier.getProperty.bind(oModifier, oCustomData, "key"))
196
+ .then(function(sKey) {
197
+ return sKey == "xConfig";
198
+ });
199
+ });
200
+ })
201
+ .then(function(oAggregationConfig) {
202
+ if (oAggregationConfig) {
203
+ return Promise.resolve()
204
+ .then(oModifier.getProperty.bind(oModifier, oAggregationConfig, "value"))
205
+ .then(function(oValue) {
206
+ return merge({}, oValue);
207
+ });
208
+ }
209
+ return null;
210
+ });
211
+ }
212
+
213
+ // These functions are used instead of the modifier to avoid that the
214
+ // entire call stack is changed to async when it's not needed
215
+ var fnGetAggregationSync = function(oParent, sAggregationName) {
216
+ var fnFindAggregation = function(oControl, sAggregationName) {
217
+ if (oControl) {
218
+ if (oControl.getMetadata) {
219
+ var oMetadata = oControl.getMetadata();
220
+ var oAggregations = oMetadata.getAllAggregations();
221
+ if (oAggregations) {
222
+ return oAggregations[sAggregationName];
223
+ }
224
+ }
225
+ }
226
+ return undefined;
227
+ };
228
+
229
+ var oAggregation = fnFindAggregation(oParent, sAggregationName);
230
+ if (oAggregation) {
231
+ return oParent[oAggregation._sGetter]();
232
+ }
233
+ return undefined;
234
+ };
235
+
236
+ var fnGetPropertySync = function(oControl, sPropertyName) {
237
+ var oMetadata = oControl.getMetadata().getPropertyLikeSetting(sPropertyName);
238
+ if (oMetadata) {
239
+ var sPropertyGetter = oMetadata._sGetter;
240
+ return oControl[sPropertyGetter]();
241
+ }
242
+ return undefined;
243
+ };
244
+
245
+ oAggregationConfig = fnGetAggregationSync(oControl, "customData").find(function(oCustomData){
246
+ return fnGetPropertySync(oCustomData, "key") == "xConfig";
168
247
  });
169
- oConfig = oAggregationConfig ? merge({}, oModifier.getProperty(oAggregationConfig, "value")) : null;
170
- return oConfig;
248
+ oConfig = oAggregationConfig ? merge({}, fnGetPropertySync(oAggregationConfig, "value")) : null;
249
+ return oConfig;
171
250
  };
172
251
 
173
252
  ModificationHandler.getInstance = function() {
@@ -37,7 +37,7 @@ sap.ui.define([
37
37
  * Determines whether the reordering of items should be enabled
38
38
  */
39
39
  enableReorder: {
40
- type: "Boolean",
40
+ type: "boolean",
41
41
  defaultValue: true
42
42
  },
43
43
  /**
@@ -78,10 +78,10 @@ sap.ui.define([
78
78
  */
79
79
  change: {
80
80
  reason: {
81
- type: "String"
81
+ type: "string"
82
82
  },
83
83
  item: {
84
- type: "Object"
84
+ type: "object"
85
85
  }
86
86
  }
87
87
  }
@@ -109,7 +109,7 @@ sap.ui.define([
109
109
  this._oListControl = this._createInnerListControl();
110
110
 
111
111
  // disable 'select all'
112
- this._oListControl.bPreventMassSelection = true;
112
+ this._oListControl.setMultiSelectMode("ClearAll");
113
113
 
114
114
  this._setInnerLayout();
115
115
  };
@@ -330,7 +330,7 @@ sap.ui.define([
330
330
  BasePanel.prototype._getListControlConfig = function() {
331
331
  return {
332
332
  mode:"MultiSelect",
333
- rememberSelections: false,
333
+ rememberSelections: true,
334
334
  itemPress: [this._onItemPressed, this],
335
335
  selectionChange: [this._onSelectionChange, this],
336
336
  sticky: ["HeaderToolbar", "ColumnHeaders", "InfoToolbar"],
@@ -17,7 +17,7 @@ sap.ui.define([
17
17
  * @extends sap.ui.mdc.p13n.panels.QueryPanel
18
18
  *
19
19
  * @author SAP SE
20
- * @version 1.92.0
20
+ * @version 1.93.3
21
21
  *
22
22
  * @private
23
23
  * @ui5-restricted sap.ui.mdc
@@ -145,6 +145,14 @@ sap.ui.define([
145
145
  GroupView.prototype._createGroupListTemplate = function() {
146
146
  var oList = new List({
147
147
  keyboardMode: ListKeyboardMode.Navigation,
148
+ updateStarted: function() {
149
+ this._removeFactoryControl();
150
+ }.bind(this),
151
+ updateFinished: function(oEvt) {
152
+ if (this.getShowFactory() && this._aInitializedLists.indexOf(oEvt.getSource().getId()) > -1) {
153
+ this._addFactoryControl(oEvt.getSource());
154
+ }
155
+ }.bind(this),
148
156
  selectionChange: function(oBindingInfo) {
149
157
  var sPath = oBindingInfo.getParameter("listItem").getBindingContext(this.P13N_MODEL).sPath;
150
158
  var oItem = this.getP13nModel().getProperty(sPath);
@@ -338,8 +346,6 @@ sap.ui.define([
338
346
  return;
339
347
  }
340
348
 
341
- var aInitializedGroups = this._removeFactoryControl();
342
-
343
349
  this._oListControl.getItems().forEach(function(oOuterItem){
344
350
  var oPanel = oOuterItem.getContent()[0];
345
351
  var oInnerList = oPanel.getContent()[0];
@@ -349,9 +355,6 @@ sap.ui.define([
349
355
  this._togglePanelVisibility(oPanel);
350
356
  }
351
357
 
352
- if (this.getShowFactory() && aInitializedGroups.indexOf(oInnerList.getId()) > -1) {
353
- this._addFactoryControl(oInnerList);
354
- }
355
358
  }.bind(this));
356
359
 
357
360
  this._aCurrentFilters = aFilter;
@@ -415,7 +418,7 @@ sap.ui.define([
415
418
  ){
416
419
  this._bInitialized = true;
417
420
  var oFirstList = this._oListControl.getItems()[0].getContent()[0].getContent()[0];
418
- this._addFactoryControl(oFirstList);
421
+ this._addFactoryControl(oFirstList); //TODO: remove this call
419
422
  this._addInitializedList(oFirstList);
420
423
  }
421
424
  };