@openui5/sap.ui.table 1.126.1 → 1.128.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 (52) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +3 -3
  3. package/src/sap/ui/table/.library +1 -1
  4. package/src/sap/ui/table/AnalyticalColumn.js +1 -1
  5. package/src/sap/ui/table/AnalyticalColumnMenu.js +1 -1
  6. package/src/sap/ui/table/AnalyticalTable.js +1 -1
  7. package/src/sap/ui/table/Column.js +6 -3
  8. package/src/sap/ui/table/ColumnMenu.js +1 -1
  9. package/src/sap/ui/table/CreationRow.js +1 -1
  10. package/src/sap/ui/table/Row.js +1 -1
  11. package/src/sap/ui/table/RowAction.js +1 -1
  12. package/src/sap/ui/table/RowActionItem.js +1 -1
  13. package/src/sap/ui/table/RowSettings.js +1 -1
  14. package/src/sap/ui/table/Table.js +80 -9
  15. package/src/sap/ui/table/TablePersoController.js +1 -1
  16. package/src/sap/ui/table/TableRenderer.js +7 -7
  17. package/src/sap/ui/table/TreeTable.js +1 -1
  18. package/src/sap/ui/table/extensions/Accessibility.js +1 -1
  19. package/src/sap/ui/table/extensions/AccessibilityRender.js +1 -1
  20. package/src/sap/ui/table/extensions/DragAndDrop.js +1 -1
  21. package/src/sap/ui/table/extensions/ExtensionBase.js +1 -1
  22. package/src/sap/ui/table/extensions/Keyboard.js +1 -2
  23. package/src/sap/ui/table/extensions/KeyboardDelegate.js +25 -5
  24. package/src/sap/ui/table/extensions/Pointer.js +1 -1
  25. package/src/sap/ui/table/extensions/Scrolling.js +1 -1
  26. package/src/sap/ui/table/extensions/ScrollingIOS.js +1 -1
  27. package/src/sap/ui/table/extensions/Synchronization.js +1 -1
  28. package/src/sap/ui/table/library.js +11 -11
  29. package/src/sap/ui/table/menus/ColumnHeaderMenuAdapter.js +1 -1
  30. package/src/sap/ui/table/menus/MobileColumnHeaderMenuAdapter.js +1 -1
  31. package/src/sap/ui/table/messagebundle_en_US_sappsd.properties +6 -10
  32. package/src/sap/ui/table/messagebundle_en_US_saptrc.properties +72 -76
  33. package/src/sap/ui/table/plugins/BindingSelection.js +3 -3
  34. package/src/sap/ui/table/plugins/MultiSelectionPlugin.js +2 -2
  35. package/src/sap/ui/table/plugins/ODataV4Selection.js +132 -96
  36. package/src/sap/ui/table/plugins/PluginBase.js +1 -1
  37. package/src/sap/ui/table/plugins/SelectionModelSelection.js +3 -3
  38. package/src/sap/ui/table/plugins/SelectionPlugin.js +1 -1
  39. package/src/sap/ui/table/plugins/V4Aggregation.js +1 -1
  40. package/src/sap/ui/table/rowmodes/Auto.js +1 -1
  41. package/src/sap/ui/table/rowmodes/Fixed.js +1 -1
  42. package/src/sap/ui/table/rowmodes/Interactive.js +1 -1
  43. package/src/sap/ui/table/rowmodes/RowMode.js +1 -1
  44. package/src/sap/ui/table/rowmodes/Type.js +3 -3
  45. package/src/sap/ui/table/rowmodes/Variable.js +1 -1
  46. package/src/sap/ui/table/themes/base/Table.less +4 -0
  47. package/src/sap/ui/table/utils/TableUtils.js +1 -1
  48. package/src/sap/ui/table/utils/_BindingUtils.js +1 -1
  49. package/src/sap/ui/table/utils/_ColumnUtils.js +1 -1
  50. package/src/sap/ui/table/utils/_GroupingUtils.js +1 -1
  51. package/src/sap/ui/table/utils/_HookUtils.js +1 -1
  52. package/src/sap/ui/table/utils/_MenuUtils.js +1 -1
package/THIRDPARTY.txt CHANGED
@@ -468,7 +468,7 @@ License: Apache-2.0
468
468
  License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
469
469
  Contained in: lib/jsdoc/ui5/plugin.js
