@sapui5/sap.fe.templates 1.109.0 → 1.110.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 (83) hide show
  1. package/README.md +5 -1
  2. package/package.json +11 -8
  3. package/src/sap/fe/templates/.library +26 -27
  4. package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -7
  5. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -4
  6. package/src/sap/fe/templates/ListComponent.js +45 -62
  7. package/src/sap/fe/templates/ListComponent.ts +43 -43
  8. package/src/sap/fe/templates/ListReport/Component.js +11 -19
  9. package/src/sap/fe/templates/ListReport/Component.ts +6 -0
  10. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +11 -37
  11. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
  12. package/src/sap/fe/templates/ListReport/LRMessageStrip.js +196 -0
  13. package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +216 -0
  14. package/src/sap/fe/templates/ListReport/ListReport.view.xml +31 -0
  15. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +140 -247
  16. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +49 -14
  17. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +2 -7
  18. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +21 -108
  19. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +9 -17
  20. package/src/sap/fe/templates/ListReport/overrides/Share.js +9 -25
  21. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +51 -122
  22. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -23
  23. package/src/sap/fe/templates/ObjectPage/Component.js +19 -40
  24. package/src/sap/fe/templates/ObjectPage/Component.ts +9 -2
  25. package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js +64 -0
  26. package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.ts +80 -0
  27. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +21 -58
  28. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +4 -4
  29. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +2 -1
  30. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +173 -459
  31. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +13 -18
  32. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +129 -208
  33. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +62 -14
  34. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -32
  35. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -37
  36. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -7
  37. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -31
  38. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  39. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +2 -4
  40. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
  41. package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +4 -5
  42. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +4 -4
  43. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +3 -3
  44. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +4 -4
  45. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +3 -3
  46. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +16 -21
  47. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
  48. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +19 -1
  49. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +21 -0
  50. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
  51. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +4 -5
  52. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +19 -69
  53. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
  54. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +5 -20
  55. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +6 -6
  56. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +4 -3
  57. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +3 -3
  58. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +1 -1
  59. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +1 -1
  60. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
  61. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +4 -3
  62. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +7 -5
  63. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingAvatar.fragment.xml +1 -1
  64. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +3 -2
  65. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +2 -1
  66. package/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +7 -7
  67. package/src/sap/fe/templates/TableScroller.js +1 -6
  68. package/src/sap/fe/templates/library.js +4 -7
  69. package/src/sap/fe/templates/library.ts +1 -2
  70. package/src/sap/fe/templates/messagebundle.properties +30 -29
  71. package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
  72. package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
  73. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +1 -1
  74. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +1 -1
  75. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -1
  76. package/src/sap/fe/templates/messagebundle_no.properties +3 -3
  77. package/src/sap/fe/templates/messagebundle_sl.properties +7 -7
  78. package/ui5.yaml +0 -1
  79. package/src/sap/fe/templates/Feedback.js +0 -80
  80. package/src/sap/fe/templates/Feedback.ts +0 -64
  81. package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +0 -82
  82. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +0 -20
  83. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +0 -20
