@sapui5/sap.fe.templates 1.109.0 → 1.110.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.
- package/README.md +5 -1
- package/package.json +11 -8
- package/src/sap/fe/templates/.library +26 -27
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -7
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -4
- package/src/sap/fe/templates/ListComponent.js +45 -62
- package/src/sap/fe/templates/ListComponent.ts +43 -43
- package/src/sap/fe/templates/ListReport/Component.js +11 -19
- package/src/sap/fe/templates/ListReport/Component.ts +6 -0
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +11 -37
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +196 -0
- package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +216 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +31 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +140 -247
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +49 -14
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +2 -7
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +21 -108
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +9 -17
- package/src/sap/fe/templates/ListReport/overrides/Share.js +9 -25
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +51 -122
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -23
- package/src/sap/fe/templates/ObjectPage/Component.js +19 -40
- package/src/sap/fe/templates/ObjectPage/Component.ts +9 -2
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.js +64 -0
- package/src/sap/fe/templates/ObjectPage/ExtendPageDefinition.ts +80 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +21 -58
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +2 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +173 -459
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +13 -18
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +129 -208
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +62 -14
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -32
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -37
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -7
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -31
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +2 -4
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +4 -5
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +4 -4
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +4 -4
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +16 -21
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +19 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +21 -0
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +4 -5
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +19 -69
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +5 -20
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +6 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +4 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +3 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/FormActions.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +4 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +7 -5
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingAvatar.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +3 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +2 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SideContentCustomContainer.fragment.xml +7 -7
- package/src/sap/fe/templates/TableScroller.js +1 -6
- package/src/sap/fe/templates/library.js +4 -7
- package/src/sap/fe/templates/library.ts +1 -2
- package/src/sap/fe/templates/messagebundle.properties +30 -29
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +3 -3
- package/src/sap/fe/templates/messagebundle_sl.properties +7 -7
- package/ui5.yaml +0 -1
- package/src/sap/fe/templates/Feedback.js +0 -80
- package/src/sap/fe/templates/Feedback.ts +0 -64
- package/src/sap/fe/templates/ObjectPage/view/fragments/FormActionButtons.fragment.xml +0 -82
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +0 -20
- 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"
|