@sapui5/sap.suite.ui.commons 1.140.0 → 1.142.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 (65) hide show
  1. package/package.json +1 -1
  2. package/src/sap/suite/ui/commons/.library +1 -1
  3. package/src/sap/suite/ui/commons/AriaProperties.js +1 -1
  4. package/src/sap/suite/ui/commons/CalculationBuilder.js +13 -2
  5. package/src/sap/suite/ui/commons/CalculationBuilderExpression.js +11 -7
  6. package/src/sap/suite/ui/commons/CalculationBuilderFunction.js +1 -1
  7. package/src/sap/suite/ui/commons/CalculationBuilderGroup.js +1 -1
  8. package/src/sap/suite/ui/commons/CalculationBuilderItem.js +12 -6
  9. package/src/sap/suite/ui/commons/CalculationBuilderValidationResult.js +1 -1
  10. package/src/sap/suite/ui/commons/CalculationBuilderVariable.js +1 -1
  11. package/src/sap/suite/ui/commons/CloudFilePicker.js +21 -21
  12. package/src/sap/suite/ui/commons/MicroProcessFlow.js +2 -2
  13. package/src/sap/suite/ui/commons/MicroProcessFlowItem.js +7 -9
  14. package/src/sap/suite/ui/commons/Timeline.js +22 -24
  15. package/src/sap/suite/ui/commons/TimelineItemRenderer.js +12 -2
  16. package/src/sap/suite/ui/commons/TimelineRenderManager.js +25 -13
  17. package/src/sap/suite/ui/commons/collaboration/BaseHelperService.js +12 -12
  18. package/src/sap/suite/ui/commons/collaboration/CollaborationCardHelper.js +6 -5
  19. package/src/sap/suite/ui/commons/collaboration/CollaborationContactInfoHelper.js +15 -15
  20. package/src/sap/suite/ui/commons/collaboration/CollaborationHelper.js +94 -76
  21. package/src/sap/suite/ui/commons/collaboration/CollaborationManagerService.js +41 -41
  22. package/src/sap/suite/ui/commons/collaboration/ContactHelper.js +288 -286
  23. package/src/sap/suite/ui/commons/collaboration/ServiceContainer.js +33 -33
  24. package/src/sap/suite/ui/commons/collaboration/TeamsHelperService.js +446 -150
  25. package/src/sap/suite/ui/commons/collaboration/UniversalCollaborationBar.js +366 -0
  26. package/src/sap/suite/ui/commons/collaboration/flpplugins/msplugin/Component-preload.js +6 -3
  27. package/src/sap/suite/ui/commons/collaboration/flpplugins/msplugin/Component.js +11 -13
  28. package/src/sap/suite/ui/commons/flexibility/changeHandler/PropertyChangeMapper.js +1 -1
  29. package/src/sap/suite/ui/commons/imageeditor/CropCustomShapeHistoryItem.js +1 -1
  30. package/src/sap/suite/ui/commons/imageeditor/CropEllipseHistoryItem.js +1 -1
  31. package/src/sap/suite/ui/commons/imageeditor/CropRectangleHistoryItem.js +1 -1
  32. package/src/sap/suite/ui/commons/imageeditor/CustomSizeItem.js +1 -1
  33. package/src/sap/suite/ui/commons/imageeditor/FilterHistoryItem.js +1 -1
  34. package/src/sap/suite/ui/commons/imageeditor/FlipHistoryItem.js +1 -1
  35. package/src/sap/suite/ui/commons/imageeditor/HistoryItem.js +1 -1
  36. package/src/sap/suite/ui/commons/imageeditor/ImageEditor.js +1 -1
  37. package/src/sap/suite/ui/commons/imageeditor/ImageEditorContainer.js +1 -1
  38. package/src/sap/suite/ui/commons/imageeditor/ImageEditorResponsiveContainer.js +1 -1
  39. package/src/sap/suite/ui/commons/imageeditor/ResizeHistoryItem.js +1 -1
  40. package/src/sap/suite/ui/commons/imageeditor/RotateHistoryItem.js +1 -1
  41. package/src/sap/suite/ui/commons/library.js +1 -1
  42. package/src/sap/suite/ui/commons/messagebundle.properties +16 -1
  43. package/src/sap/suite/ui/commons/messagebundle_en.properties +3 -0
  44. package/src/sap/suite/ui/commons/networkgraph/Graph.js +105 -5
  45. package/src/sap/suite/ui/commons/networkgraph/Node.js +33 -11
  46. package/src/sap/suite/ui/commons/networkgraph/util/DragDropManager.js +197 -0
  47. package/src/sap/suite/ui/commons/statusindicator/Circle.js +1 -1
  48. package/src/sap/suite/ui/commons/statusindicator/CustomShape.js +1 -1
  49. package/src/sap/suite/ui/commons/statusindicator/DiscreteThreshold.js +1 -1
  50. package/src/sap/suite/ui/commons/statusindicator/FillingOption.js +1 -1
  51. package/src/sap/suite/ui/commons/statusindicator/LibraryShape.js +1 -1
  52. package/src/sap/suite/ui/commons/statusindicator/Path.js +1 -1
  53. package/src/sap/suite/ui/commons/statusindicator/PropertyThreshold.js +1 -1
  54. package/src/sap/suite/ui/commons/statusindicator/Rectangle.js +1 -1
  55. package/src/sap/suite/ui/commons/statusindicator/Shape.js +1 -1
  56. package/src/sap/suite/ui/commons/statusindicator/ShapeGroup.js +1 -1
  57. package/src/sap/suite/ui/commons/statusindicator/SimpleShape.js +1 -1
  58. package/src/sap/suite/ui/commons/statusindicator/StatusIndicator.js +1 -1
  59. package/src/sap/suite/ui/commons/taccount/TAccount.js +1 -1
  60. package/src/sap/suite/ui/commons/taccount/TAccountGroup.js +1 -1
  61. package/src/sap/suite/ui/commons/taccount/TAccountItem.js +1 -1
  62. package/src/sap/suite/ui/commons/taccount/TAccountItemProperty.js +1 -1
  63. package/src/sap/suite/ui/commons/taccount/TAccountPanel.js +1 -1
  64. package/src/sap/suite/ui/commons/themes/base/CollaborationPopover.less +29 -1
  65. package/src/sap/suite/ui/commons/themes/base/NetworkGraph.less +5 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.suite.ui.commons",
