@openui5/sap.ui.mdc 1.110.0 → 1.111.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 (202) hide show
  1. package/package.json +4 -4
  2. package/src/sap/ui/mdc/.library +1 -1
  3. package/src/sap/ui/mdc/ActionToolbar.js +1 -1
  4. package/src/sap/ui/mdc/AggregationBaseDelegate.js +20 -2
  5. package/src/sap/ui/mdc/Chart.js +121 -3
  6. package/src/sap/ui/mdc/ChartRenderer.js +9 -6
  7. package/src/sap/ui/mdc/Control.js +1 -1
  8. package/src/sap/ui/mdc/Element.js +1 -1
  9. package/src/sap/ui/mdc/Field.js +2 -2
  10. package/src/sap/ui/mdc/FilterBar.js +1 -1
  11. package/src/sap/ui/mdc/FilterBarDelegate.js +96 -4
  12. package/src/sap/ui/mdc/FilterField.js +2 -2
  13. package/src/sap/ui/mdc/Link.js +9 -2
  14. package/src/sap/ui/mdc/MultiValueField.js +1 -1
  15. package/src/sap/ui/mdc/Table.js +136 -74
  16. package/src/sap/ui/mdc/ValueHelp.js +7 -40
  17. package/src/sap/ui/mdc/actiontoolbar/ActionToolbarAction.js +1 -1
  18. package/src/sap/ui/mdc/chart/ChartImplementationContainer.js +1 -1
  19. package/src/sap/ui/mdc/chart/ChartImplementationContainerRenderer.js +1 -1
  20. package/src/sap/ui/mdc/chart/ChartSelectionDetails.js +1 -1
  21. package/src/sap/ui/mdc/chart/ChartSettings.js +7 -3
  22. package/src/sap/ui/mdc/chart/ChartToolbar.js +37 -6
  23. package/src/sap/ui/mdc/chart/PropertyHelper.js +1 -1
  24. package/src/sap/ui/mdc/condition/Condition.js +1 -1
  25. package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
  26. package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
  27. package/src/sap/ui/mdc/condition/FilterConverter.js +1 -1
  28. package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +2 -2
  29. package/src/sap/ui/mdc/condition/Operator.js +1 -1
  30. package/src/sap/ui/mdc/condition/OperatorDynamicDateOption.js +1 -1
  31. package/src/sap/ui/mdc/condition/RangeOperator.js +1 -1
  32. package/src/sap/ui/mdc/designtime/chart/Chart.designtime.js +3 -0
  33. package/src/sap/ui/mdc/designtime/table/Table.designtime.js +3 -1
  34. package/src/sap/ui/mdc/enum/FilterBarValidationStatus.js +56 -0
  35. package/src/sap/ui/mdc/enum/ReasonMode.js +53 -0
  36. package/src/sap/ui/mdc/field/ConditionType.js +19 -33
  37. package/src/sap/ui/mdc/field/ConditionsType.js +1 -3
  38. package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
  39. package/src/sap/ui/mdc/field/DefineConditionPanel.js +2 -4
  40. package/src/sap/ui/mdc/field/DynamicDateRangeConditionsType.js +1 -3
  41. package/src/sap/ui/mdc/field/FieldBase.js +60 -100
  42. package/src/sap/ui/mdc/field/FieldBaseDelegate.js +28 -69
  43. package/src/sap/ui/mdc/field/FieldInfoBase.js +1 -1
  44. package/src/sap/ui/mdc/field/FieldInput.js +1 -1
  45. package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
  46. package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
  47. package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
  48. package/src/sap/ui/mdc/field/MultiValueFieldItem.js +1 -1
  49. package/src/sap/ui/mdc/field/TokenDisplay.js +1 -1
  50. package/src/sap/ui/mdc/field/TokenizerDisplay.js +1 -1
  51. package/src/sap/ui/mdc/field/content/ContentFactory.js +66 -9
  52. package/src/sap/ui/mdc/field/content/DateContent.js +3 -2
  53. package/src/sap/ui/mdc/filterbar/FilterBarBase.js +172 -112
  54. package/src/sap/ui/mdc/filterbar/PropertyHelper.js +1 -1
  55. package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +18 -3
  56. package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +2 -2
  57. package/src/sap/ui/mdc/flexibility/AggregateFlex.js +16 -4
  58. package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +1 -1
  59. package/src/sap/ui/mdc/flexibility/ChartTypeFlex.js +14 -3
  60. package/src/sap/ui/mdc/flexibility/ConditionFlex.js +17 -5
  61. package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
  62. package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
  63. package/src/sap/ui/mdc/flexibility/GroupFlex.js +9 -3
  64. package/src/sap/ui/mdc/flexibility/ItemBaseFlex.js +71 -8
  65. package/src/sap/ui/mdc/flexibility/SortFlex.js +10 -4
  66. package/src/sap/ui/mdc/flexibility/Util.js +5 -3
  67. package/src/sap/ui/mdc/flexibility/xConfigFlex.js +11 -3
  68. package/src/sap/ui/mdc/library.js +2 -18
  69. package/src/sap/ui/mdc/link/ContactDetails.js +1 -1
  70. package/src/sap/ui/mdc/link/ContactDetailsAddressItem.js +1 -1
  71. package/src/sap/ui/mdc/link/ContactDetailsEmailItem.js +1 -1
  72. package/src/sap/ui/mdc/link/ContactDetailsItem.js +1 -1
  73. package/src/sap/ui/mdc/link/ContactDetailsPhoneItem.js +1 -1
  74. package/src/sap/ui/mdc/link/Factory.js +1 -1
  75. package/src/sap/ui/mdc/link/FakeFlpConnector.js +1 -1
  76. package/src/sap/ui/mdc/link/LinkItem.js +1 -1
  77. package/src/sap/ui/mdc/link/Panel.js +1 -1
  78. package/src/sap/ui/mdc/link/PanelItem.js +1 -1
  79. package/src/sap/ui/mdc/link/SemanticObjectMapping.js +1 -1
  80. package/src/sap/ui/mdc/link/SemanticObjectMappingItem.js +1 -1
  81. package/src/sap/ui/mdc/link/SemanticObjectUnavailableAction.js +1 -1
  82. package/src/sap/ui/mdc/messagebundle.properties +7 -3
  83. package/src/sap/ui/mdc/messagebundle_ar.properties +5 -3
  84. package/src/sap/ui/mdc/messagebundle_bg.properties +5 -3
  85. package/src/sap/ui/mdc/messagebundle_ca.properties +5 -3
  86. package/src/sap/ui/mdc/messagebundle_cs.properties +5 -3
  87. package/src/sap/ui/mdc/messagebundle_cy.properties +5 -3
  88. package/src/sap/ui/mdc/messagebundle_da.properties +5 -3
  89. package/src/sap/ui/mdc/messagebundle_de.properties +5 -3
  90. package/src/sap/ui/mdc/messagebundle_el.properties +5 -3
  91. package/src/sap/ui/mdc/messagebundle_en.properties +5 -2
  92. package/src/sap/ui/mdc/messagebundle_en_GB.properties +5 -3
  93. package/src/sap/ui/mdc/messagebundle_en_US_sappsd.properties +5 -3
  94. package/src/sap/ui/mdc/messagebundle_en_US_saprigi.properties +12 -2
  95. package/src/sap/ui/mdc/messagebundle_en_US_saptrc.properties +5 -3
  96. package/src/sap/ui/mdc/messagebundle_es.properties +5 -3
  97. package/src/sap/ui/mdc/messagebundle_es_MX.properties +5 -3
  98. package/src/sap/ui/mdc/messagebundle_et.properties +5 -3
  99. package/src/sap/ui/mdc/messagebundle_fi.properties +5 -3
  100. package/src/sap/ui/mdc/messagebundle_fr.properties +6 -4
  101. package/src/sap/ui/mdc/messagebundle_fr_CA.properties +5 -3
  102. package/src/sap/ui/mdc/messagebundle_hi.properties +5 -3
  103. package/src/sap/ui/mdc/messagebundle_hr.properties +5 -3
  104. package/src/sap/ui/mdc/messagebundle_hu.properties +5 -3
  105. package/src/sap/ui/mdc/messagebundle_id.properties +5 -3
  106. package/src/sap/ui/mdc/messagebundle_it.properties +5 -3
  107. package/src/sap/ui/mdc/messagebundle_iw.properties +5 -3
  108. package/src/sap/ui/mdc/messagebundle_ja.properties +5 -3
  109. package/src/sap/ui/mdc/messagebundle_kk.properties +5 -3
  110. package/src/sap/ui/mdc/messagebundle_ko.properties +4 -2
  111. package/src/sap/ui/mdc/messagebundle_lt.properties +5 -3
  112. package/src/sap/ui/mdc/messagebundle_lv.properties +5 -3
  113. package/src/sap/ui/mdc/messagebundle_ms.properties +5 -3
  114. package/src/sap/ui/mdc/messagebundle_nl.properties +5 -3
  115. package/src/sap/ui/mdc/messagebundle_no.properties +5 -3
  116. package/src/sap/ui/mdc/messagebundle_pl.properties +5 -3
  117. package/src/sap/ui/mdc/messagebundle_pt.properties +5 -3
  118. package/src/sap/ui/mdc/messagebundle_pt_PT.properties +5 -3
  119. package/src/sap/ui/mdc/messagebundle_ro.properties +5 -3
  120. package/src/sap/ui/mdc/messagebundle_ru.properties +5 -3
  121. package/src/sap/ui/mdc/messagebundle_sh.properties +5 -3
  122. package/src/sap/ui/mdc/messagebundle_sk.properties +5 -3
  123. package/src/sap/ui/mdc/messagebundle_sl.properties +5 -3
  124. package/src/sap/ui/mdc/messagebundle_sv.properties +5 -3
  125. package/src/sap/ui/mdc/messagebundle_th.properties +5 -3
  126. package/src/sap/ui/mdc/messagebundle_tr.properties +5 -3
  127. package/src/sap/ui/mdc/messagebundle_uk.properties +5 -3
  128. package/src/sap/ui/mdc/messagebundle_vi.properties +5 -3
  129. package/src/sap/ui/mdc/messagebundle_zh_CN.properties +5 -3
  130. package/src/sap/ui/mdc/messagebundle_zh_TW.properties +5 -3
  131. package/src/sap/ui/mdc/mixin/AdaptationMixin.js +1 -1
  132. package/src/sap/ui/mdc/mixin/DelegateMixin.js +12 -1
  133. package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +29 -3
  134. package/src/sap/ui/mdc/mixin/PromiseMixin.js +1 -1
  135. package/src/sap/ui/mdc/mixin/PropertyHelperMixin.js +96 -77
  136. package/src/sap/ui/mdc/odata/TypeUtil.js +1 -1
  137. package/src/sap/ui/mdc/odata/v4/FieldBaseDelegate.js +0 -32
  138. package/src/sap/ui/mdc/odata/v4/TableDelegate.js +3 -0
  139. package/src/sap/ui/mdc/odata/v4/TypeUtil.js +1 -1
  140. package/src/sap/ui/mdc/odata/v4/vizChart/ChartDelegate.js +6 -5
  141. package/src/sap/ui/mdc/p13n/Engine.js +1 -1
  142. package/src/sap/ui/mdc/p13n/PropertyHelper.js +1 -1
  143. package/src/sap/ui/mdc/p13n/UIManager.js +1 -1
  144. package/src/sap/ui/mdc/p13n/panels/FilterPanel.js +1 -1
  145. package/src/sap/ui/mdc/p13n/subcontroller/BaseController.js +1 -1
  146. package/src/sap/ui/mdc/table/Column.js +5 -2
  147. package/src/sap/ui/mdc/table/ColumnSettings.js +1 -1
  148. package/src/sap/ui/mdc/table/CreationRow.js +1 -1
  149. package/src/sap/ui/mdc/table/GridTableType.js +1 -16
  150. package/src/sap/ui/mdc/table/PropertyHelper.js +50 -12
  151. package/src/sap/ui/mdc/table/ResponsiveColumnSettings.js +1 -1
  152. package/src/sap/ui/mdc/table/ResponsiveTableType.js +1 -15
  153. package/src/sap/ui/mdc/table/RowActionItem.js +1 -1
  154. package/src/sap/ui/mdc/table/RowSettings.js +1 -1
  155. package/src/sap/ui/mdc/table/TableSettings.js +14 -13
  156. package/src/sap/ui/mdc/table/TreeTableType.js +2 -19
  157. package/src/sap/ui/mdc/table/V4AnalyticsPropertyHelper.js +34 -2
  158. package/src/sap/ui/mdc/themes/base/FieldBase.less +12 -25
  159. package/src/sap/ui/mdc/util/FilterUtil.js +24 -1
  160. package/src/sap/ui/mdc/util/InfoBar.js +118 -0
  161. package/src/sap/ui/mdc/util/InfoBarRenderer.js +35 -0
  162. package/src/sap/ui/mdc/util/PromiseCache.js +1 -1
  163. package/src/sap/ui/mdc/util/PropertyHelper.js +41 -41
  164. package/src/sap/ui/mdc/util/TypeUtil.js +3 -1
  165. package/src/sap/ui/mdc/valuehelp/Dialog.js +1 -1
  166. package/src/sap/ui/mdc/valuehelp/Popover.js +1 -1
  167. package/src/sap/ui/mdc/valuehelp/base/Container.js +1 -3
  168. package/src/sap/ui/mdc/valuehelp/base/Content.js +2 -4
  169. package/src/sap/ui/mdc/valuehelp/base/DialogTab.js +1 -1
  170. package/src/sap/ui/mdc/valuehelp/base/FilterableListContent.js +1 -1
  171. package/src/sap/ui/mdc/valuehelp/base/ListContent.js +2 -23
  172. package/src/sap/ui/mdc/valuehelp/content/Bool.js +1 -1
  173. package/src/sap/ui/mdc/valuehelp/content/Conditions.js +1 -1
  174. package/src/sap/ui/mdc/valuehelp/content/FixedList.js +1 -1
  175. package/src/sap/ui/mdc/valuehelp/content/MDCTable.js +19 -21
  176. package/src/sap/ui/mdc/valuehelp/content/MTable.js +1 -1
  177. package/test/sap/ui/mdc/testutils/opa/field/Actions.js +4 -2
  178. package/test/sap/ui/mdc/testutils/opa/filterfield/Actions.js +4 -2
  179. package/test/sap/ui/mdc/testutils/opa/filterfield/TestObjects.js +0 -11
  180. package/test/sap/ui/mdc/testutils/opa/valueHelp/Assertions.js +16 -0
  181. package/test/sap/ui/mdc/testutils/opa/valueHelp/JSDoc.md +98 -9
  182. package/test/sap/ui/mdc/testutils/opa/valueHelp/TestObjects.js +85 -0
  183. package/test/sap/ui/mdc/testutils/opa/valueHelp/doWait.js +2 -2
  184. package/src/sap/ui/mdc/enum/OutParameterMode.js +0 -39
  185. package/src/sap/ui/mdc/field/BoolFieldHelp.js +0 -437
  186. package/src/sap/ui/mdc/field/ConditionFieldHelp.js +0 -325
  187. package/src/sap/ui/mdc/field/CustomFieldHelp.js +0 -101
  188. package/src/sap/ui/mdc/field/FieldHelpBase.js +0 -1517
  189. package/src/sap/ui/mdc/field/FieldHelpBaseDelegate.js +0 -55
  190. package/src/sap/ui/mdc/field/FieldValueHelp.js +0 -2834
  191. package/src/sap/ui/mdc/field/FieldValueHelpContentWrapperBase.js +0 -525
  192. package/src/sap/ui/mdc/field/FieldValueHelpDelegate.js +0 -171
  193. package/src/sap/ui/mdc/field/FieldValueHelpMTableWrapper.js +0 -359
  194. package/src/sap/ui/mdc/field/FieldValueHelpMdcTableWrapper.js +0 -416
  195. package/src/sap/ui/mdc/field/FieldValueHelpTableWrapperBase.js +0 -977
  196. package/src/sap/ui/mdc/field/FieldValueHelpUITableWrapper.js +0 -329
  197. package/src/sap/ui/mdc/field/InParameter.js +0 -229
  198. package/src/sap/ui/mdc/field/ListFieldHelp.js +0 -620
  199. package/src/sap/ui/mdc/field/OutParameter.js +0 -75
  200. package/src/sap/ui/mdc/field/ValueHelpPanel.control.xml +0 -71
  201. package/src/sap/ui/mdc/field/ValueHelpPanel.js +0 -525
  202. package/src/sap/ui/mdc/odata/v4/FieldValueHelpDelegate.js +0 -125
