@sapui5/sap.fe.macros 1.140.0 → 1.141.1

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 (199) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +53 -2
  4. package/src/sap/fe/macros/Chart.tsx +55 -0
  5. package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
  6. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
  7. package/src/sap/fe/macros/CommonHelper.js +59 -15
  8. package/src/sap/fe/macros/CommonHelper.ts +65 -14
  9. package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
  10. package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
  11. package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
  12. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
  13. package/src/sap/fe/macros/Field.js +14 -10
  14. package/src/sap/fe/macros/Field.ts +15 -12
  15. package/src/sap/fe/macros/MacroAPI.js +9 -4
  16. package/src/sap/fe/macros/MacroAPI.ts +9 -4
  17. package/src/sap/fe/macros/MultiValueField.js +10 -5
  18. package/src/sap/fe/macros/MultiValueField.tsx +7 -1
  19. package/src/sap/fe/macros/Page.js +5 -7
  20. package/src/sap/fe/macros/Page.tsx +4 -6
  21. package/src/sap/fe/macros/Paginator.js +9 -4
  22. package/src/sap/fe/macros/Paginator.tsx +12 -3
  23. package/src/sap/fe/macros/RichTextEditor.js +3 -2
  24. package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
  25. package/src/sap/fe/macros/Status.js +38 -13
  26. package/src/sap/fe/macros/Status.tsx +26 -6
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +195 -55
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +234 -57
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
  33. package/src/sap/fe/macros/chart/Chart.js +2 -2
  34. package/src/sap/fe/macros/chart/Chart.tsx +1 -1
  35. package/src/sap/fe/macros/chart/MdcChartTemplate.js +4 -2
  36. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +4 -1
  37. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
  38. package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
  39. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  40. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  41. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +2 -2
  42. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +1 -1
  43. package/src/sap/fe/macros/controls/FilterBar.js +14 -5
  44. package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
  45. package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
  46. package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
  47. package/src/sap/fe/macros/controls/Section.js +4 -3
  48. package/src/sap/fe/macros/controls/Section.ts +3 -2
  49. package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
  50. package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
  51. package/src/sap/fe/macros/field/Field.js +2 -2
  52. package/src/sap/fe/macros/field/Field.tsx +1 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
  55. package/src/sap/fe/macros/field/FieldHelper.js +2 -2
  56. package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
  57. package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
  58. package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
  59. package/src/sap/fe/macros/filter/FilterUtils.js +232 -2
  60. package/src/sap/fe/macros/filter/FilterUtils.ts +290 -4
  61. package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
  62. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
  63. package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
  64. package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
  65. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
  66. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
  67. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
  68. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  69. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
  70. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
  71. package/src/sap/fe/macros/form/Form.block.js +7 -8
  72. package/src/sap/fe/macros/form/Form.block.ts +4 -6
  73. package/src/sap/fe/macros/form/FormContainer.block.js +555 -4
  74. package/src/sap/fe/macros/form/FormContainer.block.ts +665 -6
  75. package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
  76. package/src/sap/fe/macros/form/FormDelegate.js +6 -9
  77. package/src/sap/fe/macros/form/FormDelegate.ts +5 -8
  78. package/src/sap/fe/macros/internal/DataPoint.js +3 -2
  79. package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
  80. package/src/sap/fe/macros/internal/FilterField.block.js +16 -8
  81. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -7
  82. package/src/sap/fe/macros/internal/field/DisplayStyle.js +7 -1
  83. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +8 -0
  84. package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
  85. package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
  86. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
  87. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +4 -1
  88. package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
  89. package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
  90. package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
  91. package/src/sap/fe/macros/library.js +1 -1
  92. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
  93. package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
  94. package/src/sap/fe/macros/messagebundle.properties +20 -2
  95. package/src/sap/fe/macros/messagebundle_ar.properties +1 -1
  96. package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
  97. package/src/sap/fe/macros/messagebundle_ca.properties +1 -1
  98. package/src/sap/fe/macros/messagebundle_cnr.properties +1 -1
  99. package/src/sap/fe/macros/messagebundle_cs.properties +1 -1
  100. package/src/sap/fe/macros/messagebundle_cy.properties +1 -1
  101. package/src/sap/fe/macros/messagebundle_da.properties +1 -1
  102. package/src/sap/fe/macros/messagebundle_de.properties +4 -4
  103. package/src/sap/fe/macros/messagebundle_el.properties +1 -1
  104. package/src/sap/fe/macros/messagebundle_en.properties +1 -1
  105. package/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  106. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  107. package/src/sap/fe/macros/messagebundle_es.properties +2 -2
  108. package/src/sap/fe/macros/messagebundle_es_MX.properties +1 -1
  109. package/src/sap/fe/macros/messagebundle_et.properties +1 -1
  110. package/src/sap/fe/macros/messagebundle_fi.properties +1 -1
  111. package/src/sap/fe/macros/messagebundle_fr.properties +1 -1
  112. package/src/sap/fe/macros/messagebundle_fr_CA.properties +1 -1
  113. package/src/sap/fe/macros/messagebundle_hi.properties +1 -1
  114. package/src/sap/fe/macros/messagebundle_hr.properties +1 -1
  115. package/src/sap/fe/macros/messagebundle_hu.properties +1 -1
  116. package/src/sap/fe/macros/messagebundle_id.properties +5 -5
  117. package/src/sap/fe/macros/messagebundle_it.properties +1 -1
  118. package/src/sap/fe/macros/messagebundle_iw.properties +1 -1
  119. package/src/sap/fe/macros/messagebundle_ja.properties +5 -5
  120. package/src/sap/fe/macros/messagebundle_kk.properties +1 -1
  121. package/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  122. package/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  123. package/src/sap/fe/macros/messagebundle_lv.properties +1 -1
  124. package/src/sap/fe/macros/messagebundle_mk.properties +2 -2
  125. package/src/sap/fe/macros/messagebundle_ms.properties +1 -1
  126. package/src/sap/fe/macros/messagebundle_nl.properties +1 -1
  127. package/src/sap/fe/macros/messagebundle_no.properties +1 -1
  128. package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
  129. package/src/sap/fe/macros/messagebundle_pt.properties +1 -1
  130. package/src/sap/fe/macros/messagebundle_pt_PT.properties +1 -1
  131. package/src/sap/fe/macros/messagebundle_ro.properties +1 -1
  132. package/src/sap/fe/macros/messagebundle_ru.properties +1 -1
  133. package/src/sap/fe/macros/messagebundle_sh.properties +1 -1
  134. package/src/sap/fe/macros/messagebundle_sk.properties +1 -1
  135. package/src/sap/fe/macros/messagebundle_sl.properties +1 -1
  136. package/src/sap/fe/macros/messagebundle_sr.properties +1 -1
  137. package/src/sap/fe/macros/messagebundle_sv.properties +1 -1
  138. package/src/sap/fe/macros/messagebundle_th.properties +1 -1
  139. package/src/sap/fe/macros/messagebundle_tr.properties +1 -1
  140. package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
  141. package/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  142. package/src/sap/fe/macros/messagebundle_zh_CN.properties +1 -1
  143. package/src/sap/fe/macros/messagebundle_zh_TW.properties +1 -1
  144. package/src/sap/fe/macros/messages/MessageButton.js +1 -1
  145. package/src/sap/fe/macros/messages/MessageButton.ts +2 -2
  146. package/src/sap/fe/macros/messages/MessagePopover.js +3 -1
  147. package/src/sap/fe/macros/messages/MessagePopover.ts +2 -0
  148. package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
  149. package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
  150. package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -2
  151. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -1
  152. package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
  153. package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
  154. package/src/sap/fe/macros/table/BasicSearch.js +1 -1
  155. package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
  156. package/src/sap/fe/macros/table/Column.js +14 -2
  157. package/src/sap/fe/macros/table/Column.ts +7 -0
  158. package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
  159. package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
  160. package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
  161. package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
  162. package/src/sap/fe/macros/table/MdcTableTemplate.js +5 -5
  163. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +15 -9
  164. package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
  165. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
  166. package/src/sap/fe/macros/table/Table.block.js +188 -147
  167. package/src/sap/fe/macros/table/Table.block.tsx +41 -11
  168. package/src/sap/fe/macros/table/Table.js +16 -10
  169. package/src/sap/fe/macros/table/Table.tsx +16 -10
  170. package/src/sap/fe/macros/table/TableAPI.js +224 -184
  171. package/src/sap/fe/macros/table/TableAPI.ts +63 -19
  172. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
  173. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
  174. package/src/sap/fe/macros/table/TableHelper.js +2 -2
  175. package/src/sap/fe/macros/table/TableHelper.ts +1 -1
  176. package/src/sap/fe/macros/table/TreeTable.js +16 -10
  177. package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
  178. package/src/sap/fe/macros/table/Utils.js +3 -2
  179. package/src/sap/fe/macros/table/Utils.ts +7 -2
  180. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -33
  181. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -32
  182. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  183. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  184. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
  185. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
  186. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
  187. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
  188. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
  189. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
  190. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
  191. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
  192. package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
  193. package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
  194. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  195. package/src/sap/fe/macros/table/mixin/TableSharing.ts +4 -3
  196. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -10
  197. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +31 -13
  198. package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -3
  199. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -1