3
- "version": "1.140.0",
3
+ "version": "1.142.0",
4
4
  "description": "SAPUI5 Library sap.suite.ui.commons",
5
5
  "homepage": "https://sap.github.io/ui5-tooling/pages/SAPUI5/",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -7,7 +7,7 @@
7
7
  SAP UI development toolkit for HTML5 (SAPUI5)
8
8
  (c) Copyright 2009-2015 SAP SE. All rights reserved
9
9
  </copyright>
10
- <version>1.140.0</version>
10
+ <version>1.142.0</version>
11
11
 
12
12
  <documentation>SAP UI library: sap.suite.ui.commons</documentation>
13
13
 
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @extends sap.ui.core.Element
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.140.0
22
+ * @version 1.142.0
23
23
  * @since 1.65.0
24
24
  *
25
25
  * @constructor
@@ -134,7 +134,7 @@ sap.ui.define([
134
134
  * @extends sap.ui.core.Control
135
135
  *
136
136
  * @author SAP SE
137
- * @version 1.140.0
137
+ * @version 1.142.0
138
138
  * @since 1.56.0
139
139
  *
140
140
  * @constructor
@@ -1090,7 +1090,18 @@ sap.ui.define([
1090
1090
  };
1091
1091
 
1092
1092
  CalculationBuilder.prototype._isTokenAllowed = function (sKey) {
1093
- return !this._mDisabledTokens[(sKey || "").toLowerCase()];
1093
+ sKey = (sKey || "").toLowerCase();
1094
+ // Check if the token is a custom function by searching the aggregation
1095
+ var bCustomFunction = this.getFunctions().some(function (oFunction) {
1096
+ return oFunction.getKey().toLowerCase() === sKey;
1097
+ });
1098
+ // If this is a custom function and its key is present in _mDisabledTokens,
1099
+ // allow it (custom functions are not blocked by disabledDefaultTokens)
1100
+ if (bCustomFunction && this._mDisabledTokens[sKey]) {
1101
+ return true;
1102
+ }
1103
+ // For all other cases, block if present in _mDisabledTokens
1104
+ return !this._mDisabledTokens[sKey];
1094
1105
  };
1095
1106
 
1096
1107
  CalculationBuilder.prototype.setDisabledDefaultTokens = function (sValue) {
@@ -148,7 +148,7 @@ sap.ui.define([
148
148
  * @extends sap.ui.core.Control
149
149
  *
150
150
  * @author SAP SE
151
- * @version 1.140.0
151
+ * @version 1.142.0
152
152
  * @since 1.56.0
153
153
  *
154
154
  * @constructor
@@ -1592,7 +1592,7 @@ sap.ui.define([
1592
1592
  this.getItems().forEach(function (oItem) {
1593
1593
  aDomRefs.push(oItem.getFocusDomRef());
1594
1594
  if (oItem.isExpandable()) {
1595
- aDomRefs.push(oItem.$("expandbutton"));
1595
+ aDomRefs.push(oItem.$("expandbutton")[0]);
1596
1596
  }
1597
1597
  });
1598
1598
  aDomRefs.push(this._getNewItem().getFocusDomRef());
@@ -1650,10 +1650,14 @@ sap.ui.define([
1650
1650
  CalculationBuilderExpression.prototype._printErrors = function () {
1651
1651
  this.getItems().forEach(function (oItem) {
1652
1652
  var oError = oItem._getItemError(),
1653
- $this = oItem.$(),
1654
- sFnName = !!oError ? "addClass" : "removeClass";
1655
-
1656
- $this[sFnName]("sapCalculationBuilderItemErrorSyntax");
1653
+ $this = oItem.$();
1654
+ if (oError) {
1655
+ oItem._oArrowNavigtionInvisibleText.setText(oResourceBundle.getText("CALCULATION_BUILDER_NEGATIVE_ACTION") + " " + oResourceBundle.getText("CALCULATION_BUILDER_NAVIGATION"));
1656
+ $this.addClass("sapCalculationBuilderItemErrorSyntax");
1657
+ } else {
1658
+ oItem._oArrowNavigtionInvisibleText.setText(oResourceBundle.getText("CALCULATION_BUILDER_NAVIGATION"));
1659
+ $this.removeClass("sapCalculationBuilderItemErrorSyntax");
1660
+ }
1657
1661
  });
1658
1662
 
1659
1663
  if (this.getParent().getLayoutType() === LayoutTypes.VisualOnly) {
@@ -1662,7 +1666,7 @@ sap.ui.define([
1662
1666
  };
1663
1667
 
1664
1668
  CalculationBuilderExpression.prototype._validateSyntax = function (mParameters) {
1665
- //Usually The map creation is done on the onBeforeRendering hook of this class but this method is getting invoked even before the onBeforeRendering is called
1669
+ //Usually The map creation is done on the onBeforeRendering hook of this class but this method is getting invoked even before the onBeforeRendering is called
1666
1670
  //Its getting called from the "sap.suite.ui.commons.CalculationBuilder.js"
1667
1671
  //To handle this case we are calling the _createMap function to ensure all maps are created appropriately
1668
1672
  this._createMap();
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.core.Control
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.140.0
29
+ * @version 1.142.0
30
30
  * @since 1.56.0
31
31
  *
32
32
  * @constructor
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  * @extends sap.ui.core.Control
23
23
  *
24
24
  * @author SAP SE
25
- * @version 1.140.0
25
+ * @version 1.142.0
26
26
  * @since 1.60.0
27
27
  *
28
28
  * @constructor
@@ -14,11 +14,12 @@ sap.ui.define([
14
14
  "sap/base/security/encodeXML",
15
15
  "./Utils",
16
16
  "sap/ui/core/Lib",
17
+ "sap/ui/core/InvisibleText",
17
18
  "sap/ui/thirdparty/jqueryui/jquery-ui-core",
18
19
  "sap/ui/thirdparty/jqueryui/jquery-ui-widget",
19
20
  "sap/ui/thirdparty/jqueryui/jquery-ui-mouse",
20
21
  "sap/ui/thirdparty/jqueryui/jquery-ui-draggable"
21
- ], function (jQuery, library, BaseObject, Control, MessageBox, encodeXML, Utils, CoreLib) {
22
+ ], function (jQuery, library, BaseObject, Control, MessageBox, encodeXML, Utils, CoreLib, InvisibleText) {
22
23
  "use strict";
23
24
 
24
25
  var ItemType = library.CalculationBuilderItemType,
@@ -39,7 +40,7 @@ sap.ui.define([
39
40
  * @extends sap.ui.core.Control
40
41
  *
41
42
  * @author SAP SE
42
- * @version 1.140.0
43
+ * @version 1.142.0
43
44
  * @since 1.56.0
44
45
  *
45
46
  * @constructor
@@ -146,7 +147,8 @@ sap.ui.define([
146
147
  oRm.class("sapCalculationBuilderItemContent");
147
148
  oRm.attr("title", this.getParent()._operatorTooltip[sLabel] ? oResourceBundle.getText(this.getParent()._operatorTooltip[sLabel]) : "");
148
149
  if (this._bIsNew || this._isEmpty()) {
149
- oRm.attr("title",oResourceBundle.getText("CALCULATION_BUILDER_NEW_ITEM_TITLE"));
150
+ oRm.attr("title", oResourceBundle.getText("CALCULATION_BUILDER_NEW_ITEM_TITLE"));
151
+ fnGetItemAriaLabel(oRm, "CALCULATION_BUILDER_NEW_ITEM_TITLE");
150
152
  } else if (oItemsWithAriaLabel[sLabel]) {
151
153
  fnGetItemAriaLabel(oRm, "CALCULATION_BUILDER_" + oItemsWithAriaLabel[sLabel] + "_ARIA_LABEL");
152
154
  }
@@ -251,10 +253,9 @@ sap.ui.define([
251
253
  oRm.attr("id",this.getId());
252
254
  oRm.attr("tabindex", sTabIndexAttr);
253
255
  oRm.attr("title", sTooltipAttr);
254
- oRm.attr("role", sRoleAttr);
256
+ oRm.attr("role", "button");
257
+ oRm.attr("aria-describedby", this._oArrowNavigtionInvisibleText.getId())
255
258
  oRm.openEnd();
256
- // for now we can't add data-sap-ui as it collide with dragging selected items (for unknown reason)
257
- //sHtml += "<div " + " class=\"" + this._getClass(!!oError) + "\" data-sap-ui=\"" + this.getId() + "\" id=\"" + this.getId() + "\" tabindex=\"" + (bIsItemInBuilder ? "-1" : "0") + "\"" + sTooltipAttr + ">";
258
259
  this._innerRender(oRm);
259
260
  oRm.close("div");
260
261
  };
@@ -265,6 +266,11 @@ sap.ui.define([
265
266
  CalculationBuilderItem.prototype.init = function () {
266
267
  // Indicates whether the item is NewItem
267
268
  this._bIsNew = false;
269
+ if (!this._oArrowNavigtionInvisibleText) {
270
+ this._oArrowNavigtionInvisibleText = new InvisibleText();
271
+ this._oArrowNavigtionInvisibleText.toStatic();
272
+ this._oArrowNavigtionInvisibleText.setText(oResourceBundle.getText("CALCULATION_BUILDER_NAVIGATION"));
273
+ }
268
274
  };
269
275
 
270
276
  CalculationBuilderItem.prototype.onBeforeRendering = function () {
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * @extends sap.ui.base.ManagedObject
22
22
  *
23
23
  * @author SAP SE
24
- * @version 1.140.0
24
+ * @version 1.142.0
25
25
  * @since 1.56.0
26
26
  *
27
27
  * @constructor
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  * @extends sap.ui.core.Control
24
24
  *
25
25
  * @author SAP SE
26
- * @version 1.140.0
26
+ * @version 1.142.0
27
27
  * @since 1.56.0
28
28
  *
29
29
  * @constructor
@@ -33,7 +33,8 @@ sap.ui.define([
33
33
  "sap/m/OverflowToolbar",
34
34
  "sap/m/ToolbarSpacer",
35
35
  "sap/m/Title",
36
- "sap/m/table/columnmenu/ActionItem",
36
+ "sap/m/table/columnmenu/QuickSort",
37
+ "sap/m/table/columnmenu/QuickSortItem",
37
38
  "sap/m/table/columnmenu/Menu",
38
39
  "sap/ui/core/CustomData",
39
40
  "sap/ui/model/Sorter",
@@ -77,8 +78,9 @@ sap.ui.define([
77
78
  OverflowToolbar,
78
79
  ToolbarSpacer,
79
80
  Title,
80
- ActionItem,
81
- Columnmenu,
81
+ QuickSort,
82
+ QuickSortItem,
83
+ ColumnMenu,
82
84
  CustomData,
83
85
  Sorter,
84
86
  SearchField,
@@ -118,7 +120,7 @@ sap.ui.define([
118
120
  * @class
119
121
  * @public
120
122
  * @internal
121
- * @version 1.140.0
123
+ * @version 1.142.0
122
124
  */
123
125
  var CloudFilePicker = Dialog.extend("sap.suite.ui.commons.CloudFilePicker", {
124
126
  metadata: {
@@ -707,23 +709,19 @@ sap.ui.define([
707
709
  if (sColumnType === "CreatedByUser" || sColumnType === "FileShareItemContentSize" || sColumnType === "FileShareItemContentType") {
708
710
  return;
709
711
  }
710
- var oColumnMenu = new Columnmenu({
711
- items: [
712
- new ActionItem({
713
- icon: "sap-icon://sort-ascending",
714
- press: function() {
715
- this._fHandleSorting(oColumn, true);
716
- }.bind(this)
717
- }),
718
- new ActionItem({
719
- icon: "sap-icon://sort-descending",
720
- press: function() {
721
- this._fHandleSorting(oColumn, false);
712
+ var oColumnMenu = new ColumnMenu({
713
+ quickActions: [
714
+ new QuickSort({
715
+ items: new QuickSortItem({key: sColumnType, label: oColumn.getHeader().getText()}),
716
+ change: function(oEvent) {
717
+ const sSortOrder = oEvent.getParameter("item").getSortOrder();
718
+ this._fHandleSorting(oColumn, sSortOrder);
722
719
  }.bind(this)
723
720
  })
724
721
  ]
725
722
  });
726
723
 
724
+ oColumnMenu.getQuickActions()[0].getItems()[0].setSortOrder(oColumn.getSortIndicator());
727
725
  oColumnMenu.openBy(oColumn);
728
726
  }.bind(this));
729
727
 
@@ -962,16 +960,18 @@ sap.ui.define([
962
960
  oApproveDialog.open();
963
961
  };
964
962
 
965
- CloudFilePicker.prototype._fHandleSorting = function(oColumn, bIsAsc) {
963
+ CloudFilePicker.prototype._fHandleSorting = function(oColumn, sSortOrder) {
966
964
  this._clearCheckboxFileSelections();
967
- var sNewSort = bIsAsc ? SortOrder.Ascending : SortOrder.Descending;
968
- if (sNewSort === oColumn.getSortIndicator()) {
969
- sNewSort = SortOrder.None;
965
+ var bIsAsc = false
966
+ if (sSortOrder === SortOrder.Ascending) {
967
+ bIsAsc = true;
968
+ } else if (sSortOrder === SortOrder.Descending) {
969
+ bIsAsc = false;
970
970
  }
971
971
  this.oTableControl.getColumns().forEach(function(oColumn){
972
972
  oColumn.setSortIndicator("None");
973
973
  });
974
- oColumn.setSortIndicator(sNewSort);
974
+ oColumn.setSortIndicator(sSortOrder);
975
975
  var sSortProperty = oColumn.data("bindingProperty");
976
976
  var oItemBinding = this.oTableControl.getBinding("items");
977
977
  oItemBinding.sort([
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.core.Control
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.140.0
50
+ * @version 1.142.0
51
51
  *
52
52
  * @constructor
53
53
  * @public
@@ -107,7 +107,7 @@ sap.ui.define([
107
107
 
108
108
  oRM.openStart("div", oMicroProcessFlow);
109
109
 
110
- oRM.attr("role", "listbox");
110
+ oRM.attr("role", "list");
111
111
  oRM.attr("aria-roledescription", oResourceBundle.getText("ACC_CTR_TYPE_MICRO_PROCESS_FLOW"));
112
112
  oRM.attr("aria-label",sLabel);
113
113
 
@@ -38,7 +38,7 @@ sap.ui.define([
38
38
  * @extends sap.ui.core.Control
39
39
  *
40
40
  * @author SAP SE
41
- * @version 1.140.0
41
+ * @version 1.142.0
42
42
  *
43
43
  * @constructor
44
44
  * @public
@@ -202,9 +202,12 @@ sap.ui.define([
202
202
  oRM.attr("tabindex", "0");
203
203
  oRM.class("sapSuiteUiCommonsMicroProcessFlowItem").class("sapSuiteUiCommonsMicroProcessFlowItem" + oMicroProcessFlowItem.getState());
204
204
  oRM.attr("aria-label", oMicroProcessFlowItem._getAriaText());
205
- oRM.attr("role", "option");
206
- oRM.attr("aria-roledescription", `${oMicroProcessFlowItem._iIndex} of ${oMicroProcessFlowItem._iItemsCount}`);
207
- oRM.attr("aria-selected", "false");
205
+ if (oMicroProcessFlowItem.hasListeners("press")) {
206
+ oRM.attr("role", "button");
207
+ oRM.attr("aria-roledescription", oResourceBundle.getText("MICRO_PROCESS_FLOW_ITEM_ACC_BUTTON",[oMicroProcessFlowItem._iIndex,oMicroProcessFlowItem._iItemsCount]));
208
+ } else {
209
+ oRM.attr("role", "listitem");
210
+ }
208
211
  oRM.openEnd();
209
212
 
210
213
  if (sIcon) {
@@ -242,7 +245,6 @@ sap.ui.define([
242
245
  $item.attr("tabindex", 0);
243
246
  }
244
247
  $item.attr("aria-label", sAriaLabel);
245
- $item.attr("role", "option");
246
248
  $item.attr("aria-posinset", this._iIndex);
247
249
  $item.attr("aria-setsize", this._iItemsCount);
248
250
  this._setItemContentAccessibility();
@@ -262,8 +264,6 @@ sap.ui.define([
262
264
 
263
265
  if (bHasPressEvent) {
264
266
  $item.css("cursor", "pointer");
265
- $item.attr("role", "button");
266
- $item.attr("aria-hidden", "true");
267
267
  }
268
268
  };
269
269
 
@@ -355,11 +355,9 @@ sap.ui.define([
355
355
  var selectedItem = document.getElementsByClassName('sapSuiteMicroProcessFlowItemSelected')[0];
356
356
  var item = this._getAccessibleItem()[0];
357
357
  if (selectedItem) {
358
- selectedItem.setAttribute("aria-selected", false);
359
358
  selectedItem.classList.remove("sapSuiteMicroProcessFlowItemSelected");
360
359
  }
361
360
  if (item.tabIndex == "0") {
362
- item.setAttribute("aria-selected", true);
363
361
  item.classList.add("sapSuiteMicroProcessFlowItemSelected");
364
362
  }
365
363
  };
@@ -33,9 +33,10 @@ sap.ui.define([
33
33
  "sap/ui/core/Configuration",
34
34
  "./TimelineRenderer",
35
35
  "sap/ui/core/Lib",
36
- "sap/base/i18n/Localization"
36
+ "sap/base/i18n/Localization",
37
+ "sap/base/util/deepEqual"
37
38
  ], function (jQuery, library, Control, ResizeHandler, DateFormat, ClientListBinding, FilterType, TimelineNavigator, DateUtils, ManagedObjectRegister,
38
- JSONModel, Sorter, Filter, FilterOperator, ManagedObject, TimelineItem, TimelineRenderManager, ScrollEnablement, BaseObject, assert, Log, UI5Date, Configuration, TimelineRenderer, CoreLib, Localization) {
39
+ JSONModel, Sorter, Filter, FilterOperator, ManagedObject, TimelineItem, TimelineRenderManager, ScrollEnablement, BaseObject, assert, Log, UI5Date, Configuration, TimelineRenderer, CoreLib, Localization, deepEqual) {
39
40
  "use strict";
40
41
 
41
42
  var ScrollingFadeout = library.TimelineScrollingFadeout,
@@ -1183,7 +1184,7 @@ sap.ui.define([
1183
1184
  aCurrentFilters = [];
1184
1185
  if (oBinding) {
1185
1186
  if (!bResetAll) {
1186
- aFilters = oBinding.aFilters.length != 0 ? [...oBinding.aFilters] : this.aPrevFilters || [];
1187
+ aFilters = oBinding.aFilters.length != 0 ? [...oBinding.aFilters] : this.aPrevFilters.map(val => val) || [];
1187
1188
  }
1188
1189
 
1189
1190
  if (this._dataFilter) {
@@ -1214,6 +1215,10 @@ sap.ui.define([
1214
1215
  aFilters.push(this._filter);
1215
1216
  }
1216
1217
  if (aFilters.length) {
1218
+ if(deepEqual(aFilters, this.aPrevFilters)){
1219
+ this._setBusy(false);
1220
+ return;
1221
+ }
1217
1222
  this.aPrevFilters = aFilters.map(function (val) { return val; });
1218
1223
  oBinding.filter(aFilters, FilterType.Control);
1219
1224
  } else {
@@ -1603,16 +1608,16 @@ sap.ui.define([
1603
1608
  */
1604
1609
  Timeline.prototype._clearFilter = function () {
1605
1610
  var fnClearTimeRangeFilter = function () {
1606
- var bExecuteDefault,
1607
- oSlider = this._objects.getTimeRangeSlider();
1611
+ var oSlider = this._objects.getTimeRangeSlider();
1608
1612
  this._startDate = null;
1609
1613
  this._endDate = null;
1610
1614
  this._rangeMessage = null;
1611
1615
 
1612
1616
  oSlider.setRange([oSlider.getMin(), oSlider.getMax()]);
1613
1617
 
1618
+ // Fire event but don't let it prevent filter clearing
1614
1619
  if (this._useModelFilter()) {
1615
- bExecuteDefault = this._fireSelectionChange({
1620
+ this._fireSelectionChange({
1616
1621
  clear: true,
1617
1622
  timeKeys: {
1618
1623
  from: null,
@@ -1621,40 +1626,33 @@ sap.ui.define([
1621
1626
  type: TimelineFilterType.Range
1622
1627
  });
1623
1628
  }
1624
- return bExecuteDefault;
1629
+ return true; // Always return true to ensure filter clearing
1625
1630
  }.bind(this),
1626
1631
  fnClearDataFilter = function () {
1627
- var bExecuteDefault;
1628
1632
 
1629
1633
  this._currentFilterKeys = [];
1630
1634
  if (this._useModelFilter()) {
1631
- bExecuteDefault = this._fireSelectionChange({
1635
+ this._fireSelectionChange({
1632
1636
  clear: true,
1633
1637
  selectedItems: [],
1634
1638
  selectedItem: "",
1635
1639
  type: TimelineFilterType.Data
1636
1640
  });
1637
1641
  }
1638
- return bExecuteDefault;
1642
+ return true; // Always return true to ensure filter clearing
1639
1643
  }.bind(this);
1640
1644
 
1641
- var bDataDefault = fnClearDataFilter(),
1642
- bRangeDefault = fnClearTimeRangeFilter();
1645
+ // Execute both clear functions
1646
+ fnClearDataFilter(),
1647
+ fnClearTimeRangeFilter();
1643
1648
 
1644
- // clear custom filter
1645
- this._customFilterMessage = "";
1646
- if (bDataDefault || bRangeDefault) {
1647
- if (bDataDefault) {
1649
+ // Always clear filters regardless of event handling
1650
+ this._customFilterMessage = "";
1648
1651
  this._dataFilter = null;
1649
- }
1650
-
1651
- if (bRangeDefault) {
1652
1652
  this._rangeDataFilter = null;
1653
- }
1654
- this.recreateFilter(true /*force clear custom filters*/);
1655
- } else {
1656
- this.invalidate();
1657
- }
1653
+
1654
+ /*force clear custom filters*/
1655
+ this.recreateFilter(true);
1658
1656
 
1659
1657
  //reset filter
1660
1658
  // this is a bit overkill but we are so far unable to reset filter to it's init state without some filter's internal errors
@@ -366,7 +366,6 @@ sap.ui.define([
366
366
  eTimelineItem.setAttribute("aria-level", 2);
367
367
  }
368
368
  eTimelineItem.addClass("sapSuiteUiCommonsTimelineItem");
369
- eTimelineItem.setAttribute("aria-labelledby", oTimelineItem.getAriaLabelledBy().join(" "), true);
370
369
 
371
370
  if (oTimelineItem._isLast) {
372
371
  eTimelineItem.addClass("sapSuiteUiCommonsTimelineLastItem");
@@ -476,6 +475,7 @@ sap.ui.define([
476
475
  eShellItem.addChild(oTimelineItem._objects.getInfoBar());
477
476
  eShellItem.addChild(eHeaderWrapper);
478
477
 
478
+ eHeaderWrapper.setId(oTimelineItem.getId() + "-headerWrapper");
479
479
  eHeaderWrapper.addClass("sapSuiteUiCommonsTimelineItemHeaderWrapper");
480
480
 
481
481
  oUserPicture = oTimelineItem._getUserPictureControl();
@@ -511,7 +511,7 @@ sap.ui.define([
511
511
  eDateTime.addChildEscaped(this._getFormatedDateTime(oTimelineItem));
512
512
  eDateTime.setAttribute("aria-label", sAriaLabelForDateTime, false);
513
513
  eHeader.addChild(eDateTime);
514
-
514
+ eBody.setId(oTimelineItem.getId() + "-shellbody");
515
515
  eBody.addClass("sapSuiteUiCommonsTimelineItemShellBody");
516
516
  eShellItem.addChild(eBody);
517
517
 
@@ -598,6 +598,16 @@ sap.ui.define([
598
598
  }
599
599
  }
600
600
  eTimelineItem.setAttribute("aria-label", sGroupHeader, false);
601
+ } else {
602
+ const aAriaLabelledByIds = [oTimelineItem.getId() + "-headerWrapper"];
603
+ if (!oTimelineItem.getEmbeddedControl()) {
604
+ aAriaLabelledByIds.push(oTimelineItem.getId() + "-shellbody");
605
+ }
606
+ var aLabelledBy = [...aAriaLabelledByIds, ...oTimelineItem.getAriaLabelledBy()];
607
+ if (oTimelineItem._objects && oTimelineItem._objects.getLineIcon) {
608
+ aLabelledBy.push(oTimelineItem._objects.getLineIcon().getId());
609
+ }
610
+ eTimelineItem.setAttribute("aria-labelledby", aLabelledBy.join(" "));
601
611
  }
602
612
  };
603
613
 
@@ -801,23 +801,35 @@ sap.ui.define([
801
801
  });
802
802
 
803
803
  this._objects.register("filterMessageText", function () {
804
- return new Text(that.getId() + "-filterMessageText", {});
805
- });
804
+ var oText = new Text(that.getId() + "-filterMessageText", {});
805
+ // Configure text to grow and shrink
806
+ oText.setLayoutData(new OverflowToolbarLayoutData({
807
+ shrinkable: true,
808
+ moveToOverflow: false
809
+ }));
810
+ return oText;
811
+ });
806
812
 
807
813
  this._objects.register("filterMessage", function () {
808
814
  var oText = that._objects.getFilterMessageText(),
809
815
  oToolbar, oIcon;
810
-
811
- oIcon = new Icon(that.getId() + "filterMessageIcon", {
812
- src: "sap-icon://decline",
813
- decorative: false,
814
- press: [that._clearFilter, that]
815
- });
816
- oIcon.setTooltip(resourceBundle.getText('TIMELINE_CLEAR_ICN_TOOLTIP'));
817
- oToolbar = new OverflowToolbar(that.getId() + "-filterMessage", {
818
- design: "Info",
819
- content: [oText, new ToolbarSpacer(), oIcon]
820
- });
816
+
817
+ // Configure icon with proper layout data
818
+ oIcon = new Icon(that.getId() + "filterMessageIcon", {
819
+ src: "sap-icon://decline",
820
+ decorative: false,
821
+ press: [that._clearFilter, that]
822
+ });
823
+ oIcon.setTooltip(resourceBundle.getText('TIMELINE_CLEAR_ICN_TOOLTIP'));
824
+ oIcon.setLayoutData(new OverflowToolbarLayoutData({
825
+ shrinkable: false,
826
+ priority: "NeverOverflow"
827
+ }));
828
+
829
+ oToolbar = new OverflowToolbar(that.getId() + "-filterMessage", {
830
+ design: "Info",
831
+ content: [oText, new ToolbarSpacer(), oIcon]
832
+ });
821
833
 
822
834
  oToolbar.addStyleClass("sapSuiteUiCommonsTimelineFilterInfoBar");
823
835
  oToolbar.setHeight("auto");
@@ -6,7 +6,7 @@
6
6
  */
7
7
  sap.ui.define([
8
8
  "sap/ui/base/Object"
9
- ], function (BaseObject) {
9
+ ], function(BaseObject) {
10
10
  "use strict";
11
11
 
12
12
  /**
@@ -17,7 +17,7 @@ sap.ui.define([
17
17
  * @public
18
18
  */
19
19
  var BaseHelperService = BaseObject.extend("sap.suite.ui.commons.collaboration.BaseHelperService", {
20
- constructor: function (oProviderConfig) {
20
+ constructor: function(oProviderConfig) {
21
21
  this._providerConfig = oProviderConfig;
22
22
  }
23
23
  });
@@ -69,27 +69,27 @@ sap.ui.define([
69
69
  * @returns {boolean} A Boolean that determines whether or not the collaboration with contacts is supported in Microsoft Teams
70
70
  * @public
71
71
  */
72
- BaseHelperService.prototype.isContactsCollaborationSupported = function () {
72
+ BaseHelperService.prototype.isContactsCollaborationSupported = function() {
73
73
  return false;
74
74
  };
75
75
 
76
- /**
76
+ /**
77
77
  * Enables the Microsoft Teams collaboration functionality by providing a contact quick view with the options to start a message, audio call or video call
78
78
  * @param {string} sEmail Provides the email of the contact to be used for the communication using Microsoft Teams
79
79
  * @param {object} oParams Parameter object which contains the information to be shared
80
80
  * @returns {Promise} Returns promise resolving to an instance of the contact quick view providing the data for the collaboration functionality
81
81
  * @public
82
82
  */
83
- BaseHelperService.prototype.enableContactsCollaboration = async function (sEmail, oParams) {
83
+ BaseHelperService.prototype.enableContactsCollaboration = function(sEmail, oParams) {
84
84
  return Promise.resolve({});
85
85
  };
86
86
 
87
- /**
87
+ /**
88
88
  * Provides the Microsoft Teams collaboration options for the contact quick view
89
89
  * @returns {Promise} Returns promise which has the options for teams collaboration
90
90
  * @public
91
91
  */
92
- BaseHelperService.prototype.getTeamsContactCollabOptions = async function () {
92
+ BaseHelperService.prototype.getTeamsContactCollabOptions = function() {
93
93
  return Promise.resolve({});
94
94
  };
95
95
 
@@ -98,7 +98,7 @@ sap.ui.define([
98
98
  * @returns {boolean} If set to true, Adaptive Card Generation is enabled
99
99
  * @public
100
100
  */
101
- BaseHelperService.prototype.isFeatureFlagEnabled = function () {
101
+ BaseHelperService.prototype.isFeatureFlagEnabled = function() {
102
102
  return false;
103
103
  };
104
104
 
@@ -109,11 +109,11 @@ sap.ui.define([
109
109
  * @public
110
110
  */
111
111
 
112
- BaseHelperService.prototype.getTeamsContactStatus = async function (sEmail) {
112
+ BaseHelperService.prototype.getTeamsContactStatus = function(sEmail) {
113
113
  return Promise.resolve({});
114
- }
114
+ };
115
115
 
116
- /**
116
+ /**
117
117
  * Opens a Popup that helps to share content to teams, mail.
118
118
  * @param { object } oParams Optional argument in case consumer wants to influence the options, otherwise pass as undefined
119
119
  * @param { object } oData Title and data to share
@@ -124,7 +124,7 @@ sap.ui.define([
124
124
  */
125
125
  BaseHelperService.prototype.getCollaborationPopover = function(oParams, oData, oSource, isLink, oCollaborationOptionsConfig) {
126
126
 
127
- }
127
+ };
128
128
 
129
129
  return BaseHelperService;
130
130
  });