@openui5/sap.ui.mdc 1.141.2 → 1.143.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 (189) hide show
  1. package/README.md +2 -2
  2. package/REUSE.toml +39 -1
  3. package/THIRDPARTY.txt +36 -3
  4. package/package.json +4 -4
  5. package/src/sap/ui/mdc/.library +1 -1
  6. package/src/sap/ui/mdc/ActionToolbar.js +89 -63
  7. package/src/sap/ui/mdc/Chart.js +1 -1
  8. package/src/sap/ui/mdc/Control.js +1 -1
  9. package/src/sap/ui/mdc/DefaultTypeMap.js +1 -1
  10. package/src/sap/ui/mdc/Element.js +1 -1
  11. package/src/sap/ui/mdc/Field.js +31 -8
  12. package/src/sap/ui/mdc/FilterBar.js +1 -1
  13. package/src/sap/ui/mdc/FilterField.js +11 -11
  14. package/src/sap/ui/mdc/Geomap.js +571 -0
  15. package/src/sap/ui/mdc/GeomapDelegate.js +285 -0
  16. package/src/sap/ui/mdc/GeomapRenderer.js +76 -0
  17. package/src/sap/ui/mdc/Link.js +1 -1
  18. package/src/sap/ui/mdc/MultiValueField.js +7 -7
  19. package/src/sap/ui/mdc/Table.js +141 -116
  20. package/src/sap/ui/mdc/TableDelegate.js +3 -2
  21. package/src/sap/ui/mdc/ValueHelp.js +1 -1
  22. package/src/sap/ui/mdc/ValueHelpDelegate.js +4 -1
  23. package/src/sap/ui/mdc/actiontoolbar/ActionToolbarAction.js +1 -1
  24. package/src/sap/ui/mdc/chart/ChartImplementationContainer.js +1 -1
  25. package/src/sap/ui/mdc/chart/ChartSelectionDetails.js +1 -1
  26. package/src/sap/ui/mdc/chart/PropertyHelper.js +1 -1
  27. package/src/sap/ui/mdc/chart/ToolbarControlFactory.js +1 -1
  28. package/src/sap/ui/mdc/chart/Util.js +5 -2
  29. package/src/sap/ui/mdc/condition/Condition.js +1 -1
  30. package/src/sap/ui/mdc/condition/ConditionConverter.js +1 -1
  31. package/src/sap/ui/mdc/condition/ConditionModel.js +1 -1
  32. package/src/sap/ui/mdc/condition/FilterConverter.js +1 -1
  33. package/src/sap/ui/mdc/condition/FilterOperatorUtil.js +1 -1
  34. package/src/sap/ui/mdc/condition/Operator.js +1 -1
  35. package/src/sap/ui/mdc/condition/OperatorDynamicDateOption.js +1 -1
  36. package/src/sap/ui/mdc/condition/RangeOperator.js +1 -1
  37. package/src/sap/ui/mdc/designtime/geomap/Geomap.designtime.js +23 -0
  38. package/src/sap/ui/mdc/enums/GeomapControlPosition.js +46 -0
  39. package/src/sap/ui/mdc/enums/TableActionPosition.js +123 -0
  40. package/src/sap/ui/mdc/enums/TablePopinDisplay.js +36 -0
  41. package/src/sap/ui/mdc/field/ConditionType.js +1 -1
  42. package/src/sap/ui/mdc/field/ConditionTypeMixin.js +1 -1
  43. package/src/sap/ui/mdc/field/ConditionsType.js +1 -1
  44. package/src/sap/ui/mdc/field/CustomFieldInfo.js +1 -1
  45. package/src/sap/ui/mdc/field/DynamicDateRangeConditionsType.js +1 -1
  46. package/src/sap/ui/mdc/field/FieldBase.js +137 -66
  47. package/src/sap/ui/mdc/field/FieldInfoBase.js +1 -1
  48. package/src/sap/ui/mdc/field/FieldInput.js +1 -1
  49. package/src/sap/ui/mdc/field/FieldInputRenderUtil.js +1 -1
  50. package/src/sap/ui/mdc/field/FieldMultiInput.js +1 -1
  51. package/src/sap/ui/mdc/field/FieldSelect.js +7 -1
  52. package/src/sap/ui/mdc/field/ListFieldHelpItem.js +1 -1
  53. package/src/sap/ui/mdc/field/MultiValueFieldDelegate.js +22 -0
  54. package/src/sap/ui/mdc/field/MultiValueFieldItem.js +1 -1
  55. package/src/sap/ui/mdc/field/TokenDisplay.js +1 -1
  56. package/src/sap/ui/mdc/field/TokenizerDisplay.js +1 -1
  57. package/src/sap/ui/mdc/field/content/ContentFactory.js +3 -0
  58. package/src/sap/ui/mdc/filterbar/FilterBarBase.js +35 -1
  59. package/src/sap/ui/mdc/filterbar/FilterBarBaseRenderer.js +3 -0
  60. package/src/sap/ui/mdc/filterbar/PropertyHelper.js +1 -1
  61. package/src/sap/ui/mdc/filterbar/p13n/AdaptationFilterBar.js +1 -1
  62. package/src/sap/ui/mdc/filterbar/vh/FilterBar.js +1 -1
  63. package/src/sap/ui/mdc/flexibility/Chart.flexibility.js +1 -1
  64. package/src/sap/ui/mdc/flexibility/FilterBar.flexibility.js +1 -1
  65. package/src/sap/ui/mdc/flexibility/FilterItemFlex.js +1 -1
  66. package/src/sap/ui/mdc/flexibility/ItemBaseFlex.js +1 -1
  67. package/src/sap/ui/mdc/flexibility/SortFlex.js +12 -5
  68. package/src/sap/ui/mdc/flexibility/Table.flexibility.js +17 -11
  69. package/src/sap/ui/mdc/flexibility/actiontoolbar/CombineAction.js +1 -1
  70. package/src/sap/ui/mdc/flexibility/actiontoolbar/SplitAction.js +1 -1
  71. package/src/sap/ui/mdc/flexibility/helpers/getAffectedSorter.js +25 -0
  72. package/src/sap/ui/mdc/geomap/Item.js +48 -0
  73. package/src/sap/ui/mdc/geomap/PropertyHelper.js +70 -0
  74. package/src/sap/ui/mdc/library.js +19 -4
  75. package/src/sap/ui/mdc/link/Factory.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 +15 -1
  83. package/src/sap/ui/mdc/messagebundle_ar.properties +8 -0
  84. package/src/sap/ui/mdc/messagebundle_bg.properties +8 -0
  85. package/src/sap/ui/mdc/messagebundle_ca.properties +8 -0
  86. package/src/sap/ui/mdc/messagebundle_cnr.properties +8 -0
  87. package/src/sap/ui/mdc/messagebundle_cs.properties +8 -0
  88. package/src/sap/ui/mdc/messagebundle_cy.properties +9 -1
  89. package/src/sap/ui/mdc/messagebundle_da.properties +8 -0
  90. package/src/sap/ui/mdc/messagebundle_de.properties +10 -2
  91. package/src/sap/ui/mdc/messagebundle_el.properties +9 -1
  92. package/src/sap/ui/mdc/messagebundle_en.properties +9 -1
  93. package/src/sap/ui/mdc/messagebundle_en_GB.properties +9 -1
  94. package/src/sap/ui/mdc/messagebundle_en_US_saprigi.properties +12 -1
  95. package/src/sap/ui/mdc/messagebundle_es.properties +10 -2
  96. package/src/sap/ui/mdc/messagebundle_es_MX.properties +8 -0
  97. package/src/sap/ui/mdc/messagebundle_et.properties +8 -0
  98. package/src/sap/ui/mdc/messagebundle_fi.properties +8 -0
  99. package/src/sap/ui/mdc/messagebundle_fr.properties +11 -3
  100. package/src/sap/ui/mdc/messagebundle_fr_CA.properties +8 -0
  101. package/src/sap/ui/mdc/messagebundle_hi.properties +8 -0
  102. package/src/sap/ui/mdc/messagebundle_hr.properties +9 -1
  103. package/src/sap/ui/mdc/messagebundle_hu.properties +8 -0
  104. package/src/sap/ui/mdc/messagebundle_id.properties +11 -3
  105. package/src/sap/ui/mdc/messagebundle_it.properties +8 -0
  106. package/src/sap/ui/mdc/messagebundle_iw.properties +8 -0
  107. package/src/sap/ui/mdc/messagebundle_ja.properties +9 -1
  108. package/src/sap/ui/mdc/messagebundle_kk.properties +9 -1
  109. package/src/sap/ui/mdc/messagebundle_ko.properties +8 -0
  110. package/src/sap/ui/mdc/messagebundle_lt.properties +8 -0
  111. package/src/sap/ui/mdc/messagebundle_lv.properties +8 -0
  112. package/src/sap/ui/mdc/messagebundle_mk.properties +8 -0
  113. package/src/sap/ui/mdc/messagebundle_ms.properties +9 -1
  114. package/src/sap/ui/mdc/messagebundle_nl.properties +8 -0
  115. package/src/sap/ui/mdc/messagebundle_no.properties +8 -0
  116. package/src/sap/ui/mdc/messagebundle_pl.properties +8 -0
  117. package/src/sap/ui/mdc/messagebundle_pt.properties +9 -1
  118. package/src/sap/ui/mdc/messagebundle_pt_PT.properties +8 -0
  119. package/src/sap/ui/mdc/messagebundle_ro.properties +9 -1
  120. package/src/sap/ui/mdc/messagebundle_ru.properties +9 -1
  121. package/src/sap/ui/mdc/messagebundle_sh.properties +8 -0
  122. package/src/sap/ui/mdc/messagebundle_sk.properties +8 -0
  123. package/src/sap/ui/mdc/messagebundle_sl.properties +9 -1
  124. package/src/sap/ui/mdc/messagebundle_sr.properties +8 -0
  125. package/src/sap/ui/mdc/messagebundle_sv.properties +8 -0
  126. package/src/sap/ui/mdc/messagebundle_th.properties +8 -0
  127. package/src/sap/ui/mdc/messagebundle_tr.properties +9 -1
  128. package/src/sap/ui/mdc/messagebundle_uk.properties +8 -0
  129. package/src/sap/ui/mdc/messagebundle_vi.properties +11 -3
  130. package/src/sap/ui/mdc/messagebundle_zh_CN.properties +9 -1
  131. package/src/sap/ui/mdc/messagebundle_zh_TW.properties +8 -0
  132. package/src/sap/ui/mdc/mixin/AdaptationMixin.js +1 -1
  133. package/src/sap/ui/mdc/mixin/DelegateMixin.js +1 -1
  134. package/src/sap/ui/mdc/mixin/FilterBarLayoutMixin.js +1 -1
  135. package/src/sap/ui/mdc/mixin/FilterIntegrationMixin.js +1 -1
  136. package/src/sap/ui/mdc/mixin/PromiseMixin.js +1 -1
  137. package/src/sap/ui/mdc/mixin/PropertyHelperMixin.js +1 -1
  138. package/src/sap/ui/mdc/odata/TypeMap.js +1 -1
  139. package/src/sap/ui/mdc/odata/v4/GeomapDelegate.js +60 -0
  140. package/src/sap/ui/mdc/odata/v4/TableDelegate.js +53 -2
  141. package/src/sap/ui/mdc/odata/v4/TypeMap.js +1 -1
  142. package/src/sap/ui/mdc/odata/v4/vizChart/ChartDelegate.js +16 -0
  143. package/src/sap/ui/mdc/p13n/PropertyHelper.js +1 -1
  144. package/src/sap/ui/mdc/p13n/StateUtil.js +1 -1
  145. package/src/sap/ui/mdc/p13n/panels/ChartItemPanel.js +3 -0
  146. package/src/sap/ui/mdc/p13n/subcontroller/ColumnFreezeController.js +1 -1
  147. package/src/sap/ui/mdc/p13n/subcontroller/ShowDetailsController.js +1 -1
  148. package/src/sap/ui/mdc/rules/Table.support.js +149 -118
  149. package/src/sap/ui/mdc/table/ActionLayoutData.js +47 -0
  150. package/src/sap/ui/mdc/table/Column.js +40 -186
  151. package/src/sap/ui/mdc/table/ColumnSettings.js +1 -1
  152. package/src/sap/ui/mdc/table/CreationRow.js +1 -1
  153. package/src/sap/ui/mdc/table/DragDropConfig.js +1 -1
  154. package/src/sap/ui/mdc/table/GridTableType.js +35 -21
  155. package/src/sap/ui/mdc/table/ODataV4PropertyHelper.js +1 -1
  156. package/src/sap/ui/mdc/table/PropertyHelper.js +1 -1
  157. package/src/sap/ui/mdc/table/ResponsiveColumnSettings.js +1 -1
  158. package/src/sap/ui/mdc/table/ResponsiveTableType.js +97 -14
  159. package/src/sap/ui/mdc/table/RowActionItem.js +1 -1
  160. package/src/sap/ui/mdc/table/RowSettings.js +1 -1
  161. package/src/sap/ui/mdc/table/TableSettings.js +34 -7
  162. package/src/sap/ui/mdc/table/TableTypeBase.js +38 -7
  163. package/src/sap/ui/mdc/table/utils/Personalization.js +1 -1
  164. package/src/sap/ui/mdc/themes/base/Geomap.less +50 -0
  165. package/src/sap/ui/mdc/ushell/SemanticObjectMapping.js +1 -1
  166. package/src/sap/ui/mdc/ushell/SemanticObjectMappingItem.js +1 -1
  167. package/src/sap/ui/mdc/ushell/SemanticObjectUnavailableAction.js +1 -1
  168. package/src/sap/ui/mdc/util/InfoBar.js +1 -1
  169. package/src/sap/ui/mdc/util/PromiseCache.js +1 -1
  170. package/src/sap/ui/mdc/util/PropertyHelper.js +1 -1
  171. package/src/sap/ui/mdc/util/PropertyHelperUtil.js +1 -1
  172. package/src/sap/ui/mdc/valuehelp/Dialog.js +2 -2
  173. package/src/sap/ui/mdc/valuehelp/FilterBar.js +22 -3
  174. package/src/sap/ui/mdc/valuehelp/Popover.js +1 -1
  175. package/src/sap/ui/mdc/valuehelp/base/Container.js +1 -1
  176. package/src/sap/ui/mdc/valuehelp/base/Content.js +1 -1
  177. package/src/sap/ui/mdc/valuehelp/base/DefineConditionPanel.js +140 -26
  178. package/src/sap/ui/mdc/valuehelp/base/DialogTab.js +1 -1
  179. package/src/sap/ui/mdc/valuehelp/base/FilterableListContent.js +4 -3
  180. package/src/sap/ui/mdc/valuehelp/base/ListContent.js +1 -1
  181. package/src/sap/ui/mdc/valuehelp/content/Bool.js +1 -1
  182. package/src/sap/ui/mdc/valuehelp/content/Conditions.js +1 -1
  183. package/src/sap/ui/mdc/valuehelp/content/FixedList.js +1 -1
  184. package/src/sap/ui/mdc/valuehelp/content/FixedListItem.js +1 -1
  185. package/src/sap/ui/mdc/valuehelp/content/MDCTable.js +1 -1
  186. package/src/sap/ui/mdc/valuehelp/content/MTable.js +7 -5
  187. package/test/sap/ui/mdc/testutils/opa/filterbar/Actions.js +36 -0
  188. package/test/sap/ui/mdc/testutils/opa/filterfield/Actions.js +20 -3
  189. package/test/sap/ui/mdc/testutils/opa/valueHelp/Actions.js +33 -1