@@ -0,0 +1,230 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/UIFormatters", "sap/m/Avatar", "sap/m/Label", "sap/m/ResponsivePopover", "sap/ui/core/Element", "sap/fe/base/jsx-runtime/jsx"], function (BindingToolkit, ClassSupport, EventDelegateHook, BuildingBlock, CollaborationFormatters, ModelHelper, ResourceModelHelper, TypeGuards, UIFormatters, Avatar, Label, ResponsivePopover, UI5Element, _jsx) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;
9
+ var _exports = {};
10
+ var isProperty = TypeGuards.isProperty;
11
+ var property = ClassSupport.property;
12
+ var event = ClassSupport.event;
13
+ var defineUI5Class = ClassSupport.defineUI5Class;
14
+ var compileExpression = BindingToolkit.compileExpression;
15
+ function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
16
+ function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
17
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
18
+ function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
19
+ function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
20
+ /**
21
+ * A BuildingBlock to watch the lock status of a property and to react on changes.
22
+ * @public
23
+ * @ui5-experimental-since 1.141.0
24
+ * @since 1.141.0
25
+ */
26
+ let CollaborativeDraftHandler = (_dec = defineUI5Class("sap.fe.macros.CollaborativeDraftHandler"), _dec2 = property({
27
+ type: "string"
28
+ }), _dec3 = property({
29
+ type: "string"
30
+ }), _dec4 = event(), _dec5 = property({
31
+ type: "boolean",
32
+ defaultValue: false
33
+ }), _dec6 = property({
34
+ type: "object"
35
+ }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
36
+ function CollaborativeDraftHandler(idOrSettings, settings) {
37
+ var _this;
38
+ _this = _BuildingBlock.call(this, idOrSettings, settings) || this;
39
+ /**
40
+ * Defines the path of the context used in the current page or block.
41
+ * This setting is defined by the framework, and can be overwritten.
42
+ * @public
43
+ * @ui5-experimental-since 1.141.0
44
+ * @since 1.141.0
45
+ */
46
+ _initializerDefineProperty(_this, "contextPath", _descriptor, _this);
47
+ /**
48
+ * Defines the relative path of the property in the metamodel, based on the current contextPath.
49
+ * @public
50
+ * @ui5-experimental-since 1.141.0
51
+ * @since 1.141.0
52
+ */
53
+ _initializerDefineProperty(_this, "metaPath", _descriptor2, _this);
54
+ /**
55
+ * Event fired when the lock status changes.
56
+ *
57
+ * Parameters:<BR>
58
+ * - isLocked : true if the property is locked, false otherwise<BR>
59
+ * - lockingUserID: the ID of the user locking the property (undefined if not locked)<BR>
60
+ * - lockingUserName: the name of the user locking the property (undefined if not locked)<BR>
61
+ * - lockingUserInitials: the initials of the user locking the property (undefined if not locked)<BR>
62
+ * - lockingUserColor: the color associated to the user locking the property (undefined if not locked)<BR>
63
+ * @public
64
+ * @ui5-experimental-since 1.141.0
65
+ * @since 1.141.0
66
+ */
67
+ _initializerDefineProperty(_this, "lockChange", _descriptor3, _this);
68
+ /**
69
+ * If set to true, the standard Avatar control is displayed to indicate the lock status.
70
+ * If set to false, nothing is displayed.
71
+ * @public
72
+ * @ui5-experimental-since 1.141.0
73
+ * @since 1.141.0
74
+ */
75
+ _initializerDefineProperty(_this, "showAvatar", _descriptor4, _this);
76
+ /**
77
+ * Internal property to receive the lock data
78
+ */
79
+ _initializerDefineProperty(_this, "lockInfo", _descriptor5, _this);
80
+ return _this;
81
+ }
82
+ _exports = CollaborativeDraftHandler;
83
+ _inheritsLoose(CollaborativeDraftHandler, _BuildingBlock);
84
+ var _proto = CollaborativeDraftHandler.prototype;
85
+ _proto.getFullMetaPath = function getFullMetaPath() {
86
+ if (this.metaPath.startsWith("/")) {
87
+ return this.metaPath;
88
+ } else if (this.contextPath.endsWith("/")) {
89
+ return `${this.contextPath}${this.metaPath}`;
90
+ } else {
91
+ return `${this.contextPath}/${this.metaPath}`;
92
+ }
93
+ };
94
+ _proto.onMetadataAvailable = function onMetadataAvailable() {
95
+ const owner = this._getOwner();
96
+ if (!owner) {
97
+ return;
98
+ }
99
+ if (!ModelHelper.isCollaborationDraftSupported(owner.getAppComponent().getModel().getMetaModel())) {
100
+ return;
101
+ }
102
+ this.contextPath ??= this.getOwnerContextPath();
103
+ const fullMetaPath = this.getFullMetaPath();
104
+ const objectPath = this.getDataModelObjectPath(fullMetaPath);
105
+ if (!objectPath || !isProperty(objectPath.targetObject)) {
106
+ throw new Error(`CollaborativeDraftHandler: the provided metaPath '${fullMetaPath}' does not point to a valid property`);
107
+ }
108
+
109
+ // Bind the lockInfo property to the corresponding lockInfo in the internal model
110
+ const keysBindingParts = objectPath.targetEntityType.keys.map(key => {
111
+ return {
112
+ path: key.name,
113
+ targetType: "any"
114
+ };
115
+ });
116
+ const bindingInfo = {
117
+ parts: [{
118
+ path: `internal>/collaboration/activities${fullMetaPath}`,
119
+ targetType: "any"
120
+ }, ...keysBindingParts],
121
+ formatter: CollaborationFormatters.getCollaborationInfo
122
+ };
123
+ this.bindProperty("lockInfo", bindingInfo);
124
+ if (!this.content && this.showAvatar) {
125
+ this.content = this.createCollaborationAvatar(objectPath);
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Update the lockInfo property and fire the lockChange event if there is a change.
131
+ * @param lockInfo
132
+ */;
133
+ _proto.setLockInfo = function setLockInfo(lockInfo) {
134
+ if (this.lockInfo !== lockInfo) {
135
+ this.lockInfo = lockInfo;
136
+ this.fireEvent("lockChange", {
137
+ isLocked: this.lockInfo !== undefined,
138
+ lockingUserID: this.lockInfo?.id,
139
+ lockingUserName: this.lockInfo?.name,
140
+ lockingUserInitials: this.lockInfo?.initials,
141
+ lockingUserColor: this.lockInfo?.color
142
+ });
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Creates the content of the block (Avatar).
148
+ * @param objectPath
149
+ * @returns The Avatar control
150
+ */;
151
+ _proto.createCollaborationAvatar = function createCollaborationAvatar(objectPath) {
152
+ const collaborationExpression = UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.hasCollaborationActivity);
153
+ const collaborationHasActivityExpression = compileExpression(collaborationExpression);
154
+ const collaborationInitialsExpression = compileExpression(UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityInitials));
155
+ const collaborationColorExpression = compileExpression(UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityColor));
156
+ return _jsx(Avatar, {
157
+ visible: collaborationHasActivityExpression,
158
+ initials: collaborationInitialsExpression,
159
+ displaySize: "Custom",
160
+ customDisplaySize: "1.5rem",
161
+ customFontSize: "0.8rem",
162
+ backgroundColor: collaborationColorExpression,
163
+ press: evt => {
164
+ this.onAvatarPress(evt);
165
+ },
166
+ children: {
167
+ dependents: _jsx(EventDelegateHook, {
168
+ stopTapPropagation: true
169
+ })
170
+ }
171
+ });
172
+ }
173
+
174
+ /**
175
+ * Event handler for the press event of the Avatar.
176
+ * @param evt
177
+ */;
178
+ _proto.onAvatarPress = function onAvatarPress(evt) {
179
+ const avatar = evt.getSource();
180
+ const block = avatar.getParent();
181
+ const view = this.getPageController().getView();
182
+ const resourceModel = ResourceModelHelper.getResourceModel(view);
183
+ let popover = UI5Element.getElementById(`manageCollaborationDraft--editUser`);
184
+ if (!popover) {
185
+ popover = new ResponsivePopover("manageCollaborationDraft--editUser", {
186
+ showHeader: false,
187
+ placement: "Bottom"
188
+ });
189
+ popover.addStyleClass("sapUiContentPadding");
190
+ view.addDependent(popover);
191
+ }
192
+ popover.destroyContent();
193
+ popover.addContent(new Label({
194
+ text: resourceModel.getText("C_COLLABORATIONAVATAR_USER_EDIT_FIELD", [`${block.lockInfo?.name}`])
195
+ }));
196
+ popover.openBy(avatar);
197
+ };
198
+ return CollaborativeDraftHandler;
199
+ }(BuildingBlock), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "contextPath", [_dec2], {
200
+ configurable: true,
201
+ enumerable: true,
202
+ writable: true,
203
+ initializer: null
204
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "metaPath", [_dec3], {
205
+ configurable: true,
206
+ enumerable: true,
207
+ writable: true,
208
+ initializer: null
209
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "lockChange", [_dec4], {
210
+ configurable: true,
211
+ enumerable: true,
212
+ writable: true,
213
+ initializer: null
214
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "showAvatar", [_dec5], {
215
+ configurable: true,
216
+ enumerable: true,
217
+ writable: true,
218
+ initializer: function () {
219
+ return false;
220
+ }
221
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "lockInfo", [_dec6], {
222
+ configurable: true,
223
+ enumerable: true,
224
+ writable: true,
225
+ initializer: null
226
+ }), _class2)) || _class);
227
+ _exports = CollaborativeDraftHandler;
228
+ return _exports;
229
+ }, false);
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiZXZlbnQiLCJfZGVjNSIsImRlZmF1bHRWYWx1ZSIsIl9kZWM2IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwiaWRPclNldHRpbmdzIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEZ1bGxNZXRhUGF0aCIsIm1ldGFQYXRoIiwic3RhcnRzV2l0aCIsImNvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwib3duZXIiLCJfZ2V0T3duZXIiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiZnVsbE1ldGFQYXRoIiwib2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwiRXJyb3IiLCJrZXlzQmluZGluZ1BhcnRzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXMiLCJtYXAiLCJrZXkiLCJwYXRoIiwibmFtZSIsInRhcmdldFR5cGUiLCJiaW5kaW5nSW5mbyIsInBhcnRzIiwiZm9ybWF0dGVyIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMiLCJnZXRDb2xsYWJvcmF0aW9uSW5mbyIsImJpbmRQcm9wZXJ0eSIsImNvbnRlbnQiLCJzaG93QXZhdGFyIiwiY3JlYXRlQ29sbGFib3JhdGlvbkF2YXRhciIsInNldExvY2tJbmZvIiwibG9ja0luZm8iLCJmaXJlRXZlbnQiLCJpc0xvY2tlZCIsInVuZGVmaW5lZCIsImxvY2tpbmdVc2VySUQiLCJpZCIsImxvY2tpbmdVc2VyTmFtZSIsImxvY2tpbmdVc2VySW5pdGlhbHMiLCJpbml0aWFscyIsImxvY2tpbmdVc2VyQ29sb3IiLCJjb2xvciIsImNvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiVUlGb3JtYXR0ZXJzIiwiZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24iLCJoYXNDb2xsYWJvcmF0aW9uQWN0aXZpdHkiLCJjb2xsYWJvcmF0aW9uSGFzQWN0aXZpdHlFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMiLCJjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IiLCJfanN4IiwiQXZhdGFyIiwidmlzaWJsZSIsImRpc3BsYXlTaXplIiwiY3VzdG9tRGlzcGxheVNpemUiLCJjdXN0b21Gb250U2l6ZSIsImJhY2tncm91bmRDb2xvciIsInByZXNzIiwiZXZ0Iiwib25BdmF0YXJQcmVzcyIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwic3RvcFRhcFByb3BhZ2F0aW9uIiwiYXZhdGFyIiwiZ2V0U291cmNlIiwiYmxvY2siLCJnZXRQYXJlbnQiLCJ2aWV3IiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRWaWV3IiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwicG9wb3ZlciIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlJlc3BvbnNpdmVQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZFN0eWxlQ2xhc3MiLCJhZGREZXBlbmRlbnQiLCJkZXN0cm95Q29udGVudCIsImFkZENvbnRlbnQiLCJMYWJlbCIsInRleHQiLCJnZXRUZXh0Iiwib3BlbkJ5IiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEV2ZW50RGVsZWdhdGVIb29rIGZyb20gXCJzYXAvZmUvYmFzZS9FdmVudERlbGVnYXRlSG9va1wiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IHR5cGUgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEF2YXRhciwgeyB0eXBlIEF2YXRhciRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbi8qKlxuICogQSBCdWlsZGluZ0Jsb2NrIHRvIHdhdGNoIHRoZSBsb2NrIHN0YXR1cyBvZiBhIHByb3BlcnR5IGFuZCB0byByZWFjdCBvbiBjaGFuZ2VzLlxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuICogQHNpbmNlIDEuMTQxLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5Db2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxBdmF0YXI+IHtcblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLCBhbmQgY2FuIGJlIG92ZXJ3cml0dGVuLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIGxvY2sgc3RhdHVzIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFBhcmFtZXRlcnM6PEJSPlxuXHQgKiAtIGlzTG9ja2VkIDogdHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgbG9ja2VkLCBmYWxzZSBvdGhlcndpc2U8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJJRDogdGhlIElEIG9mIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5ICh1bmRlZmluZWQgaWYgbm90IGxvY2tlZCk8QlI+XG5cdCAqIC0gbG9ja2luZ1VzZXJOYW1lOiB0aGUgbmFtZSBvZiB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VySW5pdGlhbHM6IHRoZSBpbml0aWFscyBvZiB0aGUgdXNlciBsb2NraW5nIHRoZSBwcm9wZXJ0eSAodW5kZWZpbmVkIGlmIG5vdCBsb2NrZWQpPEJSPlxuXHQgKiAtIGxvY2tpbmdVc2VyQ29sb3I6IHRoZSBjb2xvciBhc3NvY2lhdGVkIHRvIHRoZSB1c2VyIGxvY2tpbmcgdGhlIHByb3BlcnR5ICh1bmRlZmluZWQgaWYgbm90IGxvY2tlZCk8QlI+XG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QGV2ZW50KClcblx0bG9ja0NoYW5nZT86IEV2ZW50SGFuZGxlcjxcblx0XHRVSTVFdmVudDxcblx0XHRcdHtcblx0XHRcdFx0aXNMb2NrZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGxvY2tpbmdVc2VySUQ/OiBzdHJpbmc7XG5cdFx0XHRcdGxvY2tpbmdVc2VyTmFtZT86IHN0cmluZztcblx0XHRcdFx0bG9ja2luZ1VzZXJJbml0aWFscz86IHN0cmluZztcblx0XHRcdFx0bG9ja2luZ1VzZXJDb2xvcj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyXG5cdFx0PlxuXHQ+O1xuXG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHN0YW5kYXJkIEF2YXRhciBjb250cm9sIGlzIGRpc3BsYXllZCB0byBpbmRpY2F0ZSB0aGUgbG9jayBzdGF0dXMuXG5cdCAqIElmIHNldCB0byBmYWxzZSwgbm90aGluZyBpcyBkaXNwbGF5ZWQuXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2hvd0F2YXRhciA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBwcm9wZXJ0eSB0byByZWNlaXZlIHRoZSBsb2NrIGRhdGFcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwib2JqZWN0XCIgfSlcblx0bG9ja0luZm8/OiBVc2VyQWN0aXZpdHk7XG5cblx0Y29uc3RydWN0b3IoaWRPclNldHRpbmdzOiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8Q29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlcj4sIHNldHRpbmdzPzogUHJvcGVydGllc09mPENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXI+KSB7XG5cdFx0c3VwZXIoaWRPclNldHRpbmdzLCBzZXR0aW5ncyk7XG5cdH1cblxuXHRwcml2YXRlIGdldEZ1bGxNZXRhUGF0aCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tZXRhUGF0aDtcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRyZXR1cm4gYCR7dGhpcy5jb250ZXh0UGF0aH0ke3RoaXMubWV0YVBhdGh9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGAke3RoaXMuY29udGV4dFBhdGh9LyR7dGhpcy5tZXRhUGF0aH1gO1xuXHRcdH1cblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGlmICghb3duZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGV4dFBhdGggPz89IHRoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpIGFzIHN0cmluZztcblx0XHRjb25zdCBmdWxsTWV0YVBhdGggPSB0aGlzLmdldEZ1bGxNZXRhUGF0aCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhdGggPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+KGZ1bGxNZXRhUGF0aCk7XG5cdFx0aWYgKCFvYmplY3RQYXRoIHx8ICFpc1Byb3BlcnR5KG9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyOiB0aGUgcHJvdmlkZWQgbWV0YVBhdGggJyR7ZnVsbE1ldGFQYXRofScgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBwcm9wZXJ0eWApO1xuXHRcdH1cblxuXHRcdC8vIEJpbmQgdGhlIGxvY2tJbmZvIHByb3BlcnR5IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxvY2tJbmZvIGluIHRoZSBpbnRlcm5hbCBtb2RlbFxuXHRcdGNvbnN0IGtleXNCaW5kaW5nUGFydHMgPSBvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUua2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgcGF0aDoga2V5Lm5hbWUsIHRhcmdldFR5cGU6IFwiYW55XCIgfTtcblx0XHR9KTtcblx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IHtcblx0XHRcdHBhcnRzOiBbeyBwYXRoOiBgaW50ZXJuYWw+L2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7ZnVsbE1ldGFQYXRofWAsIHRhcmdldFR5cGU6IFwiYW55XCIgfSwgLi4ua2V5c0JpbmRpbmdQYXJ0c10sXG5cdFx0XHRmb3JtYXR0ZXI6IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25JbmZvXG5cdFx0fTtcblxuXHRcdHRoaXMuYmluZFByb3BlcnR5KFwibG9ja0luZm9cIiwgYmluZGluZ0luZm8pO1xuXG5cdFx0aWYgKCF0aGlzLmNvbnRlbnQgJiYgdGhpcy5zaG93QXZhdGFyKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbGxhYm9yYXRpb25BdmF0YXIob2JqZWN0UGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZSB0aGUgbG9ja0luZm8gcHJvcGVydHkgYW5kIGZpcmUgdGhlIGxvY2tDaGFuZ2UgZXZlbnQgaWYgdGhlcmUgaXMgYSBjaGFuZ2UuXG5cdCAqIEBwYXJhbSBsb2NrSW5mb1xuXHQgKi9cblx0c2V0TG9ja0luZm8obG9ja0luZm86IG9iamVjdCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2tJbmZvICE9PSBsb2NrSW5mbykge1xuXHRcdFx0dGhpcy5sb2NrSW5mbyA9IGxvY2tJbmZvIGFzIFVzZXJBY3Rpdml0eSB8IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibG9ja0NoYW5nZVwiLCB7XG5cdFx0XHRcdGlzTG9ja2VkOiB0aGlzLmxvY2tJbmZvICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdGxvY2tpbmdVc2VySUQ6IHRoaXMubG9ja0luZm8/LmlkLFxuXHRcdFx0XHRsb2NraW5nVXNlck5hbWU6IHRoaXMubG9ja0luZm8/Lm5hbWUsXG5cdFx0XHRcdGxvY2tpbmdVc2VySW5pdGlhbHM6IHRoaXMubG9ja0luZm8/LmluaXRpYWxzLFxuXHRcdFx0XHRsb2NraW5nVXNlckNvbG9yOiB0aGlzLmxvY2tJbmZvPy5jb2xvclxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrIChBdmF0YXIpLlxuXHQgKiBAcGFyYW0gb2JqZWN0UGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgQXZhdGFyIGNvbnRyb2xcblx0ICovXG5cdGNyZWF0ZUNvbGxhYm9yYXRpb25BdmF0YXIob2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pOiBBdmF0YXIge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25FeHByZXNzaW9uID0gVUlGb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKFxuXHRcdFx0b2JqZWN0UGF0aCxcblx0XHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmhhc0NvbGxhYm9yYXRpb25BY3Rpdml0eVxuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbGxhYm9yYXRpb25FeHByZXNzaW9uKTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24ob2JqZWN0UGF0aCwgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMpXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24ob2JqZWN0UGF0aCwgQ29sbGFib3JhdGlvbkZvcm1hdHRlcnMuZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IpXG5cdFx0KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QXZhdGFyXG5cdFx0XHRcdHZpc2libGU9e2NvbGxhYm9yYXRpb25IYXNBY3Rpdml0eUV4cHJlc3Npb259XG5cdFx0XHRcdGluaXRpYWxzPXtjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5U2l6ZT1cIkN1c3RvbVwiXG5cdFx0XHRcdGN1c3RvbURpc3BsYXlTaXplPVwiMS41cmVtXCJcblx0XHRcdFx0Y3VzdG9tRm9udFNpemU9XCIwLjhyZW1cIlxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I9e2NvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHByZXNzPXsoZXZ0OiBBdmF0YXIkUHJlc3NFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25BdmF0YXJQcmVzcyhldnQpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IDxFdmVudERlbGVnYXRlSG9vayBzdG9wVGFwUHJvcGFnYXRpb249e3RydWV9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0F2YXRhcj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBwcmVzcyBldmVudCBvZiB0aGUgQXZhdGFyLlxuXHQgKiBAcGFyYW0gZXZ0XG5cdCAqL1xuXHRvbkF2YXRhclByZXNzKGV2dDogQXZhdGFyJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBhdmF0YXIgPSBldnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmxvY2sgPSBhdmF0YXIuZ2V0UGFyZW50KCkgYXMgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlcjtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmdldFZpZXcoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHZpZXcpO1xuXHRcdGxldCBwb3BvdmVyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChgbWFuYWdlQ29sbGFib3JhdGlvbkRyYWZ0LS1lZGl0VXNlcmApIGFzIFJlc3BvbnNpdmVQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFwb3BvdmVyKSB7XG5cdFx0XHRwb3BvdmVyID0gbmV3IFJlc3BvbnNpdmVQb3BvdmVyKFwibWFuYWdlQ29sbGFib3JhdGlvbkRyYWZ0LS1lZGl0VXNlclwiLCB7XG5cdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiQm90dG9tXCJcblx0XHRcdH0pO1xuXHRcdFx0cG9wb3Zlci5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRcdHZpZXcuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdH1cblxuXHRcdHBvcG92ZXIuZGVzdHJveUNvbnRlbnQoKTtcblx0XHRwb3BvdmVyLmFkZENvbnRlbnQoXG5cdFx0XHRuZXcgTGFiZWwoe1xuXHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05BVkFUQVJfVVNFUl9FRElUX0ZJRUxEXCIsIFtgJHtibG9jay5sb2NrSW5mbz8ubmFtZX1gXSlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRwb3BvdmVyLm9wZW5CeShhdmF0YXIpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEEsSUFPcUJBLHlCQUF5QixJQUFBQyxJQUFBLEdBRDdDQyxjQUFjLENBQUMseUNBQXlDLENBQUMsRUFBQUMsS0FBQSxHQVN4REMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUzVCRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FnQjVCQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBcUJQTCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUssWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FNbERQLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUosSUFBQSxDQUFBVyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFHN0IsU0FBQWQsMEJBQVllLFlBQThELEVBQUVDLFFBQWtELEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9IQSxLQUFBLEdBQUFILGNBQUEsQ0FBQUksSUFBQSxPQUFNSCxZQUFZLEVBQUVDLFFBQVEsQ0FBQztNQS9EOUI7QUFDRDtBQUNBO0FBQ0E7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QWlCLENBQUMsb0NBQW9DLEVBQUU7VUFDckVDLFVBQVUsRUFBRSxLQUFLO1VBQ2pCQyxTQUFTLEVBQUU7UUFDWixDQUFDLENBQUM7UUFDRkwsT0FBTyxDQUFDTSxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDNUNaLElBQUksQ0FBQ2EsWUFBWSxDQUFDUCxPQUFPLENBQUM7TUFDM0I7TUFFQUEsT0FBTyxDQUFDUSxjQUFjLENBQUMsQ0FBQztNQUN4QlIsT0FBTyxDQUFDUyxVQUFVLENBQ2pCLElBQUlDLEtBQUssQ0FBQztRQUNUQyxJQUFJLEVBQUVkLGFBQWEsQ0FBQ2UsT0FBTyxDQUFDLHVDQUF1QyxFQUFFLENBQUMsR0FBR3BCLEtBQUssQ0FBQ3JDLFFBQVEsRUFBRVosSUFBSSxFQUFFLENBQUM7TUFDakcsQ0FBQyxDQUNGLENBQUM7TUFDRHlELE9BQU8sQ0FBQ2EsTUFBTSxDQUFDdkIsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxPQUFBdEcseUJBQUE7RUFBQSxFQTlMcUQ4SCxhQUFhLEdBQUExRyxXQUFBLEdBQUEyRyx5QkFBQSxDQUFBbEgsT0FBQSxDQUFBZSxTQUFBLGtCQUFBekIsS0FBQTtJQUFBNkgsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE5RyxZQUFBLEdBQUEwRyx5QkFBQSxDQUFBbEgsT0FBQSxDQUFBZSxTQUFBLGVBQUF0QixLQUFBO0lBQUEwSCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTdHLFlBQUEsR0FBQXlHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsaUJBQUFyQixLQUFBO0lBQUF5SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTVHLFlBQUEsR0FBQXdHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsaUJBQUFuQixLQUFBO0lBQUF1SCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQXVEdEQsS0FBSztJQUFBO0VBQUEsSUFBQTNHLFlBQUEsR0FBQXVHLHlCQUFBLENBQUFsSCxPQUFBLENBQUFlLFNBQUEsZUFBQWpCLEtBQUE7SUFBQXFILFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdEgsT0FBQSxNQUFBRCxNQUFBO0VBQUFhLFFBQUEsR0FBQXpCLHlCQUFBO0VBQUEsT0FBQXlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,218 @@
1
+ import { type Property } from "@sap-ux/vocabularies-types";
2
+ import { compileExpression } from "sap/fe/base/BindingToolkit";
3
+ import { defineUI5Class, event, property, type PropertiesOf } from "sap/fe/base/ClassSupport";
4
+ import EventDelegateHook from "sap/fe/base/EventDelegateHook";
5
+ import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
6
+ import { type UserActivity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
7
+ import * as CollaborationFormatters from "sap/fe/core/formatters/CollaborationFormatter";
8
+ import ModelHelper from "sap/fe/core/helpers/ModelHelper";
9
+ import ResourceModelHelper from "sap/fe/core/helpers/ResourceModelHelper";
10
+ import { isProperty } from "sap/fe/core/helpers/TypeGuards";
11
+ import { type DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
12
+ import * as UIFormatters from "sap/fe/core/templating/UIFormatters";
13
+ import Avatar, { type Avatar$PressEvent } from "sap/m/Avatar";
14
+ import Label from "sap/m/Label";
15
+ import ResponsivePopover from "sap/m/ResponsivePopover";
16
+ import type UI5Event from "sap/ui/base/Event";
17
+ import UI5Element from "sap/ui/core/Element";
18
+ import type { EventHandler } from "types/extension_types";
19
+
20
+ /**
21
+ * A BuildingBlock to watch the lock status of a property and to react on changes.
22
+ * @public
23
+ * @ui5-experimental-since 1.141.0
24
+ * @since 1.141.0
25
+ */
26
+ @defineUI5Class("sap.fe.macros.CollaborativeDraftHandler")
27
+ export default class CollaborativeDraftHandler extends BuildingBlock<Avatar> {
28
+ /**
29
+ * Defines the path of the context used in the current page or block.
30
+ * This setting is defined by the framework, and can be overwritten.
31
+ * @public
32
+ * @ui5-experimental-since 1.141.0
33
+ * @since 1.141.0
34
+ */
35
+ @property({ type: "string" })
36
+ contextPath!: string;
37
+
38
+ /**
39
+ * Defines the relative path of the property in the metamodel, based on the current contextPath.
40
+ * @public
41
+ * @ui5-experimental-since 1.141.0
42
+ * @since 1.141.0
43
+ */
44
+ @property({ type: "string" })
45
+ metaPath!: string;
46
+
47
+ /**
48
+ * Event fired when the lock status changes.
49
+ *
50
+ * Parameters:<BR>
51
+ * - isLocked : true if the property is locked, false otherwise<BR>
52
+ * - lockingUserID: the ID of the user locking the property (undefined if not locked)<BR>
53
+ * - lockingUserName: the name of the user locking the property (undefined if not locked)<BR>
54
+ * - lockingUserInitials: the initials of the user locking the property (undefined if not locked)<BR>
55
+ * - lockingUserColor: the color associated to the user locking the property (undefined if not locked)<BR>
56
+ * @public
57
+ * @ui5-experimental-since 1.141.0
58
+ * @since 1.141.0
59
+ */
60
+ @event()
61
+ lockChange?: EventHandler<
62
+ UI5Event<
63
+ {
64
+ isLocked: boolean;
65
+ lockingUserID?: string;
66
+ lockingUserName?: string;
67
+ lockingUserInitials?: string;
68
+ lockingUserColor?: string;
69
+ },
70
+ CollaborativeDraftHandler
71
+ >
72
+ >;
73
+
74
+ /**
75
+ * If set to true, the standard Avatar control is displayed to indicate the lock status.
76
+ * If set to false, nothing is displayed.
77
+ * @public
78
+ * @ui5-experimental-since 1.141.0
79
+ * @since 1.141.0
80
+ */
81
+ @property({ type: "boolean", defaultValue: false })
82
+ showAvatar = false;
83
+
84
+ /**
85
+ * Internal property to receive the lock data
86
+ */
87
+ @property({ type: "object" })
88
+ lockInfo?: UserActivity;
89
+
90
+ constructor(idOrSettings: string | PropertiesOf<CollaborativeDraftHandler>, settings?: PropertiesOf<CollaborativeDraftHandler>) {
91
+ super(idOrSettings, settings);
92
+ }
93
+
94
+ private getFullMetaPath(): string {
95
+ if (this.metaPath.startsWith("/")) {
96
+ return this.metaPath;
97
+ } else if (this.contextPath.endsWith("/")) {
98
+ return `${this.contextPath}${this.metaPath}`;
99
+ } else {
100
+ return `${this.contextPath}/${this.metaPath}`;
101
+ }
102
+ }
103
+
104
+ onMetadataAvailable(): void {
105
+ const owner = this._getOwner();
106
+ if (!owner) {
107
+ return;
108
+ }
109
+ if (!ModelHelper.isCollaborationDraftSupported(owner.getAppComponent().getModel().getMetaModel())) {
110
+ return;
111
+ }
112
+
113
+ this.contextPath ??= this.getOwnerContextPath() as string;
114
+ const fullMetaPath = this.getFullMetaPath();
115
+ const objectPath = this.getDataModelObjectPath<Property>(fullMetaPath);
116
+ if (!objectPath || !isProperty(objectPath.targetObject)) {
117
+ throw new Error(`CollaborativeDraftHandler: the provided metaPath '${fullMetaPath}' does not point to a valid property`);
118
+ }
119
+
120
+ // Bind the lockInfo property to the corresponding lockInfo in the internal model
121
+ const keysBindingParts = objectPath.targetEntityType.keys.map((key) => {
122
+ return { path: key.name, targetType: "any" };
123
+ });
124
+ const bindingInfo = {
125
+ parts: [{ path: `internal>/collaboration/activities${fullMetaPath}`, targetType: "any" }, ...keysBindingParts],
126
+ formatter: CollaborationFormatters.getCollaborationInfo
127
+ };
128
+
129
+ this.bindProperty("lockInfo", bindingInfo);
130
+
131
+ if (!this.content && this.showAvatar) {
132
+ this.content = this.createCollaborationAvatar(objectPath);
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Update the lockInfo property and fire the lockChange event if there is a change.
138
+ * @param lockInfo
139
+ */
140
+ setLockInfo(lockInfo: object | undefined): void {
141
+ if (this.lockInfo !== lockInfo) {
142
+ this.lockInfo = lockInfo as UserActivity | undefined;
143
+ this.fireEvent("lockChange", {
144
+ isLocked: this.lockInfo !== undefined,
145
+ lockingUserID: this.lockInfo?.id,
146
+ lockingUserName: this.lockInfo?.name,
147
+ lockingUserInitials: this.lockInfo?.initials,
148
+ lockingUserColor: this.lockInfo?.color
149
+ });
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Creates the content of the block (Avatar).
155
+ * @param objectPath
156
+ * @returns The Avatar control
157
+ */
158
+ createCollaborationAvatar(objectPath: DataModelObjectPath<Property>): Avatar {
159
+ const collaborationExpression = UIFormatters.getCollaborationExpression(
160
+ objectPath,
161
+ CollaborationFormatters.hasCollaborationActivity
162
+ );
163
+ const collaborationHasActivityExpression = compileExpression(collaborationExpression);
164
+ const collaborationInitialsExpression = compileExpression(
165
+ UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityInitials)
166
+ );
167
+ const collaborationColorExpression = compileExpression(
168
+ UIFormatters.getCollaborationExpression(objectPath, CollaborationFormatters.getCollaborationActivityColor)
169
+ );
170
+
171
+ return (
172
+ <Avatar
173
+ visible={collaborationHasActivityExpression}
174
+ initials={collaborationInitialsExpression}
175
+ displaySize="Custom"
176
+ customDisplaySize="1.5rem"
177
+ customFontSize="0.8rem"
178
+ backgroundColor={collaborationColorExpression}
179
+ press={(evt: Avatar$PressEvent): void => {
180
+ this.onAvatarPress(evt);
181
+ }}
182
+ >
183
+ {{
184
+ dependents: <EventDelegateHook stopTapPropagation={true} />
185
+ }}
186
+ </Avatar>
187
+ );
188
+ }
189
+
190
+ /**
191
+ * Event handler for the press event of the Avatar.
192
+ * @param evt
193
+ */
194
+ onAvatarPress(evt: Avatar$PressEvent): void {
195
+ const avatar = evt.getSource();
196
+ const block = avatar.getParent() as CollaborativeDraftHandler;
197
+ const view = this.getPageController().getView();
198
+ const resourceModel = ResourceModelHelper.getResourceModel(view);
199
+ let popover = UI5Element.getElementById(`manageCollaborationDraft--editUser`) as ResponsivePopover | undefined;
200
+
201
+ if (!popover) {
202
+ popover = new ResponsivePopover("manageCollaborationDraft--editUser", {
203
+ showHeader: false,
204
+ placement: "Bottom"
205
+ });
206
+ popover.addStyleClass("sapUiContentPadding");
207
+ view.addDependent(popover);
208
+ }
209
+
210
+ popover.destroyContent();
211
+ popover.addContent(
212
+ new Label({
213
+ text: resourceModel.getText("C_COLLABORATIONAVATAR_USER_EDIT_FIELD", [`${block.lockInfo?.name}`])
214
+ })
215
+ );
216
+ popover.openBy(avatar);
217
+ }
218
+ }