470
470
 
471
- Component: SAP Theming Base Content, version: 11.12.0
471
+ Component: SAP Theming Base Content, version: 11.16.1
472
472
  Copyright: SAP SE or an SAP affiliate company and Theming Base Content contributors
473
473
  License: Apache-2.0
474
474
  License Text: https://github.com/SAP/openui5/blob/master/LICENSES/Apache-2.0.txt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openui5/sap.ui.table",
3
- "version": "1.126.1",
3
+ "version": "1.128.0",
4
4
  "description": "OpenUI5 UI Library sap.ui.table",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "license": "Apache-2.0",
@@ -14,7 +14,7 @@
14
14
  "url": "https://github.com/SAP/openui5.git"
15
15
  },
16
16
  "dependencies": {
17
- "@openui5/sap.ui.core": "1.126.1",
18
- "@openui5/sap.ui.unified": "1.126.1"
17
+ "@openui5/sap.ui.core": "1.128.0",
18
+ "@openui5/sap.ui.unified": "1.128.0"
19
19
  }
20
20
  }
@@ -6,7 +6,7 @@
6
6
  <copyright>OpenUI5
7
7
  * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
8
8
  * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.</copyright>
9
- <version>1.126.1</version>
9
+ <version>1.128.0</version>
10
10
 
11
11
  <documentation>Table-like controls, mainly for desktop scenarios.</documentation>
12
12
 
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.table.Column
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.126.1
50
+ * @version 1.128.0
51
51
  *
52
52
  * @constructor
53
53
  * @public