@@ -397,6 +397,33 @@ sap.ui.define([
397
397
  type: "boolean",
398
398
  group: "Behavior",
399
399
  defaultValue: false
400
+ },
401
+
402
+ /**
403
+ * Specifies the table metadata.
404
+ *
405
+ * Whenever the <code>TableDelegate</code> needs to wait for, for example, server-side information to provide the
406
+ * <code>PropertyInfo</code> objects, specifying an array of {@link sap.ui.mdc.table.PropertyInfo PropertyInfo} objects here
407
+ * enables the table to speed up the initial setup.
408
+ *
409
+ * Instead of requesting the <code>PropertyInfo</code> objects from the <code>TableDelegate</code> and waiting for them, the table
410
+ * will use the <code>PropertyInfo</code> objects specified here for rendering-specific tasks, e.g. automatic column width
411
+ * calculation, and to trigger the initial data request.
412
+ *
413
+ * To enable the table for these tasks, certain attributes of a <code>PropertyInfo</code> must be specified. You can
414
+ * find the list of required attributes in the documentation of the <code>PropertyInfo</code>, for example, in
415
+ * {@link sap.ui.mdc.table.PropertyInfo}.
416
+ *
417
+ * This property is processed only once during the instantiation of the table. Any subsequent changes have no effect.
418
+ *
419
+ * <b>Note</b>: This property must not be bound.
420
+ * <b>Note</b>: This property is used exclusively for SAPUI5 flexibility / Fiori Elements. Do not use it otherwise.
421
+ *
422
+ * @since 1.111
423
+ */
424
+ propertyInfo: {
425
+ type: "object[]",
426
+ defaultValue: []
400
427
  }
401
428
  },