@@ -0,0 +1,216 @@
1
+ import type { InnerControlType } from "sap/fe/templates/ListReport/controls/MultipleModeControl";
2
+ import type ListReportController from "sap/fe/templates/ListReport/ListReportController.controller";
3
+ import type Event from "sap/ui/base/Event";
4
+ import Core from "sap/ui/core/Core";
5
+ import type { MessageType } from "sap/ui/core/library";
6
+ import Message from "sap/ui/core/message/Message";
7
+ import MDCTable from "sap/ui/mdc/Table";
8
+ import type ListBinding from "sap/ui/model/ListBinding";
9
+
10
+ export type LRCustomMessage = {
11
+ message: string;
12
+ type?: MessageType;
13
+ onClose?: Function;
14
+ };
15
+
16
+ export class LRMessageStrip {
17
+ customMessageInfo!: {
18
+ messageManagerDataBinding: ListBinding;
19
+ currentMessage?: Message;
20
+ multiModeControlMessagesMap: { [key: string]: LRCustomMessage | undefined };
21
+ };
22
+ constructor() {
23
+ const messageManager = Core.getMessageManager();
24
+ this.customMessageInfo = {
25
+ messageManagerDataBinding: messageManager.getMessageModel().bindList("/"),
26
+ multiModeControlMessagesMap: {}
27
+ };
28
+ }
29
+ getCustomMessageInfo() {
30
+ return this.customMessageInfo;
31
+ }
32
+ destroy() {
33
+ this.customMessageInfo.messageManagerDataBinding.detachChange(this._eventHandlerCustomMessage, this);
34
+ }
35
+ _getMessagesWithSameTargetThanCustomMessage() {
36
+ const messageManager = Core.getMessageManager();
37
+ return messageManager
38
+ .getMessageModel()
39
+ .getData()
40
+ .filter(
41
+ (msg: Message) =>
42
+ msg.getTargets()[0] === this.customMessageInfo.currentMessage?.getTargets()[0] &&
43
+ msg !== this.customMessageInfo.currentMessage
44
+ );
45
+ }
46
+
47
+ /**
48
+ * MessageManager Event Handler responsible to add or remove the current customMessage.
49
+ *
50
+ * @alias sap.fe.core.helpers.LRMessageStrip#_eventHandlerCustomMessage
51
+ * @private
52
+ */
53
+ _eventHandlerCustomMessage() {
54
+ const messageManager = Core.getMessageManager();
55
+ if (this.customMessageInfo.currentMessage) {
56
+ const aMessageWithSameTargetThanCustomMessage = this._getMessagesWithSameTargetThanCustomMessage();
57
+ const isCustomMessageInMessageManager = !!messageManager
58
+ .getMessageModel()
59
+ .getData()
60
+ .find((msg: Message) => msg === this.customMessageInfo.currentMessage);
61
+
62
+ if (aMessageWithSameTargetThanCustomMessage.length > 0 && isCustomMessageInMessageManager) {
63
+ //if there are other messages with the same message on the MessageManager and the customMessage
64
+ //then we need to remove the customeMessage from the MessageManager
65
+ messageManager.removeMessages([this.customMessageInfo?.currentMessage]);
66
+ } else if (aMessageWithSameTargetThanCustomMessage.length === 0 && !isCustomMessageInMessageManager) {
67
+ messageManager.addMessages([this.customMessageInfo.currentMessage]);
68
+ }
69
+ }
70
+ }
71
+
72
+ /**
73
+ * This function manages the lifecycle of the custom message (populates the customMessageInfo object, attaches an event to the message manager and inserts a message).
74
+ *
75
+ * @param event Event object (optional).
76
+ * @param oData Parameters
77
+ * @param oData.message The LRCustomMessage to be used to generate the message object
78
+ * @param oData.table The table targeted by the message
79
+ * @param oData.skipMessageManagerUpdate Should skip to insert the message in the MessageManager
80
+ * @alias sap.fe.core.helpers.LRMessageStrip#createCustomMessage
81
+ * @private
82
+ */
83
+ createCustomMessage(
84
+ event: Event | null,
85
+ oData: { message: LRCustomMessage | undefined; table: MDCTable; skipMessageManagerUpdate?: boolean }
86
+ ) {
87
+ const message = oData.message;
88
+ const table = oData.table;
89
+ const skipMessageManagerUpdate = oData.skipMessageManagerUpdate;
90
+ const rowBindingPath = table.getRowBinding()?.getPath();
91
+ const messageManager = Core.getMessageManager();
92
+ const customMessageMap = this.customMessageInfo.multiModeControlMessagesMap;
93
+ customMessageMap[table.getId()] = message;
94
+ if (!rowBindingPath) {
95
+ table.attachEventOnce("bindingUpdated", oData, this.createCustomMessage, this);
96
+ return;
97
+ }
98
+
99
+ if (customMessageMap[table.getId()]?.onClose) {
100
+ table.getDataStateIndicator().detachEvent("close", customMessageMap[table.getId()]?.onClose as Function, this);
101
+ }
102
+
103
+ const processor = table.getModel();
104
+ const oMessage = message
105
+ ? new Message({
106
+ message: message.message,
107
+ type: message.type,
108
+ target: [rowBindingPath],
109
+ persistent: true,
110
+ processor
111
+ })
112
+ : null;
113
+
114
+ this.customMessageInfo.messageManagerDataBinding.detachChange(this._eventHandlerCustomMessage, this);
115
+ if (!skipMessageManagerUpdate) {
116
+ if (this.customMessageInfo.currentMessage) {
117
+ messageManager.removeMessages([this.customMessageInfo.currentMessage]);
118
+ }
119
+ if (oMessage) {
120
+ this.customMessageInfo.currentMessage = oMessage;
121
+ } else {
122
+ delete this.customMessageInfo.currentMessage;
123
+ }
124
+ if (oMessage && this._getMessagesWithSameTargetThanCustomMessage().length === 0) {
125
+ messageManager.addMessages([oMessage]);
126
+ }
127
+ }
128
+ this.customMessageInfo.messageManagerDataBinding.attachChange(this._eventHandlerCustomMessage, this);
129
+
130
+ this.attachDataStateIndicatorCloseEvent(table, customMessageMap, message?.onClose);
131
+ }
132
+
133
+ /**
134
+ * This function attaches the onClose event function to the dataStateIndicator.
135
+ *
136
+ * @param table The table associated with the dataStateIndicator
137
+ * @param customMessageMap The CustomMessageMap object
138
+ * @param fnOnClose A function to be attached to the "close" event
139
+ * @alias sap.fe.core.helpers.LRMessageStrip#attachDataStateIndicatorCloseEvent
140
+ * @private
141
+ */
142
+ attachDataStateIndicatorCloseEvent(
143
+ table: MDCTable,
144
+ customMessageMap: { [key: string]: LRCustomMessage | undefined },
145
+ fnOnClose?: Function
146
+ ) {
147
+ if (fnOnClose) {
148
+ table.getDataStateIndicator().attachEventOnce("close", fnOnClose, this);
149
+ }
150
+ //When closing the the messageStrip, the associated message is removed
151
+ table.getDataStateIndicator().attachEventOnce("close", () => {
152
+ delete customMessageMap[table.getId()];
153
+ });
154
+ }
155
+
156
+ /**
157
+ * MultipleModeControl Event handler responsible for displaying the correct custom message when a specific tab is selected.
158
+ *
159
+ * @alias sap.fe.core.helpers.LRMessageStrip#onSelectMultipleModeControl
160
+ * @private
161
+ */
162
+
163
+ onSelectMultipleModeControl(event: Event, controller: ListReportController) {
164
+ const table = controller._getTable() as MDCTable;
165
+ const message = this.customMessageInfo.multiModeControlMessagesMap[table.getId()];
166
+ this.createCustomMessage(null, { message, table });
167
+ }
168
+
169
+ /**
170
+ * Provide an option for showing a custom message in the message bar above the list report table.
171
+ *
172
+ * @param {object} [message] Custom message along with the message type to be set on the table.
173
+ * @param {string} [message.message] Message string to be displayed.
174
+ * @param {sap.ui.core.MessageType} [message.type] Indicates the type of message.
175
+ * @param {ListReportController} [controller] Controller of the current view.
176
+ * @param {string[]|string} [tabKey] The entitySet identifying the table in which to display the custom message.
177
+ * @param {Function} [onClose] A function that is called when the user closes the message bar.
178
+ * @private
179
+ */
180
+ showCustomMessage(
181
+ message: LRCustomMessage | undefined,
182
+ controller: ListReportController,
183
+ tabKey?: string[] | string | null,
184
+ onClose?: Function
185
+ ) {
186
+ const _tabKey = Array.isArray(tabKey) ? tabKey : [tabKey];
187
+ const isMultiMode = controller._isMultiMode();
188
+ let table: MDCTable;
189
+ if (message) {
190
+ message.onClose = onClose;
191
+ }
192
+ if (isMultiMode) {
193
+ const multipleModeControl = controller._getMultiModeControl();
194
+ //we fisrt need to detach the select event to prevent multiple attachments.
195
+ multipleModeControl.detachEvent("select", this.onSelectMultipleModeControl, this);
196
+ multipleModeControl.attachEvent("select", controller, this.onSelectMultipleModeControl, this);
197
+
198
+ multipleModeControl.getAllInnerControls(true).forEach((innerControl: InnerControlType, index: number) => {
199
+ if (innerControl.isA("sap.fe.macros.table.TableAPI")) {
200
+ if (!tabKey || _tabKey.indexOf(index.toString()) !== -1) {
201
+ table = (innerControl as any).getContent();
202
+ this.createCustomMessage(null, {
203
+ message,
204
+ table,
205
+ skipMessageManagerUpdate: multipleModeControl.getSelectedInnerControl() !== innerControl
206
+ });
207
+ }
208
+ }
209
+ });
210
+ return;
211
+ }
212
+
213
+ table = controller._getTable() as MDCTable;
214
+ this.createCustomMessage(null, { message, table });
215
+ }
216
+ }
@@ -122,6 +122,35 @@
122
122
  </template:if>