@@ -20,7 +20,7 @@ sap.ui.define(['./ColumnMenu', "sap/ui/unified/MenuRenderer", './utils/TableUtil
20
20
  * @extends sap.ui.table.ColumnMenu
21
21
  *
22
22
  * @author SAP SE
23
- * @version 1.126.1
23
+ * @version 1.128.0
24
24
  *
25
25
  * @constructor
26
26
  * @public
@@ -55,7 +55,7 @@ sap.ui.define([
55
55
  * @see https://github.com/SAP/odata-vocabularies/blob/main/docs/v2-annotations.md
56
56
  *
57
57
  * @extends sap.ui.table.Table
58
- * @version 1.126.1
58
+ * @version 1.128.0
59
59
  *
60
60
  * @constructor
61
61
  * @public
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @class
64
64
  * The column allows you to define column specific properties that will be applied when rendering the table.
65
65
  * @extends sap.ui.core.Element
66
- * @version 1.126.1
66
+ * @version 1.128.0
67
67
  *
68
68
  * @constructor
69
69
  * @public
@@ -290,15 +290,18 @@ sap.ui.define([
290
290
 
291
291
  /**
292
292
  * Template (cell renderer) of this column.
293
+ *
293
294
  * A template is decoupled from the column. Each time the template's properties or aggregations have been changed, the template has to be
294
295
  * applied again via <code>setTemplate</code> for the changes to take effect.
295
- * If a string is defined, a default text control will be created with its text property bound to the value of the string. The default
296
- * template depends on the libraries loaded.
296
+ *
297
297
  * If there is no template, the column will not be rendered in the table.
298
+ *
298
299
  * The set of supported controls is limited. See section "{@link topic:148892ff9aea4a18b912829791e38f3e Tables: Which One Should I
299
300
  * Choose?}" in the documentation for more details. While it is technically possible to also use other controls, doing so might lead to
300
301
  * issues with regards to scrolling, alignment, condensed mode, screen reader support, and keyboard support.
301
302
  *
303
+ * If a string is defined, this string is interpreted as the binding path. Internally, a default text control will be created with its <code>text</code> property
304
+ * bound to the value of the string. The default template depends on the libraries loaded.
302
305
  * <b>Note:</b> The <code>altType</code> string is deprecated as of version 1.118. Use a <code>Control</code> instead.
303
306
  */
304
307
  template: {type: "sap.ui.core.Control", altTypes: ["string"], multiple: false},
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  * @class
41
41
  * The column menu provides all common actions that can be performed on a column.
42
42
  * @extends sap.ui.unified.Menu
43
- * @version 1.126.1
43
+ * @version 1.128.0
44
44
  *
45
45
  * @constructor
46
46
  * @public
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * <code>sap.ui.commons</code> library.
33
33
  * @extends sap.ui.core.Control
34
34
  * @author SAP SE
35
- * @version 1.126.1
35
+ * @version 1.128.0
36
36
  *
37
37
  * @constructor
38
38
  * @private
@@ -135,7 +135,7 @@ sap.ui.define([
135
135
  * @class
136
136
  * The row.
137
137
  * @extends sap.ui.core.Element
138
- * @version 1.126.1
138
+ * @version 1.128.0
139
139
  *
140
140
  * @constructor
141
141
  * @public
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  * If more action items are available as the available space allows to display an overflow mechanism is provided.
36
36
  * This control must only be used in the context of the <code>sap.ui.table.Table</code> control to define row actions.
37
37
  * @extends sap.ui.core.Control
38
- * @version 1.126.1
38
+ * @version 1.128.0
39
39
  *
40
40
  * @constructor
41
41
  * @public
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.core.Element
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.126.1
27
+ * @version 1.128.0
28
28
  * @since 1.45
29
29
  *
30
30
  * @constructor
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * The <code>RowSettings</code> control allows you to configure a row.
28
28
  * You can only use this control in the context of the <code>sap.ui.table.Table</code> control to define row settings.
29
29
  * @extends sap.ui.core.Element
30
- * @version 1.126.1
30
+ * @version 1.128.0
31
31
  *
32
32
  * @constructor
33
33
  * @public
@@ -94,13 +94,15 @@ sap.ui.define([
94
94
  * the Table control to handle huge amounts of data. Nevertheless, restrictions apply regarding the number of displayed
95
95
  * columns. Keep the number as low as possible to improve performance. Due to the nature of tables, the used
96
96
  * control for column templates also has a big influence on the performance.
97
+ * Because of the described reuse of the controls during scrolling, all data-related changes must be based on bindings. Static changes, such as
98
+ * calling mutator functions or defining a one-time binding, must be avoided.
97
99
  * </p>
98
100
  * <p>
99
101
  * The Table control relies completely on data binding, and its supported feature set is tightly coupled to
100
102
  * the data model and binding being used.
101
103
  * </p>
102
104
  * @extends sap.ui.core.Control
103
- * @version 1.126.1
105
+ * @version 1.128.0
104
106
  *
105
107
  * @constructor
106
108
  * @public
@@ -216,17 +218,42 @@ sap.ui.define([
216
218
  navigationMode: {type: "sap.ui.table.NavigationMode", group: "Behavior", defaultValue: "Scrollbar", deprecated: true},
217
219
 
218
220
  /**
219
- * Defines how many additional (not yet visible) data records from the back-end system are pre-fetched to enable smooth scrolling.
220
- * The threshold is always added to the <code>visibleRowCount</code>. If the <code>visibleRowCount</code> is 10 and the
221
- * <code>threshold</code> is 100, there will be 110 records fetched with the initial load.
222
- * If the <code>threshold</code> is lower than the number of rows in the scrollable area (<code>visibleRowCount</code> minus number of
223
- * fixed rows), this number is used as the <code>threshold</code>.
224
- * If the value is 0, thresholding is disabled.
221
+ * Defines how many additional (not yet visible) data records from the back-end system are pre-fetched to enable
222
+ * smooth scrolling. The threshold is always added to the number of rows. If the number of rows is 10 and the
223
+ * <code>threshold</code> is 100, 110 records will be fetched with the initial load. This property affects
224
+ * requests triggered by changes in the binding, for example, initial loading, sorting, filtering, etc. The
225
+ * threshold that is applied during scrolling can be configured with the <code>scrollThreshold</code> property.
226
+ * If the <code>threshold</code> is lower than the number of rows in the scrollable area (<code>visibleRowCount</code>
227
+ * minus number of fixed rows), this number is used as the <code>threshold</code>. If the value is 0, thresholding
228
+ * is disabled.
225
229
  */
226
- threshold: {type: "int", group: "Appearance", defaultValue: 100},
230
+ threshold: {type: "int", group: "Behavior", defaultValue: 100},
231
+
232
+ /**
233
+ * Defines how many additional data records are requested from the back-end system when the user scrolls vertically
234
+ * in the table. The <code>scrollThreshold</code> is always added to the number of rows. If the number of rows is 10
235
+ * and the <code>scrollThreshold</code> is 100, 110 records will be fetched during scrolling. The threshold that is
236
+ * applied to requests that are not initiated by scrolling can be configured with the <code>threshold</code> property.
237
+ * If the <code>scrollThreshold</code> is lower than the number of rows in the scrollable area (number of rows minus
238
+ * number of fixed rows), this number is used as the <code>scrollThreshold</code>. If the value is 0, no threshold is
239
+ * applied during scrolling. The value -1 applies the same value as the <code>threshold</code> property.
240
+ *
241
+ * <b>Note:</b> This property only takes effect if it is set to a positive integer value.
242
+ *
243
+ * For <code>AnalyticalTable</code> and <code>TreeTable</code>, the <code>scrollThreshold</code> property must be
244
+ * higher than the <code>threshold</code> property to take effect.
245
+ *
246
+ * @since 1.128
247
+ */
248
+ scrollThreshold: {type: "int", group: "Behavior", defaultValue: -1},
227
249
 
228
250
  /**
229
251
  * Flag to enable or disable column reordering
252
+ *
253
+ * <b>Note</b>: Column reordering is possible via drag&drop and keyboard shortcuts. Single-pointer alternative is not provided
254
+ * out-of-the-box and should be implemented on application side. For example the {@link sap.m.p13n.Engine} can be used, see the following
255
+ * sample:
256
+ * {@link https://ui5.sap.com/#/entity/sap.ui.table.Table/sample/sap.m.sample.p13n.EngineGridTable Personalization for grid table}.
230
257
  */
231
258
  enableColumnReordering: {type: "boolean", group: "Behavior", defaultValue: true},
232
259
 
@@ -1021,6 +1048,15 @@ sap.ui.define([
1021
1048
  */
1022
1049
  this._bContextsAvailable = false;
1023
1050
 
1051
+ /*
1052
+ * Flag that indicates whether the user scrolled through the table.
1053
+ * It is <code>false</code> if the current scroll position was set via API or the binding has been initialized or refreshed.
1054
+ * It is set in {@link sap.ui.table.Table#_setFirstVisibleRowIndex} and {@link sap.ui.table.Table#updateRows}.
1055
+ *
1056
+ * @type {boolean}
1057
+ */
1058
+ this._bScrolled = false;
1059
+
1024
1060
  this._aRowClones = [];
1025
1061
  this._bRowAggregationInvalid = true;
1026
1062
  this._mTimeouts = {};
@@ -1878,6 +1914,7 @@ sap.ui.define([
1878
1914
 
1879
1915
  if (bRowsUpdateRequired) {
1880
1916
  if (!mOptions.suppressRendering) {
1917
+ this._bScrolled = mOptions.onScroll;
1881
1918
  triggerRowsUpdate(this, mOptions.onScroll
1882
1919
  ? TableUtils.RowsUpdateReason.VerticalScroll
1883
1920
  : TableUtils.RowsUpdateReason.FirstVisibleRowChange);
@@ -2371,7 +2408,7 @@ sap.ui.define([
2371
2408
  Table.prototype._getRowContexts = function(iRequestLength) {
2372
2409
  const oBinding = this.getBinding();
2373
2410
  const mRowCounts = this._getRowCounts();
2374
- let iThreshold = this.getThreshold();
2411
+ let iThreshold = this._bScrolled ? this._getScrollThreshold() : this.getThreshold();
2375
2412
 
2376
2413
  iRequestLength = iRequestLength == null ? mRowCounts.count : iRequestLength;
2377
2414
 
@@ -2496,6 +2533,7 @@ sap.ui.define([
2496
2533
  */
2497
2534
  Table.prototype.refreshRows = function(sReason) {
2498
2535
  this._bContextsAvailable = false;
2536
+ this._bScrolled = false;
2499
2537
 
2500
2538
  if (sReason === ChangeReason.Sort || sReason === ChangeReason.Filter) {
2501
2539
  this.setFirstVisibleRow(0);
@@ -2520,6 +2558,8 @@ sap.ui.define([
2520
2558
  return;
2521
2559
  }
2522
2560
 
2561
+ this._bScrolled = false;
2562
+
2523
2563
  if (oEventInfo.detailedReason === "AddVirtualContext") {
2524
2564
  createVirtualRow(this);
2525
2565
  return;
@@ -3644,6 +3684,20 @@ sap.ui.define([
3644
3684
  return this;
3645
3685
  };
3646
3686
 
3687
+ /**
3688
+ * Sets the threshold value, which will be added to all data requests
3689
+ * initiated by scrolling if the <code>Table</code> is bound against
3690
+ * an OData service.
3691
+ *
3692
+ * @param {int} iThreshold The threshold for scrolling
3693
+ * @returns {this} Reference to <code>this</code> in order to allow method chaining
3694
+ * @public
3695
+ */
3696
+ Table.prototype.setScrollThreshold = function(iThreshold) {
3697
+ this.setProperty("scrollThreshold", iThreshold, true);
3698
+ return this;
3699
+ };
3700
+
3647
3701
  /**
3648
3702
  * Invalidates all column menus.
3649
3703
  * @private
@@ -4394,5 +4448,22 @@ sap.ui.define([
4394
4448
  return oFoundPlugin;
4395
4449
  };
4396
4450
 
4451
+ /**
4452
+ * Returns the threshold that is applied during scrolling. The returned
4453
+ * integer is based on the <code>scrollThreshold</code> property in combination
4454
+ * with the <code>threshold</code> property.
4455
+ *
4456
+ * @returns {number} The threshold that is applied during scrolling
4457
+ */
4458
+ Table.prototype._getScrollThreshold = function() {
4459
+ const iScrollThreshold = this.getScrollThreshold();
4460
+
4461
+ if (iScrollThreshold === -1) {
4462
+ return this.getThreshold();
4463
+
4464
+ }
4465
+ return iScrollThreshold;
4466
+ };
4467
+
4397
4468
  return Table;
4398
4469
  });
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.base.ManagedObject
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.126.1
37
+ * @version 1.128.0
38
38
  * @since 1.21.1
39
39
  *
40
40
  * @constructor
@@ -148,6 +148,7 @@ sap.ui.define([
148
148
  this.renderTabElement(rm, "sapUiTableOuterBefore");
149
149
 
150
150
  rm.openStart("div", oTable.getId() + "-before");
151
+ rm.class("sapUiTableBefore");
151
152
  rm.openEnd();
152
153
 
153
154
  rm.renderControl(oTable.getAggregation("_messageStrip"));
@@ -177,6 +178,9 @@ sap.ui.define([
177
178
  oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "CONTAINER");
178
179
  rm.openEnd();
179
180
 
181
+ const bDummyTabbable = oTable.getRows().length || oTable.getColumnHeaderVisible();
182
+ this.renderTabElement(rm, "sapUiTableCtrlBefore", bDummyTabbable ? "0" : "-1");
183
+
180
184
  rm.openStart("div", oTable.getId() + "-sapUiTableGridCnt");
181
185
  oTable._getAccRenderExtension().writeAriaAttributesFor(rm, oTable, "CONTENT");
182
186
  rm.openEnd();
@@ -187,6 +191,9 @@ sap.ui.define([
187
191
 
188
192
  rm.close("div");
189
193
 
194
+ this.renderTabElement(rm, "sapUiTableCtrlAfter", bDummyTabbable ? "0" : "-1");
195
+ this.renderTabElement(rm, null, "-1", oTable.getId() + "-focusDummy");
196
+
190
197
  const oCreationRow = oTable.getCreationRow();
191
198
  if (oCreationRow && oCreationRow.getVisible()) {
192
199
  rm.renderControl(oCreationRow);
@@ -282,10 +289,6 @@ sap.ui.define([
282
289
  };
283
290
 
284
291
  TableRenderer.renderTable = function(rm, oTable) {
285
- const bHasRows = oTable.getRows().length > 0;
286
-
287
- this.renderTabElement(rm, "sapUiTableCtrlBefore", bHasRows ? "0" : "-1");
288
-
289
292
  rm.openStart("div", oTable.getId() + "-tableCCnt");
290
293
  TableUtils.Hook.call(oTable, Hook.RenderRowContainerStyles, rm);
291
294
  rm.class("sapUiTableCCnt");
@@ -294,9 +297,6 @@ sap.ui.define([
294
297
  this.renderTableCCnt(rm, oTable);
295
298
  rm.close("div");
296
299
 
297
- this.renderTabElement(rm, "sapUiTableCtrlAfter", bHasRows ? "0" : "-1");
298
- this.renderTabElement(rm, null, "-1", oTable.getId() + "-focusDummy");
299
-
300
300
  const oCreationRow = oTable.getCreationRow();
301
301
  if (!oCreationRow || !oCreationRow.getVisible()) {
302
302
  this.renderHSbBackground(rm, oTable);
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @class
43
43
  * The TreeTable control provides a comprehensive set of features to display hierarchical data.
44
44
  * @extends sap.ui.table.Table
45
- * @version 1.126.1
45
+ * @version 1.128.0
46
46
  *
47
47
  * @constructor
48
48
  * @public
@@ -969,7 +969,7 @@ sap.ui.define([
969
969
  * @class Extension for sap.ui.table.Table which handles ACC related things.
970
970
  * @extends sap.ui.table.extensions.ExtensionBase
971
971
  * @author SAP SE
972
- * @version 1.126.1
972
+ * @version 1.128.0
973
973
  * @constructor
974
974
  * @private
975
975
  * @alias sap.ui.table.extensions.Accessibility
@@ -44,7 +44,7 @@ sap.ui.define([
44
44
  * @class Extension for sap.ui.table.TableRenderer which handles ACC related things.
45
45
  * @extends sap.ui.table.extensions.ExtensionBase
46
46
  * @author SAP SE
47
- * @version 1.126.1
47
+ * @version 1.128.0
48
48
  * @constructor
49
49
  * @private
50
50
  * @alias sap.ui.table.extensions.AccessibilityRender
@@ -274,7 +274,7 @@ sap.ui.define([
274
274
  *
275
275
  * @extends sap.ui.table.extensions.ExtensionBase
276
276
  * @author SAP SE
277
- * @version 1.126.1
277
+ * @version 1.128.0
278
278
  * @constructor
279
279
  * @private
280
280
  * @alias sap.ui.table.extensions.DragAndDrop
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @abstract
20
20
  * @extends sap.ui.base.Object
21
21
  * @author SAP SE
22
- * @version 1.126.1
22
+ * @version 1.128.0
23
23
  * @constructor
24
24
  * @private
25
25
  * @alias sap.ui.table.extensions.ExtensionBase
@@ -130,7 +130,6 @@ sap.ui.define([
130
130
  * Initialize ItemNavigations (content and header) and transfer relevant dom elements.
131
131
  * TabIndexes are set by the ItemNavigation.
132
132
  */
133
- // eslint-disable-next-line complexity
134
133
  _initItemNavigation: function(oExtension, bSkipInitFocusedIndex) {
135
134
  const oTable = oExtension.getTable();
136
135
 
@@ -268,7 +267,7 @@ sap.ui.define([
268
267
  * @class Extension for sap.ui.table.Table which handles keyboard related things.
269
268
  * @extends sap.ui.table.extensions.ExtensionBase
270
269
  * @author SAP SE
271
- * @version 1.126.1
270
+ * @version 1.128.0
272
271
  * @constructor
273
272
  * @private
274
273
  * @alias sap.ui.table.extensions.Keyboard
@@ -65,7 +65,7 @@ sap.ui.define([
65
65
  *
66
66
  * @extends sap.ui.base.Object
67
67
  * @author SAP SE
68
- * @version 1.126.1
68
+ * @version 1.128.0
69
69
  * @constructor
70
70
  * @private
71
71
  * @alias sap.ui.table.extensions.KeyboardDelegate
@@ -991,7 +991,19 @@ sap.ui.define([
991
991
  }
992
992
  };
993
993
 
994
+ KeyboardDelegate.prototype.onfocusout = function(oEvent) {
995
+ if (this.getRows().length || this.getColumnHeaderVisible()) {
996
+ this.$().find(".sapUiTableCtrlBefore").attr("tabindex", "0");
997
+ this.$().find(".sapUiTableCtrlAfter").attr("tabindex", "0");
998
+ }
999
+ };
1000
+
994
1001
  KeyboardDelegate.prototype.onfocusin = function(oEvent) {
1002
+ if (this.getDomRef("sapUiTableCnt").contains(oEvent.target)) {
1003
+ this.$().find(".sapUiTableCtrlBefore").attr("tabindex", "-1");
1004
+ this.$().find(".sapUiTableCtrlAfter").attr("tabindex", "-1");
1005
+ }
1006
+
995
1007
  if (oEvent.isMarked("sapUiTableIgnoreFocusIn")) {
996
1008
  return;
997
1009
  }
@@ -1004,15 +1016,23 @@ sap.ui.define([
1004
1016
 
1005
1017
  } else if ($Target.hasClass("sapUiTableCtrlBefore")) {
1006
1018
  const bNoData = TableUtils.isNoDataVisible(this);
1007
- if (!bNoData || bNoData && this.getColumnHeaderVisible()) {
1019
+ const oBusyIndicator = this.getDomRef("busyIndicator");
1020
+ if (oBusyIndicator) {
1021
+ this._getKeyboardExtension().setSilentFocus(oBusyIndicator);
1022
+ } else if (this.getColumnHeaderVisible() && (TableUtils.getVisibleColumnCount(this) || this.getSelectionMode() !== SelectionMode.None)) {
1008
1023
  setFocusOnColumnHeaderOfLastFocusedDataCell(this, oEvent);
1009
- } else {
1024
+ } else if (bNoData) {
1010
1025
  this._getKeyboardExtension().setSilentFocus(this.$("noDataCnt"));
1011
1026
  }
1012
1027
 
1013
1028
  } else if ($Target.hasClass("sapUiTableCtrlAfter")) {
1014
- if (!TableUtils.isNoDataVisible(this)) {
1029
+ const oBusyIndicator = this.getDomRef("busyIndicator");
1030
+ if (oBusyIndicator) {
1031
+ this._getKeyboardExtension().setSilentFocus(oBusyIndicator);
1032
+ } else if (this.getRows().length && !TableUtils.isNoDataVisible(this)) {
1015
1033
  restoreFocusOnLastFocusedDataCell(this, oEvent);
1034
+ } else if (this.getColumnHeaderVisible() && (TableUtils.getVisibleColumnCount(this) || this.getSelectionMode() !== SelectionMode.None)) {
1035
+ setFocusOnColumnHeaderOfLastFocusedDataCell(this, oEvent);
1016
1036
  }
1017
1037
  }
1018
1038
 
@@ -1382,7 +1402,7 @@ sap.ui.define([
1382
1402
  }
1383
1403
 
1384
1404
  } else if (oCellInfo.isOfType(CellType.ANYCONTENTCELL) || oEvent.target === this.getDomRef("noDataCnt")) {
1385
- if (this.getColumnHeaderVisible() && !oCellInfo.isOfType(CellType.ROWACTION)) {
1405
+ if (this.getColumnHeaderVisible() && (TableUtils.getVisibleColumnCount(this) || this.getSelectionMode() !== SelectionMode.None) && !oCellInfo.isOfType(CellType.ROWACTION)) {
1386
1406
  setFocusOnColumnHeaderOfLastFocusedDataCell(this, oEvent);
1387
1407
  oEvent.preventDefault();
1388
1408
  } else {
@@ -703,7 +703,7 @@ sap.ui.define([
703
703
  * @class Extension for sap.ui.table.Table which handles mouse and touch related things.
704
704
  * @extends sap.ui.table.extensions.ExtensionBase
705
705
  * @author SAP SE
706
- * @version 1.126.1
706
+ * @version 1.128.0
707
707
  * @constructor
708
708
  * @private
709
709
  * @alias sap.ui.table.extensions.Pointer
@@ -2295,7 +2295,7 @@ sap.ui.define([
2295
2295
  * @class Extension for sap.ui.table.Table which handles scrolling.
2296
2296
  * @extends sap.ui.table.extensions.ExtensionBase
2297
2297
  * @author SAP SE
2298
- * @version 1.126.1
2298
+ * @version 1.128.0
2299
2299
  * @constructor
2300
2300
  * @private
2301
2301
  * @alias sap.ui.table.extensions.Scrolling
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @class Extension for sap.ui.table.Table which handles the scrollbar on iOS.
28
28
  * @extends sap.ui.table.extensions.ExtensionBase
29
29
  * @author SAP SE
30
- * @version 1.126.1
30
+ * @version 1.128.0
31
31
  * @constructor
32
32
  * @private
33
33
  * @alias sap.ui.table.extensions.ScrollingIOS
@@ -185,7 +185,7 @@ sap.ui.define([
185
185
  * @class Extension for sap.ui.table.Table that allows synchronization with a table.
186
186
  * @extends sap.ui.table.extensions.ExtensionBase
187
187
  * @author SAP SE
188
- * @version 1.126.1
188
+ * @version 1.128.0
189
189
  * @constructor
190
190
  * @private
191
191
  * @alias sap.ui.table.extensions.Synchronization
@@ -27,14 +27,14 @@ sap.ui.define([
27
27
  * @namespace
28
28
  * @alias sap.ui.table
29
29
  * @author SAP SE
30
- * @version 1.126.1
30
+ * @version 1.128.0
31
31
  * @since 0.8
32
32
  * @public
33
33
  */
34
34
  const thisLib = Library.init({
35
35
  name: "sap.ui.table",
36
36
  apiVersion: 2,
37
- version: "1.126.1",
37
+ version: "1.128.0",
38
38
  dependencies: ["sap.ui.core", "sap.ui.unified"],
39
39
  designtime: "sap/ui/table/designtime/library.designtime",
40
40
  types: [
@@ -96,7 +96,7 @@ sap.ui.define([
96
96
  /**
97
97
  * Navigation mode of the table
98
98
  *
99
- * @version 1.126.1
99
+ * @version 1.128.0
100
100
  * @enum {string}
101
101
  * @deprecated As of version 1.38, the concept has been discarded.
102
102
  * @public
@@ -127,7 +127,7 @@ sap.ui.define([
127
127
  /**
128
128
  * Row Action types.
129
129
  *
130
- * @version 1.126.1
130
+ * @version 1.128.0
131
131
  * @enum {string}
132
132
  * @public
133
133
  */
@@ -158,7 +158,7 @@ sap.ui.define([
158
158
  /**
159
159
  * Selection behavior of the table
160
160
  *
161
- * @version 1.126.1
161
+ * @version 1.128.0
162
162
  * @enum {string}
163
163
  * @public
164
164
  */
@@ -189,7 +189,7 @@ sap.ui.define([
189
189
  /**
190
190
  * Selection mode of the table
191
191
  *
192
- * @version 1.126.1
192
+ * @version 1.128.0
193
193
  * @enum {string}
194
194
  * @public
195
195
  */
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  /**
228
228
  * Sort order of a column
229
229
  *
230
- * @version 1.126.1
230
+ * @version 1.128.0
231
231
  * @enum {string}
232
232
  * @public
233
233
  * @deprecated As of version 1.120, replaced with <code>sap.ui.core.SortOrder</code>
@@ -254,7 +254,7 @@ sap.ui.define([
254
254
  /**
255
255
  * VisibleRowCountMode of the table
256
256
  *
257
- * @version 1.126.1
257
+ * @version 1.128.0
258
258
  * @enum {string}
259
259
  * @deprecated As of version 1.119, see the <code>rowMode</code> aggregation of <code>sap.ui.table.Table</code> for more details.
260
260
  * @public
@@ -299,7 +299,7 @@ sap.ui.define([
299
299
  *
300
300
  * Contains IDs of shared DOM references, which should be accessible to inheriting controls via getDomRef() function.
301
301
  *
302
- * @version 1.126.1
302
+ * @version 1.128.0
303
303
  * @enum {string}
304
304
  * @public
305
305
  */
@@ -400,7 +400,7 @@ sap.ui.define([
400
400
  *
401
401
  * This is an alias for {@link sap.ui.model.TreeAutoExpandMode} and kept for compatibility reasons.
402
402
  *
403
- * @version 1.126.1
403
+ * @version 1.128.0
404
404
  * @typedef {sap.ui.model.TreeAutoExpandMode}
405
405
  * @public
406
406
  * @deprecated As of version 1.120, replaced by <code>sap.ui.model.TreeAutoExpandMode</code>
@@ -414,7 +414,7 @@ sap.ui.define([
414
414
  /**
415
415
  * Mode of a selection plugin
416
416
  *
417
- * @version 1.126.1
417
+ * @version 1.128.0
418
418
  * @enum {string}
419
419
  * @private
420
420
  */
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  *
36
36
  * @extends sap.ui.base.Object
37
37
  * @author SAP SE
38
- * @version 1.126.1
38
+ * @version 1.128.0
39
39
  * @private
40
40
  * @alias sap.ui.table.menus.ColumnHeaderMenuAdapter
41
41
  */