402
429
  aggregations: {
@@ -671,6 +698,9 @@ sap.ui.define([
671
698
 
672
699
  // indicates whether binding the table is inevitable or not
673
700
  this._bForceRebind = true;
701
+
702
+ this._setPropertyHelperClass(PropertyHelper);
703
+ this._setupPropertyInfoStore("propertyInfo");
674
704
  };
675
705
 
676
706
  /**
@@ -692,7 +722,6 @@ sap.ui.define([
692
722
  Control.prototype.applySettings.call(this, mEarlySettings, oScope);
693
723
  }
694
724
 
695
- this._setPropertyHelperClass(PropertyHelper);
696
725
  Control.prototype.applySettings.call(this, mSettings, oScope);
697
726
  this.initControlDelegate();
698
727
  };
@@ -740,7 +769,9 @@ sap.ui.define([
740
769
  if (oDataStateIndicator) {
741
770
  oDataStateIndicator[sAction + "ApplyFilter"](this._onApplyMessageFilter, this);
742
771
  oDataStateIndicator[sAction + "ClearFilter"](this._onClearMessageFilter, this);
743
- oDataStateIndicator[sAction + "Event"]("filterInfoPress", onShowFilterDialog, this);
772
+ oDataStateIndicator[sAction + "Event"]("filterInfoPress", function() {
773
+ showFilterDialog(this);
774
+ }, this);
744
775
  }
745
776
  };
746
777
 
@@ -965,6 +996,13 @@ sap.ui.define([
965
996
  };
966
997
 
967
998
  Table.prototype._onModifications = function() {
999
+ if (!this.isPropertyHelperFinal()) {
1000
+ this._bFinalzingPropertiesOnModification = true;
1001
+ this.finalizePropertyHelper().then(function() {
1002
+ delete this._bFinalzingPropertiesOnModification;
1003
+ }.bind(this));
1004
+ }
1005
+
968
1006
  this.getColumns().forEach(function(oColumn) {
969
1007
  oColumn._onModifications();
970
1008
  });
@@ -1015,8 +1053,14 @@ sap.ui.define([
1015
1053
  var oRegisterConfig = {
1016
1054
  controller: {}
1017
1055
  };
1056
+
1057
+ var aStableKeys = [];
1058
+ if (this.getColumns().length > 0 && this._isOfType(TableType.TreeTable)) {
1059
+ aStableKeys.push(this.getColumns()[0].getDataProperty());
1060
+ }
1061
+
1018
1062
  var mRegistryOptions = {
1019
- Column: new ColumnController({control: this}),
1063
+ Column: new ColumnController({control: this, stableKeys: aStableKeys}),
1020
1064
  Sort: new SortController({control: this}),
1021
1065
  Group: new GroupController({control: this}),
1022
1066
  Filter: new FilterController({control: this}),
@@ -1152,18 +1196,19 @@ sap.ui.define([
1152
1196
  wrapping: false
1153
1197
  })
1154
1198
  ],
1155
- press: [onShowFilterDialog, oTable]
1156
- });
1157
-
1158
- // If the toolbar is hidden while it has the focus, the focus moves to the body. This can happen, for example, when all filters are removed in
1159
- // the filter dialog that was opened via the filter info bar.
1160
- oFilterInfoToolbar.focus = function() {
1161
- if (this.getDomRef()) {
1162
- OverflowToolbar.prototype.focus.apply(this, arguments);
1163
- } else {
1164
- oTable.focus();
1199
+ press: function() {
1200
+ showFilterDialog(oTable).then(function(oP13nDialog) {
1201
+ // Because the filter info bar was pressed, it must have had the focus when opening the dialog. When removing all filters in
1202
+ // the dialog and confirming, the filter info bar will be hidden, and the dialog tries to restore the focus on the hidden filter
1203
+ // info bar. To avoid a focus loss, the table gets the focus.
1204
+ oP13nDialog.attachEventOnce("afterClose", function() {
1205
+ if (getInternallyFilteredProperties(oTable).length === 0) {
1206
+ oTable.focus();
1207
+ }
1208
+ });
1209
+ });
1165
1210
  }
1166
- };
1211
+ });
1167
1212
 
1168
1213
  internal(oTable).oFilterInfoBar = oFilterInfoToolbar;
1169
1214
  updateFilterInfoBar(oTable);
@@ -1399,10 +1444,15 @@ sap.ui.define([
1399
1444
  this.setAggregation("_content", this._oTable);
1400
1445
  this._onAfterTableCreated(true); // Resolve any pending promise if table exists
1401
1446
 
1402
- var pTableInit = this.initialized().then(function() {
1403
- this.initPropertyHelper();
1447
+ Promise.all([
1448
+ this.getPropertyInfo().length === 0 ? this.finalizePropertyHelper() : this.awaitPropertyHelper(),
1449
+ this._pDelegatePreInit,
1450
+ this.initialized()
1451
+ ]).then(function() {
1452
+ delete this._pDelegatePreInit;
1404
1453
 
1405
- // add this to the micro task execution queue to enable consumers to handle this correctly
1454
+ // Add this to the micro task execution queue to enable consumers to handle this correctly.
1455
+ // For example to add a binding context between the initialized promise and binding the rows.
1406
1456
  var oCreationRow = this.getCreationRow();
1407
1457
  if (oCreationRow) {
1408
1458
  oCreationRow.update();
@@ -1420,14 +1470,6 @@ sap.ui.define([
1420
1470
  }
1421
1471
  }
1422
1472
 
1423
- return this.awaitPropertyHelper();
1424
- }.bind(this));
1425
-
1426
- Promise.all([
1427
- pTableInit,
1428
- this._pDelegatePreInit
1429
- ]).then(function() {
1430
- delete this._pDelegatePreInit;
1431
1473
  this._bFullyInitialized = true;
1432
1474
  this._onAfterFullInitialization(true);
1433
1475
  }.bind(this)).catch(function(oError) {
@@ -1801,6 +1843,8 @@ sap.ui.define([
1801
1843
  var aColumns = this.getColumns();
1802
1844
 
1803
1845
  return this._fullyInitialized().then(function() {
1846
+ return this.finalizePropertyHelper();
1847
+ }.bind(this)).then(function() {
1804
1848
  var oPropertyHelper = this.getPropertyHelper();
1805
1849
  var aSheetColumns = [];
1806
1850
 
@@ -1898,7 +1942,7 @@ sap.ui.define([
1898
1942
  };
1899
1943
 
1900
1944
  /**
1901
- * Generic event hander for <code>beforeExport</code> event of
1945
+ * Generic event handler for <code>beforeExport</code> event of
1902
1946
  * the referenced <code>ExportHandler</code>. The event parameters
1903
1947
  * will be enhanced with table specific information and its own
1904
1948
  * <code>beforeExport</code> is fired.
@@ -1990,6 +2034,41 @@ sap.ui.define([
1990
2034
  if (this.isFilteringEnabled()) {
1991
2035
  insertFilterInfoBar(this);
1992
2036
  }
2037
+
2038
+ if (!this._oColumnHeaderMenu) {
2039
+ this._oQuickActionContainer = new QuickActionContainer({table: this});
2040
+ this._oItemContainer = new ItemContainer({table: this});
2041
+ this._oColumnHeaderMenu = new ColumnMenu({
2042
+ id: this.getId() + "-columnHeaderMenu",
2043
+ _quickActions: [this._oQuickActionContainer],
2044
+ _items: [this._oItemContainer]
2045
+ });
2046
+
2047
+ this._oColumnHeaderMenu.attachBeforeOpen(this._createColumnMenuContent, this);
2048
+ }
2049
+ };
2050
+
2051
+ Table.prototype._createColumnMenuContent = function(oEvent) {
2052
+ var oInnerColumn = oEvent.getParameter("openBy");
2053
+ var oColumn = this.getColumns()[oInnerColumn.getParent().indexOfColumn(oInnerColumn)];
2054
+
2055
+ oEvent.preventDefault();
2056
+
2057
+ this._oQuickActionContainer.setColumn(oColumn);
2058
+ this._oItemContainer.setColumn(oColumn);
2059
+
2060
+ this._fullyInitialized().then(function() {
2061
+ return this.finalizePropertyHelper();
2062
+ }.bind(this)).then(function() {
2063
+ Promise.all([
2064
+ this._oQuickActionContainer.initializeQuickActions(),
2065
+ this._oItemContainer.initializeItems()
2066
+ ]).then(function() {
2067
+ if (this._oQuickActionContainer.hasQuickActions() || this._oItemContainer.hasItems()) {
2068
+ this._oColumnHeaderMenu.openBy(oInnerColumn, true);
2069
+ }
2070
+ }.bind(this));
2071
+ }.bind(this));
1993
2072
  };
1994
2073
 
1995
2074
  /**
@@ -2011,36 +2090,6 @@ sap.ui.define([
2011
2090
  TableSettings.moveColumn(this, mPropertyBag.column, mPropertyBag.newIndex);
2012
2091
  };
2013
2092
 
2014
- Table.prototype._onColumnPress = function(mPropertyBag) {
2015
- if (this._bSuppressOpenMenu) {
2016
- return;
2017
- }
2018
-
2019
- var oColumn = mPropertyBag.column;
2020
-
2021
- this._fullyInitialized().then(function() {
2022
- if (!this._oColumnHeaderMenu) {
2023
- this._oQuickActionContainer = new QuickActionContainer({table: this});
2024
- this._oItemContainer = new ItemContainer({table: this});
2025
- this._oColumnHeaderMenu = new ColumnMenu({
2026
- _quickActions: [this._oQuickActionContainer],
2027
- _items: [this._oItemContainer]
2028
- });
2029
- }
2030
- this._oQuickActionContainer.setAssociation("column", oColumn);
2031
- this._oItemContainer.setAssociation("column", oColumn);
2032
-
2033
- Promise.all([
2034
- this._oQuickActionContainer.initializeQuickActions(),
2035
- this._oItemContainer.initializeItems()
2036
- ]).then(function() {
2037
- if (this._oQuickActionContainer.hasQuickActions() || this._oItemContainer.hasItems()) {
2038
- this._oColumnHeaderMenu.openBy(oColumn);
2039
- }
2040
- }.bind(this));
2041
- }.bind(this));
2042
- };
2043
-
2044
2093
  Table.prototype._onCustomSort = function(oEvent, sSortOrder) {
2045
2094
  var sSortProperty = oEvent.getParameter("property");
2046
2095
 
@@ -2272,7 +2321,6 @@ sap.ui.define([
2272
2321
  /**
2273
2322
  * Defines the rows/items aggregation binding
2274
2323
  *
2275
- * @returns {Promise} A <code>Promise</code> that resolves when the rows are bound
2276
2324
  * @private
2277
2325
  */
2278
2326
  Table.prototype.bindRows = function() {
@@ -2280,27 +2328,36 @@ sap.ui.define([
2280
2328
  return;
2281
2329
  }
2282
2330
 
2331
+ if (this._bFinalzingPropertiesOnModification) {
2332
+ this.propertiesFinalized().then(function() {
2333
+ this.bindRows();
2334
+ }.bind(this));
2335
+ return;
2336
+ }
2337
+
2283
2338
  var oBindingInfo = {};
2284
2339
 
2285
2340
  this.getControlDelegate().updateBindingInfo(this, oBindingInfo);
2286
2341
 
2287
- if (oBindingInfo.path) {
2288
- this._oTable.setShowOverlay(false);
2289
- if (this._oRowTemplate) {
2290
- oBindingInfo.template = this._oRowTemplate;
2291
- } else {
2292
- delete oBindingInfo.template;
2293
- }
2294
-
2295
- Table._addBindingListener(oBindingInfo, "dataRequested", this._onDataRequested.bind(this));
2296
- Table._addBindingListener(oBindingInfo, "dataReceived", this._onDataReceived.bind(this));
2297
- Table._addBindingListener(oBindingInfo, "change", this._onBindingChange.bind(this));
2342
+ if (!oBindingInfo.path) {
2343
+ return;
2344
+ }
2298
2345
 
2299
- this._updateColumnsBeforeBinding();
2300
- this.getControlDelegate().updateBinding(this, oBindingInfo, this._bForceRebind ? null : this.getRowBinding());
2301
- this._updateInnerTableNoData();
2302
- this._bForceRebind = false;
2346
+ if (this._oRowTemplate) {
2347
+ oBindingInfo.template = this._oRowTemplate;
2348
+ } else {
2349
+ delete oBindingInfo.template;
2303
2350
  }
2351
+
2352
+ Table._addBindingListener(oBindingInfo, "dataRequested", this._onDataRequested.bind(this));
2353
+ Table._addBindingListener(oBindingInfo, "dataReceived", this._onDataReceived.bind(this));
2354
+ Table._addBindingListener(oBindingInfo, "change", this._onBindingChange.bind(this));
2355
+
2356
+ this._oTable.setShowOverlay(false);
2357
+ this._updateColumnsBeforeBinding();
2358
+ this.getControlDelegate().updateBinding(this, oBindingInfo, this._bForceRebind ? null : this.getRowBinding());
2359
+ this._updateInnerTableNoData();
2360
+ this._bForceRebind = false;
2304
2361
  };
2305
2362
 
2306
2363
  /**
@@ -2515,8 +2572,8 @@ sap.ui.define([
2515
2572
  TableSettings.showPanel(this, "Columns");
2516
2573
  }
2517
2574
 
2518
- function onShowFilterDialog(oEvent, aFilterableProperties) {
2519
- TableSettings.showPanel(this, "Filter", aFilterableProperties);
2575
+ function showFilterDialog(oTable) {
2576
+ return TableSettings.showPanel(oTable, "Filter");
2520
2577
  }
2521
2578
 
2522
2579
  // TODO: move to a base util that can be used by most aggregations
@@ -2594,6 +2651,11 @@ sap.ui.define([
2594
2651
  this._oFilterInfoBarInvisibleText = null;
2595
2652
  }
2596
2653
 
2654
+ if (this._oColumnHeaderMenu) {
2655
+ this._oColumnHeaderMenu.destroy();
2656
+ this._oColumnHeaderMenu = null;
2657
+ }
2658
+
2597
2659
  Control.prototype.exit.apply(this, arguments);
2598
2660
  };
2599
2661
 
@@ -11,7 +11,6 @@ sap.ui.define([
11
11
  'sap/ui/mdc/condition/FilterOperatorUtil',
12
12
  'sap/ui/mdc/condition/FilterConverter',
13
13
  'sap/ui/mdc/enum/SelectType',
14
- 'sap/ui/mdc/enum/OutParameterMode',
15
14
  'sap/ui/mdc/enum/ConditionValidated',
16
15
  'sap/ui/model/Context',
17
16
  'sap/ui/model/FormatException',
@@ -28,7 +27,6 @@ sap.ui.define([
28
27
  FilterOperatorUtil,
29
28
  FilterConverter,
30
29
  SelectType,
31
- OutParameterMode,
32
30
  ConditionValidated,
33
31
  Context,
34
32
  FormatException,
@@ -82,7 +80,7 @@ sap.ui.define([
82
80
  * @param {object} [mSettings] Initial settings for the new element
83
81
  * @class Element for the <code>FieldHelp</code> association in the {@link sap.ui.mdc.field.FieldBase FieldBase} controls.
84
82
  * @extends sap.ui.mdc.Element
85
- * @version 1.110.0
83
+ * @version 1.111.0
86
84
  * @constructor
87
85
  * @abstract
88
86
  * @private
@@ -336,8 +334,6 @@ sap.ui.define([
336
334
  * @param {object} [oConfig.delegate] Field delegate to handle model-specific logic (required for condition panel)
337
335
  * @param {object} [oConfig.delegateName] Field delegate name to handle model-specific logic (required for condition panel)
338
336
  * @param {object} [oConfig.payload] Payload of the field delegate (required for condition panel)
339
- * @param {string} [oConfig.conditionModelName] Name of the <code>ConditionModel</code>, if bound to one (required if used for {@link sap.ui.mdc.FilterField FilterField})
340
- * @param {string} [oConfig.defaultOperatorName] Name of the default <code>Operator</code> (required if used for {@link sap.ui.mdc.FilterField FilterField})
341
337
  * @returns {this} Reference to <code>this</code> in order to allow method chaining
342
338
  * @private
343
339
  * @ui5-restricted sap.ui.mdc.field.FieldBase
@@ -645,15 +641,12 @@ sap.ui.define([
645
641
  * @private
646
642
  * @ui5-restricted sap.ui.mdc.field.FieldBase
647
643
  */
648
- ValueHelp.prototype.shouldOpenOnClick = function () { // was openByClick before, better naming?
649
-
650
- var oContainer = _getValueHelpContainer.call(this);
651
-
652
- if (oContainer) {
653
- return oContainer.shouldOpenOnClick(); // TODO: needed async to load content
654
- }
655
-
656
- return false;
644
+ ValueHelp.prototype.shouldOpenOnClick = function () {
645
+ var oTypeahead = this.getTypeahead();
646
+ var oDialog = this.getDialog();
647
+ var bTypeaheadEnabled = oTypeahead && (oTypeahead.getUseAsValueHelp() || !!oDialog); // Prefer typeahead, but only if dialog is available or dialog-like usage is enabled
648
+ var oContainer = bTypeaheadEnabled ? oTypeahead : oDialog;
649
+ return oContainer && oContainer.shouldOpenOnClick();
657
650
  };
658
651
 
659
652
  /**
@@ -741,30 +734,6 @@ sap.ui.define([
741
734
  return false;
742
735
  };
743
736
 
744
- ValueHelp.prototype.getTextForKey = function (vKey, oContext, oBindingContext, oConditionModel, sConditionModelName) {
745
- return this.getItemForValue({
746
- parsedValue: vKey,
747
- value: vKey,
748
- context: oContext,
749
- bindingContext: oBindingContext,
750
- conditionModel: oConditionModel,
751
- conditionModelName: sConditionModelName,
752
- checkKey: true,
753
- exception: FormatException,
754
- caseSensitive: true // case sensitive as used to get description for known key
755
- });
756
- };
757
-
758
- ValueHelp.prototype.getKeyForText = function(sText, oContext) {
759
- return this.getItemForValue({
760
- value: sText,
761
- context: oContext,
762
- checkDescription: true,
763
- exception: ParseException,
764
- caseSensitive: true // case sensitive as used to get description for known description
765
- });
766
- };
767
-
768
737
  /**
769
738
  * Determines the item (key and description) for a given value.
770
739
  *
@@ -783,8 +752,6 @@ sap.ui.define([
783
752
  * @param {sap.ui.model.Context} [oConfig.bindingContext] <code>BindingContext</code> of the checked field. Inside a table the <code>ValueHelp</code> element might be connected to a different row.
784
753
  * @param {boolean} oConfig.checkKey If set, the value help checks only if there is an item with the given key. This is set to <code>false</code> if the value cannot be a valid key because of type validation.
785
754
  * @param {boolean} oConfig.checkDescription If set, the value help checks only if there is an item with the given description. This is set to <code>false</code> if only the key is used in the field.
786
- * @param {sap.ui.mdc.condition.ConditionModel} [oConfig.conditionModel] <code>ConditionModel</code>, in case of <code>FilterField</code>
787
- * @param {string} [oConfig.conditionModelName] Name of the <code>ConditionModel</code>, in case of <code>FilterField</code>
788
755
  * @param {boolean} [oConfig.caseSensitive] If set, the check is done case sensitive
789
756
  * @param {sap.ui.core.Control} oConfig.control Instance of the calling control
790
757
  * @returns {Promise<sap.ui.mdc.valuehelp.ValueHelpItem>} Promise returning object containing description, key and payload.
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @class The action for an {@link sap.ui.mdc.ActionToolbar ActionToolbar}) control
22
22
  * @extends sap.ui.core.Control
23
23
  * @author SAP SE
24
- * @version 1.110.0
24
+ * @version 1.111.0
25
25
  * @constructor
26
26
  * @private
27
27
  * @since 1.58
@@ -22,7 +22,7 @@ function (Control, Renderer, Core, jQuery
22
22
  * @class The Chart control creates a chart based on metadata and the configuration specified.
23
23
  * @extends sap.ui.core.Control
24
24
  * @author SAP SE
25
- * @version 1.110.0
25
+ * @version 1.111.0
26
26
  * @constructor
27
27
  * @experimental As of version 1.105
28
28
  * @private
@@ -28,7 +28,7 @@ sap.ui.define([],
28
28
  * Renders the HTML for the given control, using the provided {@link sap.ui.core.RenderManager}.
29
29
  *
30
30
  * @param {sap.ui.core.RenderManager} oRm The RenderManager that can be used for writing to the render output buffer
31
- * @param {sap.ui.mdc.Chart} oMDCChart An object representation of the control that should be rendered
31
+ * @param {sap.ui.mdc.chart.ChartImplementationContainer} oChartImplContainer An object representation of the control that should be rendered
32
32
  */
33
33
  ChartRenderer.render = function(oRm, oChartImplContainer) {
34
34
  oRm.openStart("div", oChartImplContainer);
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @class The ChartSelectionDetails control creates a sap.m.SelectionDetails popover based on metadata and the configuration specified.
34
34
  * @extends sap.m.SelectionDetails
35
35
  * @author SAP SE
36
- * @version 1.110.0
36
+ * @version 1.111.0
37
37
  * @constructor
38
38
  * @experimental As of version 1.88
39
39
  * @private
@@ -18,15 +18,19 @@ sap.ui.define([], function () {
18
18
  var ChartSettings = {
19
19
 
20
20
  showPanel: function (oControl, sP13nType, oSource, aProperties) {
21
- ChartSettings["showUI" + sP13nType](oControl, oSource);
21
+ return ChartSettings["showUI" + sP13nType](oControl, oSource);
22
22
  },
23
23
 
24
24
  showUIChart: function (oControl, oSource) {
25
- oControl.getEngine().uimanager.show(oControl, "Item");
25
+ return oControl.getEngine().uimanager.show(oControl, "Item");
26
26
  },
27
27
 
28
28
  showUISort: function(oControl, oSource){
29
- oControl.getEngine().uimanager.show(oControl, "Sort");
29
+ return oControl.getEngine().uimanager.show(oControl, "Sort");
30
+ },
31
+
32
+ showUIFilter: function(oControl, oSource){
33
+ return oControl.getEngine().uimanager.show(oControl, "Filter");
30
34
  }
31
35
 
32
36
  };
@@ -16,7 +16,9 @@ sap.ui.define([
16
16
  "./ChartSelectionDetails",
17
17
  "sap/m/ToolbarSeparator",
18
18
  "sap/m/OverflowToolbarLayoutData",
19
- "sap/ui/core/library"
19
+ "sap/ui/core/library",
20
+ "sap/ui/Device",
21
+ "sap/ui/core/ShortcutHintsMixin"
20
22
  ],
21
23
  function (
22
24
  Core,
@@ -30,7 +32,9 @@ sap.ui.define([
30
32
  ChartSelectionDetails,
31
33
  ToolbarSeparator,
32
34
  OverflowToolbarLayoutData,
33
- coreLibrary
35
+ coreLibrary,
36
+ Device,
37
+ ShortcutHintsMixin
34
38
  ) {
35
39
  "use strict";
36
40
 
@@ -45,7 +49,7 @@ sap.ui.define([
45
49
  * @class The ChartToolbar control is a sap.m.OverflowToolbar based on metadata and the configuration specified.
46
50
  * @extends sap.ui.mdc.ActionToolbar
47
51
  * @author SAP SE
48
- * @version 1.110.0
52
+ * @version 1.111.0
49
53
  * @constructor
50
54
  * @experimental As of version 1.88
51
55
  * @private
@@ -93,13 +97,14 @@ sap.ui.define([
93
97
  /**add beginning**/
94
98
  this._oTitle = new Title(oMDCChart.getId() + "-title", {
95
99
  text: oMDCChart.getHeader(),
96
- level: oMDCChart.getHeaderLevel()
100
+ level: oMDCChart.getHeaderLevel(),
101
+ width: oMDCChart.getHeaderVisible() ? undefined : "0px"
97
102
  });
98
103
  this.addBegin(this._oTitle);
99
104
 
100
105
  /** variant management */
101
- if (oMDCChart.getVariant()){
102
- this.addVariantManagement(oMDCChart.getVariant());
106
+ if (oMDCChart.getAggregation("variant")){
107
+ this.addVariantManagement(oMDCChart.getAggregation("variant"));
103
108
  }
104
109
 
105
110
  /**add end **/
@@ -196,6 +201,14 @@ sap.ui.define([
196
201
  }
197
202
  }
198
203
  });
204
+
205
+ ShortcutHintsMixin.addConfig(this._oSettingsBtn, {
206
+ addAccessibilityLabel: true,
207
+ messageBundleKey: Device.os.macintosh ? "mdc.PERSONALIZATION_SHORTCUT_MAC" : "mdc.PERSONALIZATION_SHORTCUT" // Cmd+, or Ctrl+,
208
+ },
209
+ this
210
+ );
211
+
199
212
  this.addEnd(this._oSettingsBtn);
200
213
  this._chartInternalButtonsToEnable.push(this._oSettingsBtn);
201
214
  }
@@ -284,6 +297,10 @@ sap.ui.define([
284
297
  }
285
298
  };
286
299
 
300
+ ChartToolbar.prototype._getVariantReference = function() {
301
+ return this._oVariantManagement;
302
+ };
303
+
287
304
  ChartToolbar.prototype._getZoomEnablement = function (oMDCChart) {
288
305
  var zoomInfo;
289
306
 
@@ -351,5 +368,19 @@ sap.ui.define([
351
368
  this._oTitle.setLevel(sHeaderLevel);
352
369
  };
353
370
 
371
+ ChartToolbar.prototype.setHeaderVisible = function(bVisible) {
372
+ if (this._oTitle) {
373
+ this._oTitle.setWidth(bVisible ? undefined : "0px");
374
+ }
375
+ };
376
+
377
+ /**
378
+ * @private
379
+ * @ui5-restricted sap.ui.mdc
380
+ */
381
+ ChartToolbar.prototype.getSettingsButton = function() {
382
+ return this._oSettingsBtn;
383
+ };
384
+
354
385
  return ChartToolbar;
355
386
  });
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.mdc.util.PropertyHelper
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.110.0
29
+ * @version 1.111.0
30
30
  *
31
31
  * @private
32
32
  * @experimental
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  *
29
29
  * @namespace
30
30
  * @author SAP SE
31
- * @version 1.110.0
31
+ * @version 1.111.0
32
32
  * @since 1.61.0
33
33
  * @alias sap.ui.mdc.condition.Condition
34
34
  *
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  *
25
25
  * @namespace
26
26
  * @author SAP SE
27
- * @version 1.110.0
27
+ * @version 1.111.0
28
28
  * @private
29
29
  * @ui5-restricted sap.ui.mdc
30
30
  * @experimental As of version 1.74
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  * @extends sap.ui.model.json.JSONModel
36
36
  *
37
37
  * @author SAP SE
38
- * @version 1.110.0
38
+ * @version 1.111.0
39
39
  * @since 1.48.0
40
40
  * @alias sap.ui.mdc.condition.ConditionModel
41
41
  *
@@ -24,7 +24,7 @@ function(
24
24
  *
25
25
  * @namespace
26
26
  * @author SAP SE
27
- * @version 1.110.0
27
+ * @version 1.111.0
28
28
  * @since 1.78.0
29
29
  * @alias sap.ui.mdc.condition.FilterConverter
30
30
  *
@@ -54,7 +54,7 @@ function(
54
54
  *
55
55
  * @namespace
56
56
  * @author SAP SE
57
- * @version 1.110.0
57
+ * @version 1.111.0
58
58
  * @since 1.73.0
59
59
  * @alias sap.ui.mdc.condition.FilterOperatorUtil
60
60
  *
@@ -1227,7 +1227,7 @@ function(
1227
1227
  * @returns {sap.ui.mdc.condition.Operator} Operator object
1228
1228
  *
1229
1229
  * @private
1230
- * @ui5-restricted sap.ui.mdc.Field, sap.ui.mdc.field.FieldBase, sap.ui.mdc.field.ConditionType, sap.ui.mdc.field.FieldHelpBase
1230
+ * @ui5-restricted sap.ui.mdc.Field, sap.ui.mdc.field.FieldBase, sap.ui.mdc.field.ConditionType, sap.ui.mdc.valuehelp.base.Content
1231
1231
  */
1232
1232
  getEQOperator: function(aOperators) {
1233
1233
 
@@ -84,7 +84,7 @@ sap.ui.define([
84
84
  * @param {string} [oConfiguration.additionalInfo] additionalInfo text for the operator. Will be shown in the operator suggest as second column. If not used (undefined) the Include or Exclude information of the operator is used.
85
85
  * @constructor
86
86
  * @author SAP SE
87
- * @version 1.110.0
87
+ * @version 1.111.0
88
88
  * @private
89
89
  * @ui5-restricted sap.fe
90
90
  * @MDC_PUBLIC_CANDIDATE
@@ -51,7 +51,7 @@ sap.ui.define([
51
51
  * @extends sap.m.DynamicDateOption
52
52
  *
53
53
  * @author SAP SE
54
- * @version 1.110.0
54
+ * @version 1.111.0
55
55
  *
56
56
  * @private
57
57
  * @ui5-restricted sap.ui.mdc