123
123
  <macro:Share id="fe::Share" visible="{= ${fclhelper>/} ? ${fclhelper>/showShareIcon} : true }" />
124
124
  </f:actions>
125
+ <template:if test="{converterContext>useHiddenFilterBar}">
126
+ <template:then>
127
+ <f:dependents>
128
+ <template:with path="converterContext>filterBar" var="filterBarContext">
129
+ <macroInternal:FilterBar
130
+ unittest:id="listReportFilterBarTest"
131
+ id="{converterContext>filterBarId}"
132
+ _applyIdToContent="true"
133
+ metaPath="{entityType>}"
134
+ variantBackreference="{= LR.getVariantBackReference(${viewData>}, ${converterContext>} )}"
135
+ selectionFields="{filterBarContext>selectionFields}"
136
+ propertyInfo="{filterBarContext>propertyInfo}"
137
+ internalFilterChanged=".handlers.onFiltersChanged"
138
+ filterConditions="{parts:[{path:'converterContext>filterConditions'}, {path:'entitySet>'}], formatter: 'FILTER.getFilterConditions'}"
139
+ internalSearch=".handlers.onSearch"
140
+ hideBasicSearch="{filterBarContext>hideBasicSearch}"
141
+ liveMode="{viewData>/liveMode}"
142
+ showAdaptFiltersButton="true"
143
+ p13nMode="Item,Value"
144
+ useSemanticDateRange="{converterContext>useSemanticDateRange}"
145
+ suspendSelection="false"
146
+ toggleControlId="{= ${converterContext>/filterLayout} === 'compactvisual' ? ID.generate([ ${converterContext>filterBarId}, 'LayoutToggle']) : undefined }"
147
+ initialLayout="{= ${converterContext>/filterLayout} === 'compactvisual' ? ${converterContext>/filterInitialLayout} : undefined }"
148
+ stateChange=".handlers.onStateChange"
149
+ />
150
+ </template:with>
151
+ </f:dependents>
152
+ </template:then>
153
+ </template:if>
125
154
  </f:DynamicPageTitle>
126
155
  </f:title>
127
156
  <f:header>
@@ -142,6 +171,8 @@
142
171
  filterConditions="{parts:[{path:'converterContext>filterConditions'}, {path:'entitySet>'}], formatter: 'FILTER.getFilterConditions'}"
143
172
  internalSearch=".handlers.onSearch"
144
173
  hideBasicSearch="{filterBarContext>hideBasicSearch}"
174
+ showClearButton="{filterBarContext>showClearButton}"
175
+ afterClear=".onAfterClear"
145
176
  liveMode="{viewData>/liveMode}"
146
177
  showAdaptFiltersButton="true"
147
178
  p13nMode="Item,Value"