@@ -13,6 +13,7 @@ sap.ui.define([
13
13
  "./table/ResponsiveTableType",
14
14
  "./table/PropertyHelper",
15
15
  "./table/utils/Personalization",
16
+ "./table/ActionLayoutData",
16
17
  "./mixin/FilterIntegrationMixin",
17
18
  "sap/m/Text",
18
19
  "sap/m/ToolbarSpacer",
@@ -65,6 +66,7 @@ sap.ui.define([
65
66
  ResponsiveTableType,
66
67
  PropertyHelper,
67
68
  PersonalizationUtils,
69
+ ActionLayoutData,
68
70
  FilterIntegrationMixin,
69
71
  Text,
70
72
  ToolbarSpacer,
@@ -670,6 +672,25 @@ sap.ui.define([
670
672
  }
671
673
  },
672
674
 
675
+ /**
676
+ * Additional table-related actions that are positioned together with other table-generated actions, based on the
677
+ * {@link sap.ui.mdc.table.ActionLayoutData ActionLayoutData} provided.
678
+ *
679
+ * <b>Note:</b> All actions should use layout data of the {@link sap.ui.mdc.table.ActionLayoutData ActionLayoutData} type to ensure
680
+ * correct ordering. Actions that do not use this layout data will be placed after the table-generated actions.<br>
681
+ * <b>Note:</b> Like other table-generated actions, these actions are excluded from the UI adaptation.
682
+ *
683
+ * @since 1.143
684
+ */
685
+ tableActions: {
686
+ type: "sap.ui.core.Control",
687
+ multiple: true,
688
+ forwarding: {
689
+ getter: "_createToolbar",
690
+ aggregation: "controlActions"
691
+ }
692
+ },
693
+
673
694
  /**
674
695
  * <code>VariantManagement<code> control for the table.
675
696
  */
@@ -954,7 +975,8 @@ sap.ui.define([
954
975
 
955
976
  this._oManagedObjectModel = new ManagedObjectModel(this, {
956
977
  hasGrandTotal: false,
957
- activeP13nModes: createActiveP13nModesMap(this)
978
+ activeP13nModes: createActiveP13nModesMap(this),
979
+ rowCount: undefined
958
980
  });
959
981
  this._oManagedObjectModel.setDefaultBindingMode(BindingMode.OneWay);
960
982
  this.setModel(this._oManagedObjectModel, "$sap.ui.mdc.Table");
@@ -981,6 +1003,10 @@ sap.ui.define([
981
1003
 
982
1004
  Control.prototype.applySettings.call(this, mSettings, oScope);
983
1005
  this.initControlDelegate();
1006
+
1007
+ // onModification is not called if changes are applied during XML preprocessing. For the initial validation, this call leads to duplicate log
1008
+ // entries if changes are applied on runtime (onModification is called).
1009
+ validateStateAgainstPropertyInfo(this);
984
1010
  };
985
1011
 
986
1012
  Table.prototype._setToolbarBetween = function(oToolBar) {
@@ -1285,21 +1311,13 @@ sap.ui.define([
1285
1311
  };
1286
1312
 
1287
1313
  Table.prototype.setHeaderLevel = function(sLevel) {
1288
- if (this.getHeaderLevel() === sLevel) {
1289
- return this;
1290
- }
1291
1314
  this.setProperty("headerLevel", sLevel, true);
1292
- this._oTitle?.setLevel(sLevel);
1293
1315
  this._updateVariantManagementStyle();
1294
1316
  return this;
1295
1317
  };
1296
1318
 
1297
1319
  Table.prototype.setHeaderStyle = function(sStyle) {
1298
- if (this.getHeaderStyle() === sStyle) {
1299
- return this;
1300
- }
1301
1320
  this.setProperty("headerStyle", sStyle, true);
1302
-
1303
1321
  const sHeaderStyle = this.getHeaderStyle() || TitleLevel[ThemeParameters.get({name: "_sap_ui_mdc_Table_HeaderStyle"})];
1304
1322
  this._oTitle?.setTitleStyle(sHeaderStyle);
1305
1323
  this._updateVariantManagementStyle();
@@ -1352,6 +1370,7 @@ sap.ui.define([
1352
1370
  if (this.getEnableColumnResize() !== bOldEnableColumnResize) {
1353
1371
  this._updateColumnResize();
1354
1372
  this._updateAdaptation();
1373
+ updateColumnMenu(this);
1355
1374
  }
1356
1375
 
1357
1376
  return this;
@@ -1384,8 +1403,51 @@ sap.ui.define([
1384
1403
  await this.finalizePropertyHelper();
1385
1404
  await this.rebind();
1386
1405
  }
1406
+
1407
+ await validateStateAgainstPropertyInfo(this);
1387
1408
  };
1388
1409
 
1410
+ /**
1411
+ * Validates the current state of the table against the available property info, and logs a warning in case of invalid state.
1412
+ *
1413
+ * If the property info is not final, the state is validated against the <code>propertyInfo</code> property if defined, otherwise validation is
1414
+ * scheduled after the property info is finalized after being fetched from the delegate.
1415
+ *
1416
+ * Validation succeeds if a state, such as a sort condition, was added and removed in the same change application, even if the property does not
1417
+ * exist.
1418
+ *
1419
+ * Columns are not validated. ItemBaseFlex throws an error if Delegate.addItem does not create a column for a property. This should be the case
1420
+ * if a property does not exist. However, if the delegate just makes something up and creates a column anyway, no validation error occurs
1421
+ * anywhere.
1422
+ *
1423
+ * @param {sap.ui.mdc.Table} oTable Instance of the table
1424
+ * @returns {Promise} Promise that resolves when validation is done
1425
+ */
1426
+ async function validateStateAgainstPropertyInfo(oTable) {
1427
+ const oXConfig = oTable._getXConfig();
1428
+ const mState = {
1429
+ Sort: oTable._getSortedProperties().map((oSortCondition) => oSortCondition.name),
1430
+ Filter: getFilteredProperties(oTable.getFilterConditions()),
1431
+ "Group level": oTable._getGroupedProperties().map((oGroupCondition) => oGroupCondition.name),
1432
+ Aggregation: Object.keys(oTable._getAggregatedProperties()),
1433
+ "Column width": Object.keys(oXConfig?.aggregations?.columns || {}).filter((sKey) => oXConfig.aggregations.columns[sKey].width)
1434
+ };
1435
+ const oPropertyHelper = await oTable.awaitPropertyHelper();
1436
+
1437
+ if (oTable.isPropertyHelperFinal() || oPropertyHelper.getProperties().length > 0) {
1438
+ for (const sStateType in mState) {
1439
+ for (const sPropertyKey of mState[sStateType]) {
1440
+ if (!oPropertyHelper.hasProperty(sPropertyKey)) {
1441
+ Log.error(`Invalid state: ${sStateType} modification exists for non-existent property '${sPropertyKey}'`, oTable);
1442
+ }
1443
+ }
1444
+ }
1445
+ } else {
1446
+ await oTable.propertiesFinalized();
1447
+ await validateStateAgainstPropertyInfo(oTable);
1448
+ }
1449
+ }
1450
+
1389
1451
  Table.prototype.setP13nMode = function(aMode) {
1390
1452
  const aOldP13nMode = this.getP13nMode();
1391
1453
 
@@ -1422,6 +1484,8 @@ sap.ui.define([
1422
1484
 
1423
1485
  if (!deepEqual(aOldP13nMode.sort(), this.getP13nMode().sort())) {
1424
1486
  updateP13nSettings(this);
1487
+ updateColumnMenu(this);
1488
+ this.invalidate(); // Inner columns must update aria-haspopup
1425
1489
  }
1426
1490
 
1427
1491
  return this;
@@ -1467,6 +1531,16 @@ sap.ui.define([
1467
1531
  this.getEngine().register(this, oRegisterConfig);
1468
1532
  };
1469
1533
 
1534
+ function updateColumnMenu(oTable) {
1535
+ const bIsColumnMenuEnabled = oTable.getActiveP13nModes().length > 0 || oTable.getEnableColumnResize();
1536
+
1537
+ if (bIsColumnMenuEnabled) {
1538
+ oTable._createColumnHeaderMenu();
1539
+ } else {
1540
+ oTable._destroyColumnHeaderMenu();
1541
+ }
1542
+ }
1543
+
1470
1544
  function updateP13nSettings(oTable) {
1471
1545
  oTable._updateP13nButton();
1472
1546
 
@@ -1871,17 +1945,8 @@ sap.ui.define([
1871
1945
  });
1872
1946
  };
1873
1947
 
1874
- Table.prototype.setHeader = function(sText) {
1875
- this.setProperty("header", sText, true);
1876
- this._updateHeaderText();
1877
- return this;
1878
- };
1879
-
1880
1948
  Table.prototype.setHeaderVisible = function(bVisible) {
1881
1949
  this.setProperty("headerVisible", bVisible, true);
1882
- if (this._oTitle) {
1883
- this._oTitle.setWidth(this.getHeaderVisible() ? undefined : "0px");
1884
- }
1885
1950
  this._updateInvisibleTitle();
1886
1951
  this._updateVariantManagementStyle();
1887
1952
  return this;
@@ -1903,12 +1968,6 @@ sap.ui.define([
1903
1968
  }
1904
1969
  };
1905
1970
 
1906
- Table.prototype.setShowRowCount = function(bShowCount) {
1907
- this.setProperty("showRowCount", bShowCount, true);
1908
- this._updateHeaderText();
1909
- return this;
1910
- };
1911
-
1912
1971
  Table.prototype.setEnableExport = function(bEnableExport) {
1913
1972
  this.setProperty("enableExport", bEnableExport, true);
1914
1973
  this._updateExportButton();
@@ -1969,11 +2028,29 @@ sap.ui.define([
1969
2028
  }
1970
2029
 
1971
2030
  if (!this._oToolbar) {
1972
- // Create Title
1973
2031
  this._oTitle = new Title(this.getId() + "-title", {
1974
- text: this.getHeader(),
1975
- width: this.getHeaderVisible() ? undefined : "0px",
1976
- level: this.getHeaderLevel(),
2032
+ text: {
2033
+ parts: [
2034
+ {path: "$sap.ui.mdc.Table>/header"},
2035
+ {path: "$sap.ui.mdc.Table>/showRowCount"},
2036
+ {path: "$sap.ui.mdc.Table>/@custom/rowCount"}
2037
+ ],
2038
+ formatter: (sHeader, bShowRowCount, iRowCount) => {
2039
+ if (this._bAnnounceTableUpdate && !this._bSkipAnnounceTableUpdate) {
2040
+ this._bAnnounceTableUpdate = false;
2041
+ MTableUtil.announceTableUpdate(sHeader, bShowRowCount ? iRowCount : undefined);
2042
+ }
2043
+
2044
+ if (bShowRowCount && iRowCount > 0) {
2045
+ this._oNumberFormatInstance ??= NumberFormat.getIntegerInstance({groupingEnabled: true});
2046
+ sHeader += ` (${this._oNumberFormatInstance.format(iRowCount)})`;
2047
+ }
2048
+
2049
+ return sHeader;
2050
+ }
2051
+ },
2052
+ width: "{= ${$sap.ui.mdc.Table>/headerVisible} ? undefined : '0px' }",
2053
+ level: "{$sap.ui.mdc.Table>/headerLevel}",
1977
2054
  titleStyle: this.getHeaderStyle() || TitleLevel[ThemeParameters.get({name: "_sap_ui_mdc_Table_HeaderStyle"})]
1978
2055
  });
1979
2056
  // Create Toolbar
@@ -1987,16 +2064,6 @@ sap.ui.define([
1987
2064
  ],
1988
2065
  visible: "{= !${$sap.ui.mdc.Table>/hideToolbar} }"
1989
2066
  });
1990
- // Enfore the action order according to the UI Guideline
1991
- this._oToolbar.setProperty("_endOrder", [
1992
- "copy",
1993
- "paste",
1994
- "showHideDetails",
1995
- "collapseAll",
1996
- "expandAll",
1997
- "settings",
1998
- "export"
1999
- ].map((sSuffix) => this.getId() + "-" + sSuffix));
2000
2067
 
2001
2068
  this._updateInvisibleTitle();
2002
2069
  }
@@ -2227,16 +2294,14 @@ sap.ui.define([
2227
2294
  };
2228
2295
 
2229
2296
  Table.prototype._getCopyButton = function() {
2230
- if (window.isSecureContext) {
2231
- return this.getCopyProvider()?.getCopyButton({id: this.getId() + "-copy"});
2297
+ if (window.isSecureContext && this.getCopyProvider()) {
2298
+ return TableSettings.createCopyButton(this.getId(), this.getCopyProvider());
2232
2299
  }
2233
2300
  };
2234
2301
 
2235
2302
  Table.prototype._getPasteButton = function() {
2236
2303
  if (this.getShowPasteButton()) {
2237
- if (!this._oPasteButton) {
2238
- this._oPasteButton = TableSettings.createPasteButton(this.getId());
2239
- }
2304
+ this._oPasteButton ??= TableSettings.createPasteButton(this.getId());
2240
2305
  return this._oPasteButton;
2241
2306
  }
2242
2307
  };
@@ -2743,21 +2808,33 @@ sap.ui.define([
2743
2808
  insertFilterInfoBar(this);
2744
2809
  }
2745
2810
 
2746
- if (!this._oColumnHeaderMenu) {
2747
- this._oQuickActionContainer = new QuickActionContainer({table: this});
2748
- this._oColumnHeaderMenu = new ColumnMenu({
2749
- id: this.getId() + "-columnHeaderMenu",
2750
- showTableSettingsButton: true
2751
- });
2752
- this._oColumnHeaderMenu.addAggregation("_quickActions", this._oQuickActionContainer);
2753
- this.addDependent(this._oColumnHeaderMenu);
2811
+ updateColumnMenu(this);
2754
2812
 
2755
- FESRHelper.setSemanticStepname(this._oColumnHeaderMenu, "beforeOpen", "mdc:tbl:p13n:col");
2813
+ this._updateInvisibleTitle();
2814
+ };
2756
2815
 
2757
- this._oColumnHeaderMenu.attachBeforeOpen(this._createColumnMenuContent, this);
2816
+ Table.prototype._createColumnHeaderMenu = function() {
2817
+ if (this._oColumnHeaderMenu) {
2818
+ return;
2758
2819
  }
2759
2820
 
2760
- this._updateInvisibleTitle();
2821
+ this._oQuickActionContainer = new QuickActionContainer({table: this});
2822
+ this._oColumnHeaderMenu = new ColumnMenu({
2823
+ id: this.getId() + "-columnHeaderMenu",
2824
+ showTableSettingsButton: true
2825
+ });
2826
+ this._oColumnHeaderMenu.addAggregation("_quickActions", this._oQuickActionContainer);
2827
+ this.addDependent(this._oColumnHeaderMenu);
2828
+
2829
+ FESRHelper.setSemanticStepname(this._oColumnHeaderMenu, "beforeOpen", "mdc:tbl:p13n:col");
2830
+
2831
+ this._oColumnHeaderMenu.attachBeforeOpen(this._createColumnMenuContent, this);
2832
+ };
2833
+
2834
+ Table.prototype._destroyColumnHeaderMenu = function() {
2835
+ this._oColumnHeaderMenu?.destroy();
2836
+ delete this._oColumnHeaderMenu;
2837
+ delete this._oQuickActionContainer;
2761
2838
  };
2762
2839
 
2763
2840
  Table.prototype._createColumnMenuContent = function(oEvent) {
@@ -3002,8 +3079,8 @@ sap.ui.define([
3002
3079
  *
3003
3080
  * @private
3004
3081
  */
3005
- Table.prototype._onDataRequested = function() {
3006
- this._bIgnoreChange = true;
3082
+ Table.prototype._onBindingDataRequested = function() {
3083
+ this._bSkipAnnounceTableUpdate = true;
3007
3084
  };
3008
3085
 
3009
3086
  /**
@@ -3011,20 +3088,9 @@ sap.ui.define([
3011
3088
  *
3012
3089
  * @private
3013
3090
  */
3014
- Table.prototype._onDataReceived = function() {
3015
- this._bIgnoreChange = false;
3016
- this._updateTableHeaderState();
3017
- };
3018
-
3019
- /**
3020
- * Event handler for binding createActivate
3021
- *
3022
- * @private
3023
- */
3024
- Table.prototype._onCreateActivate = function() {
3025
- Promise.resolve().then(() => {
3026
- this._updateTableHeaderState();
3027
- });
3091
+ Table.prototype._onBindingDataReceived = function() {
3092
+ this._bSkipAnnounceTableUpdate = false;
3093
+ this._updateRowCountForHeader();
3028
3094
  };
3029
3095
 
3030
3096
  /**
@@ -3034,54 +3100,14 @@ sap.ui.define([
3034
3100
  */
3035
3101
  Table.prototype._onBindingChange = function() {
3036
3102
  this.fireEvent("_bindingChange"); // consumed by sap.ui.mdc.valuehelp.content.MDCTable
3037
-
3038
3103
  this._updateExpandAllButton();
3039
3104
  this._updateCollapseAllButton();
3040
3105
  this._updateExportButton();
3041
-
3042
- /* skip calling of _updateHeaderText till data is received otherwise MTableUtil.announceTableUpdate
3043
- will be called to early and the user gets an incorrect announcement via screen reader of the actual table state*/
3044
- if (this._bIgnoreChange) {
3045
- return;
3046
- }
3047
- this._updateTableHeaderState();
3048
- };
3049
-
3050
- /**
3051
- * Updates the table header states, like the header text and the export button.
3052
- *
3053
- * @private
3054
- */
3055
- Table.prototype._updateTableHeaderState = function() {
3056
- this._updateHeaderText();
3106
+ this._updateRowCountForHeader();
3057
3107
  };
3058
3108
 
3059
- Table.prototype._updateHeaderText = function() {
3060
- let sHeader;
3061
- let iRowCount;
3062
-
3063
- if (!this._oNumberFormatInstance) {
3064
- this._oNumberFormatInstance = NumberFormat.getFloatInstance();
3065
- }
3066
-
3067
- if (this._oTitle && this.getHeader()) {
3068
- sHeader = this.getHeader();
3069
- if (this.getShowRowCount()) {
3070
- iRowCount = this.getRowBinding() ? this.getRowBinding().getCount() : 0;
3071
- if (iRowCount > 0) {
3072
- const sValue = this._oNumberFormatInstance.format(iRowCount);
3073
- sHeader += " (" + sValue + ")";
3074
- }
3075
- }
3076
-
3077
- this._oTitle.setText(sHeader);
3078
- }
3079
-
3080
- if (!this._bIgnoreChange && this._bAnnounceTableUpdate) {
3081
- this._bAnnounceTableUpdate = false;
3082
- // iRowCount is undefined, if this.getShowRowCount() returns false
3083
- MTableUtil.announceTableUpdate(this.getHeader(), iRowCount);
3084
- }
3109
+ Table.prototype._updateRowCountForHeader = function() {
3110
+ this._oManagedObjectModel.setProperty("/@custom/rowCount", this.getRowBinding().getCount());
3085
3111
  };
3086
3112
 
3087
3113
  Table.prototype._updateColumnsBeforeBinding = function() {
@@ -3178,9 +3204,8 @@ sap.ui.define([
3178
3204
  delete oBindingInfo.template;
3179
3205
  }
3180
3206
 
3181
- Table._addBindingListener(oBindingInfo, "dataRequested", this._onDataRequested.bind(this));
3182
- Table._addBindingListener(oBindingInfo, "dataReceived", this._onDataReceived.bind(this));
3183
- Table._addBindingListener(oBindingInfo, "createActivate", this._onCreateActivate.bind(this));
3207
+ Table._addBindingListener(oBindingInfo, "dataRequested", this._onBindingDataRequested.bind(this));
3208
+ Table._addBindingListener(oBindingInfo, "dataReceived", this._onBindingDataReceived.bind(this));
3184
3209
  Table._addBindingListener(oBindingInfo, "change", this._onBindingChange.bind(this));
3185
3210
  };
3186
3211
 
@@ -179,16 +179,17 @@ sap.ui.define([
179
179
  * @protected
180
180
  */
181
181
  TableDelegate.getGroupSorter = function(oTable) {
182
+ const oPropertyHelper = oTable.getPropertyHelper();
182
183
  const oGroupLevel = oTable._getGroupedProperties()[0];
183
184
 
184
- if (!oGroupLevel || !oTable._isOfType(TableType.ResponsiveTable)) {
185
+ if (!oGroupLevel || !oTable._isOfType(TableType.ResponsiveTable) || !oPropertyHelper.hasProperty(oGroupLevel.name)) {
185
186
  return undefined;
186
187
  }
187
188
 
188
189
  const oSortedProperty = oTable._getSortedProperties().find((oSortCondition) => {
189
190
  return oSortCondition.name === oGroupLevel.name;
190
191
  });
191
- const sPath = oTable.getPropertyHelper().getProperty(oGroupLevel.name).path;
192
+ const sPath = oPropertyHelper.getProperty(oGroupLevel.name).path;
192
193
  const bDescending = oSortedProperty ? oSortedProperty.descending : false;
193
194
 
194
195
  if (!oTable._mFormatGroupHeaderInfo || oTable._mFormatGroupHeaderInfo.propertyKey !== oGroupLevel.name) {
@@ -69,7 +69,7 @@ sap.ui.define([
69
69
  * and {@link sap.ui.mdc.FilterField FilterField} controls using the <code>valueHelp</code> association. One <code>ValueHelp</code> element instance can be
70
70
  * assigned to multiple fields (like in different table rows). It should be placed in the control tree on the container holding the fields.
71
71
  * @extends sap.ui.mdc.Element
72
- * @version 1.141.2
72
+ * @version 1.143.0
73
73
  * @constructor
74
74
  * @abstract
75
75
  * @public
@@ -141,7 +141,7 @@ sap.ui.define([
141
141
  };
142
142
 
143
143
  /**
144
- * Returns filters that are used when updating the binding of the <code>ValueHelp</code>.<br/>By default, this method returns a set of {@link sap.ui.model.Filter Filters} originating from an available {@link sap.ui.mdc.FilterBar FilterBar}, the delegate's own {@link module:sap/ui/mdc/ValueHelpDelegate.getFilterConditions getFilterConditions}, and/or the {@link sap.ui.mdc.valuehelp.base.FilterableListContent#getFilterFields filterFields} configuration of the given {@link sap.ui.mdc.valuehelp.base.FilterableListContent FilterableListContent}.
144
+ * Returns filters that are used when updating the binding of the <code>ValueHelp</code>.<br/>By default, this method returns a set of {@link sap.ui.model.Filter Filters} originating from an available {@link sap.ui.mdc.FilterBar FilterBar} or the delegate's own {@link module:sap/ui/mdc/ValueHelpDelegate.getFilterConditions getFilterConditions} implementation.
145
145
  *
146
146
  * @param {sap.ui.mdc.ValueHelp} oValueHelp The <code>ValueHelp</code> control instance
147
147
  * @param {sap.ui.mdc.valuehelp.base.FilterableListContent} oContent <code>ValueHelp</code> content requesting conditions configuration
@@ -415,6 +415,9 @@ sap.ui.define([
415
415
  * @since 1.106.0
416
416
  */
417
417
  ValueHelpDelegate.getFilterConditions = function (oValueHelp, oContent, oConfig) {
418
+ /**
419
+ * @deprecated since 1.106.0
420
+ */
418
421
  if (this.getInitialFilterConditions) {
419
422
  return this.getInitialFilterConditions(oValueHelp, oContent, (oConfig && oConfig.control) || (oContent && oContent.getControl()));
420
423
  }
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * The action for an {@link sap.ui.mdc.ActionToolbar ActionToolbar} control with given layout information that determines where the wrapped control is displayed on the <code>ActionToolbar</code>.
28
28
  * @extends sap.ui.core.Control
29
29
  * @author SAP SE
30
- * @version 1.141.2
30
+ * @version 1.143.0
31
31
  * @constructor
32
32
  * @since 1.58
33
33
  * @public
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @class The <code>ChartImplementationContainer</code> creates a container for the <code>content</code> (chart) and <code>noDataContent</code>. Based on the <code>showNoDataStruct</code> the <code>content</code> or <code>noDataContent</code> will be shown.
22
22
  * @extends sap.ui.core.Control
23
23
  * @author SAP SE
24
- * @version 1.141.2
24
+ * @version 1.143.0
25
25
  * @constructor
26
26
  *
27
27
  * @public
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * @class The <code>ChartSelectionDetails</code> control creates a <code>sap.m.SelectionDetails</code> popover based on metadata and the configuration specified.
39
39
  * @extends sap.m.SelectionDetails
40
40
  * @author SAP SE
41
- * @version 1.141.2
41
+ * @version 1.143.0
42
42
  * @constructor
43
43
  * @public
44
44
  * @experimental As of version 1.88
@@ -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.141.2
29
+ * @version 1.143.0
30
30
  *
31
31
  * @private
32
32
  * @since 1.83
@@ -49,7 +49,7 @@ sap.ui.define([
49
49
  * @namespace
50
50
  * @alias sap.ui.mdc.chart.ToolbarControlFactory
51
51
  * @author SAP SE
52
- * @version 1.141.2
52
+ * @version 1.143.0
53
53
  * @since 1.123
54
54
  * @experimental
55
55
  * @private
@@ -101,8 +101,8 @@ sap.ui.define([
101
101
  const sChartTypeText = oChartRB.getText("info/" + sChartType);
102
102
 
103
103
  let sErrorMsg = "";
104
- let iDimension = oError["Dimension"] ? oError["Dimension"] : "";
105
- let iMeasure = oError["Measure"] ? oError["Measure"] : "";
104
+ let iDimension = oError["Dimension"] ? JSON.parse(JSON.stringify(oError["Dimension"])) : "";
105
+ let iMeasure = oError["Measure"] || oError["Measure"] === 0 ? JSON.parse(JSON.stringify(oError["Measure"])) : "";
106
106
 
107
107
  if (iDimension < 0) {
108
108
  iDimension = 0;
@@ -117,6 +117,9 @@ sap.ui.define([
117
117
  } else if (iMeasure) {
118
118
  sErrorMsg = MDCRb.getText("chart.MISSING_MEASURE_ERROR_MESSAGE", [sChartTypeText, iMeasure]);
119
119
  }
120
+ if (oError["Measure"] === 0) {
121
+ sErrorMsg = MDCRb.getText("chart.INVALID_CHART_TYPE_NO_MEASURE_ERROR_MESSAGE_DESCRIPTION");
122
+ }
120
123
  return sErrorMsg;
121
124
  };
122
125
 
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  *
34
34
  * @namespace
35
35
  * @author SAP SE
36
- * @version 1.141.2
36
+ * @version 1.143.0
37
37
  * @since 1.61.0
38
38
  * @alias sap.ui.mdc.condition.Condition
39
39
  *
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  *
25
25
  * @namespace
26
26
  * @author SAP SE
27
- * @version 1.141.2
27
+ * @version 1.143.0
28
28
  * @private
29
29
  * @ui5-restricted sap.ui.mdc
30
30
  * @since 1.74.0
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @extends sap.ui.model.json.JSONModel
34
34
  *
35
35
  * @author SAP SE
36
- * @version 1.141.2
36
+ * @version 1.143.0
37
37
  * @since 1.48.0
38
38
  * @alias sap.ui.mdc.condition.ConditionModel
39
39
  *
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  *
27
27
  * @namespace
28
28
  * @author SAP SE
29
- * @version 1.141.2
29
+ * @version 1.143.0
30
30
  * @since 1.78.0
31
31
  * @alias sap.ui.mdc.condition.FilterConverter
32
32
  *
@@ -68,7 +68,7 @@ sap.ui.define([
68
68
  *
69
69
  * @namespace
70
70
  * @author SAP SE
71
- * @version 1.141.2
71
+ * @version 1.143.0
72
72
  * @since 1.73.0
73
73
  * @alias sap.ui.mdc.condition.FilterOperatorUtil
74
74
  *
@@ -144,7 +144,7 @@ sap.ui.define([
144
144
  * @param {function} [oConfiguration.getTextForCopy] Function to determine the text copied into clipboard
145
145
  * @constructor
146
146
  * @author SAP SE
147
- * @version 1.141.2
147
+ * @version 1.143.0
148
148
  * @public
149
149
  * @alias sap.ui.mdc.condition.Operator
150
150
  * @since 1.73.0
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @extends sap.m.DynamicDateOption
64
64
  *
65
65
  * @author SAP SE
66
- * @version 1.141.2
66
+ * @version 1.143.0
67
67
  *
68
68
  * @private
69
69
  * @ui5-restricted sap.ui.mdc
@@ -39,7 +39,7 @@ sap.ui.define([
39
39
  * @param {int[]|function} [oConfiguration.defaultValues] Array of values for the defaults of <code>RangeOperators</code> parameter. This can be a function, which returns the array of values. If not used the default for the values is 1.
40
40
  * @constructor
41
41
  * @author SAP SE
42
- * @version 1.141.2
42
+ * @version 1.143.0
43
43
  * @public
44
44
  * @alias sap.ui.mdc.condition.RangeOperator
45
45
  * @since 1.74.0
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2025 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+ sap.ui.define([
7
+ "sap/ui/mdc/Geomap", "../Util"
8
+ ], (Geomap, Util) => {
9
+ "use strict";
10
+
11
+ const oDesignTime = {
12
+ actions: {
13
+ },
14
+ aggregations: {
15
+ }
16
+ };
17
+
18
+ const aAllowedAggregations = ["items"],
19
+ aAllowedProperties = ["header", "zoom"];
20
+
21
+ return Util.getDesignTime(Geomap, aAllowedProperties, aAllowedAggregations, oDesignTime);
22
+
23
+ });