@sapui5/sap.fe.templates 1.102.2 → 1.104.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.
- package/package.json +3 -4
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +1 -1
- package/src/sap/fe/templates/Feedback.js +18 -18
- package/src/sap/fe/templates/Feedback.ts +12 -12
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +9 -12
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +9 -12
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +4 -3
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +102 -313
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +109 -297
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +367 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +259 -0
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +16 -9
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +17 -11
- package/src/sap/fe/templates/ListReport/overrides/Share.js +3 -4
- package/src/sap/fe/templates/ListReport/overrides/Share.ts +6 -7
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +22 -31
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +33 -37
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +1 -1
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +19 -3
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +75 -47
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +12 -16
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +17 -20
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +270 -244
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +175 -235
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +62 -73
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +75 -90
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +132 -0
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -3
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +6 -6
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +67 -41
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +44 -56
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +4 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +3 -10
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +15 -5
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -14
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +7 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +26 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +4 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +6 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +1 -0
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +25 -28
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +30 -33
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +3 -4
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +4 -5
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +140 -52
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +108 -54
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +3 -3
- package/src/sap/fe/templates/TableScroller.js +3 -3
- package/src/sap/fe/templates/TableScroller.ts +2 -2
- package/src/sap/fe/templates/controls/Table.fragment.xml +1 -0
- package/src/sap/fe/templates/library.js +7 -3
- package/src/sap/fe/templates/library.ts +5 -0
- package/src/sap/fe/templates/messagebundle.properties +7 -22
- package/src/sap/fe/templates/messagebundle_ar.properties +3 -12
- package/src/sap/fe/templates/messagebundle_bg.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ca.properties +2 -11
- package/src/sap/fe/templates/messagebundle_cs.properties +3 -12
- package/src/sap/fe/templates/messagebundle_cy.properties +0 -9
- package/src/sap/fe/templates/messagebundle_da.properties +3 -12
- package/src/sap/fe/templates/messagebundle_de.properties +2 -11
- package/src/sap/fe/templates/messagebundle_el.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -5
- package/src/sap/fe/templates/messagebundle_es.properties +0 -9
- package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -11
- package/src/sap/fe/templates/messagebundle_et.properties +0 -9
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_fr.properties +3 -12
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -11
- package/src/sap/fe/templates/messagebundle_id.properties +2 -11
- package/src/sap/fe/templates/messagebundle_it.properties +2 -11
- package/src/sap/fe/templates/messagebundle_iw.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ja.properties +2 -11
- package/src/sap/fe/templates/messagebundle_kk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ko.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lt.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lv.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ms.properties +2 -11
- package/src/sap/fe/templates/messagebundle_nl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_no.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pl.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pt.properties +3 -12
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ro.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ru.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sv.properties +2 -11
- package/src/sap/fe/templates/messagebundle_th.properties +1 -10
- package/src/sap/fe/templates/messagebundle_tr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_uk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_vi.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -11
- package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +0 -27
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/MessageStrip", "sap/fe/macros/DelegateUtil", "sap/m/IconTabFilter", "sap/ui/core/Control", "sap/ui/core/Core", "sap/ui/model/json/JSONModel"], function (Log, ClassSupport, MessageStrip, DelegateUtil, IconTabFilter, Control, Core, JSONModel) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;
|
|
9
|
+
|
|
10
|
+
var property = ClassSupport.property;
|
|
11
|
+
var event = ClassSupport.event;
|
|
12
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
13
|
+
var association = ClassSupport.association;
|
|
14
|
+
var aggregation = ClassSupport.aggregation;
|
|
15
|
+
|
|
16
|
+
function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
|
|
17
|
+
|
|
18
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
19
|
+
|
|
20
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
21
|
+
|
|
22
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
23
|
+
|
|
24
|
+
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
25
|
+
|
|
26
|
+
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
|
|
27
|
+
|
|
28
|
+
var BindingAction;
|
|
29
|
+
|
|
30
|
+
(function (BindingAction) {
|
|
31
|
+
BindingAction["Suspend"] = "suspendBinding";
|
|
32
|
+
BindingAction["Resume"] = "resumeBinding";
|
|
33
|
+
})(BindingAction || (BindingAction = {}));
|
|
34
|
+
|
|
35
|
+
var MultipleModeControl = (_dec = defineUI5Class("sap.fe.templates.ListReport.controls.MultipleModeControl"), _dec2 = property({
|
|
36
|
+
type: "boolean"
|
|
37
|
+
}), _dec3 = property({
|
|
38
|
+
type: "boolean",
|
|
39
|
+
defaultValue: false
|
|
40
|
+
}), _dec4 = property({
|
|
41
|
+
type: "boolean",
|
|
42
|
+
defaultValue: false
|
|
43
|
+
}), _dec5 = aggregation({
|
|
44
|
+
type: "sap.m.IconTabBar",
|
|
45
|
+
multiple: false,
|
|
46
|
+
isDefault: true
|
|
47
|
+
}), _dec6 = association({
|
|
48
|
+
type: "sap.ui.core.Control",
|
|
49
|
+
multiple: true
|
|
50
|
+
}), _dec7 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
|
|
51
|
+
_inheritsLoose(MultipleModeControl, _Control);
|
|
52
|
+
|
|
53
|
+
function MultipleModeControl() {
|
|
54
|
+
var _this;
|
|
55
|
+
|
|
56
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
57
|
+
args[_key] = arguments[_key];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
_this = _Control.call.apply(_Control, [this].concat(args)) || this;
|
|
61
|
+
|
|
62
|
+
_initializerDefineProperty(_this, "showCounts", _descriptor, _assertThisInitialized(_this));
|
|
63
|
+
|
|
64
|
+
_initializerDefineProperty(_this, "freezeContent", _descriptor2, _assertThisInitialized(_this));
|
|
65
|
+
|
|
66
|
+
_initializerDefineProperty(_this, "countsOutDated", _descriptor3, _assertThisInitialized(_this));
|
|
67
|
+
|
|
68
|
+
_initializerDefineProperty(_this, "content", _descriptor4, _assertThisInitialized(_this));
|
|
69
|
+
|
|
70
|
+
_initializerDefineProperty(_this, "innerControls", _descriptor5, _assertThisInitialized(_this));
|
|
71
|
+
|
|
72
|
+
_initializerDefineProperty(_this, "select", _descriptor6, _assertThisInitialized(_this));
|
|
73
|
+
|
|
74
|
+
return _this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var _proto = MultipleModeControl.prototype;
|
|
78
|
+
|
|
79
|
+
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
80
|
+
var _this$getAggregation,
|
|
81
|
+
_this2 = this;
|
|
82
|
+
|
|
83
|
+
this.getTabsModel(); // Generate the model which is mandatory for some bindings
|
|
84
|
+
|
|
85
|
+
(_this$getAggregation = this.getAggregation("content")) === null || _this$getAggregation === void 0 ? void 0 : _this$getAggregation.attachEvent("select", this.handleTabChange.bind(this));
|
|
86
|
+
|
|
87
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
88
|
+
var _oMacroAPI$suspendBin;
|
|
89
|
+
|
|
90
|
+
if (_this2.showCounts) {
|
|
91
|
+
oMacroAPI.attachEvent("internalDataRequested", _this2._refreshTabsCount.bind(_this2));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
(_oMacroAPI$suspendBin = oMacroAPI.suspendBinding) === null || _oMacroAPI$suspendBin === void 0 ? void 0 : _oMacroAPI$suspendBin.call(oMacroAPI);
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
_proto.onAfterRendering = function onAfterRendering() {
|
|
99
|
+
var _this$_getSelectedInn, _this$_getSelectedInn2;
|
|
100
|
+
|
|
101
|
+
(_this$_getSelectedInn = this._getSelectedInnerControl()) === null || _this$_getSelectedInn === void 0 ? void 0 : (_this$_getSelectedInn2 = _this$_getSelectedInn.resumeBinding) === null || _this$_getSelectedInn2 === void 0 ? void 0 : _this$_getSelectedInn2.call(_this$_getSelectedInn, !this.getProperty("freezeContent"));
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
MultipleModeControl.render = function render(oRm, oControl) {
|
|
105
|
+
oRm.renderControl(oControl.content);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Manages the binding of all inner controls when the selected IconTabFilter is changed.
|
|
109
|
+
*
|
|
110
|
+
* @param {sap.ui.base.Event} oEvent Event fired by the IconTabBar
|
|
111
|
+
*/
|
|
112
|
+
;
|
|
113
|
+
|
|
114
|
+
_proto.handleTabChange = function handleTabChange(oEvent) {
|
|
115
|
+
var mParameters = oEvent.getParameters();
|
|
116
|
+
|
|
117
|
+
this._setInnerBinding(true);
|
|
118
|
+
|
|
119
|
+
this.fireEvent("select", {
|
|
120
|
+
iconTabBar: this.content,
|
|
121
|
+
selectedKey: mParameters === null || mParameters === void 0 ? void 0 : mParameters.selectedKey,
|
|
122
|
+
previousKey: mParameters === null || mParameters === void 0 ? void 0 : mParameters.previousKey
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Invalidates the content of all inner controls.
|
|
127
|
+
*/
|
|
128
|
+
;
|
|
129
|
+
|
|
130
|
+
_proto.invalidateContent = function invalidateContent() {
|
|
131
|
+
this.setCountsOutDated(true);
|
|
132
|
+
|
|
133
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
134
|
+
var _oMacroAPI$invalidate;
|
|
135
|
+
|
|
136
|
+
(_oMacroAPI$invalidate = oMacroAPI.invalidateContent) === null || _oMacroAPI$invalidate === void 0 ? void 0 : _oMacroAPI$invalidate.call(oMacroAPI);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Sets the counts to out of date or up to date
|
|
141
|
+
* If the counts are set to "out of date" and the selected IconTabFilter doesn't contain an inner control all inner controls are requested to get the new counts.
|
|
142
|
+
*
|
|
143
|
+
* @param {boolean} bValue Freeze or not the control
|
|
144
|
+
*/
|
|
145
|
+
;
|
|
146
|
+
|
|
147
|
+
_proto.setCountsOutDated = function setCountsOutDated() {
|
|
148
|
+
var bValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
149
|
+
this.setProperty("countsOutDated", bValue); // if the current tab is not configured with no inner Control
|
|
150
|
+
// the tab counts must be manually refreshed since no Macro API will sent event internalDataRequested
|
|
151
|
+
|
|
152
|
+
if (bValue && !this._getSelectedInnerControl()) {
|
|
153
|
+
this._refreshTabsCount();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Freezes the content :
|
|
158
|
+
* - content is frozen: the binding of the inner controls are suspended.
|
|
159
|
+
* - content is unfrozen: the binding of inner control related to the selected IconTabFilter is resumed.
|
|
160
|
+
*
|
|
161
|
+
* @param {boolean} bValue Freeze or not the control
|
|
162
|
+
*/
|
|
163
|
+
;
|
|
164
|
+
|
|
165
|
+
_proto.setFreezeContent = function setFreezeContent(bValue) {
|
|
166
|
+
this.setProperty("freezeContent", bValue);
|
|
167
|
+
|
|
168
|
+
this._setInnerBinding();
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Updates the internal model with the properties that are not applicable on each IconTabFilter (containing inner control) according to the entityType of the filter control.
|
|
172
|
+
*
|
|
173
|
+
* @param {sap.ui.mdc.FilterBar} oFilterControl The filter control
|
|
174
|
+
* @param {string} sEntityTypePath The entity type of the filter control
|
|
175
|
+
* @param oResourceBundle
|
|
176
|
+
*/
|
|
177
|
+
;
|
|
178
|
+
|
|
179
|
+
_proto.updateMultiTabNotApplicableFields = function updateMultiTabNotApplicableFields(oFilterControl, sEntityTypePath, oResourceBundle) {
|
|
180
|
+
var _this3 = this;
|
|
181
|
+
|
|
182
|
+
var tabsModel = this.getTabsModel();
|
|
183
|
+
|
|
184
|
+
if (tabsModel) {
|
|
185
|
+
var results = {};
|
|
186
|
+
|
|
187
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
188
|
+
var oTab = _this3._getTabFromInnerControl(oMacroAPI);
|
|
189
|
+
|
|
190
|
+
if (oTab) {
|
|
191
|
+
var _oMacroAPI$refreshNot;
|
|
192
|
+
|
|
193
|
+
var sTabId = oTab.getKey();
|
|
194
|
+
var mIgnoredFields = ((_oMacroAPI$refreshNot = oMacroAPI.refreshNotApplicableFields) === null || _oMacroAPI$refreshNot === void 0 ? void 0 : _oMacroAPI$refreshNot.call(oMacroAPI, oFilterControl)) || [];
|
|
195
|
+
results[sTabId] = {
|
|
196
|
+
notApplicable: {
|
|
197
|
+
fields: mIgnoredFields,
|
|
198
|
+
title: _this3._setTabMessageStrip({
|
|
199
|
+
entityTypePath: sEntityTypePath,
|
|
200
|
+
filterControl: oFilterControl,
|
|
201
|
+
ignoredFields: mIgnoredFields,
|
|
202
|
+
resourceBundle: oResourceBundle,
|
|
203
|
+
title: oTab.getText()
|
|
204
|
+
})
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
tabsModel.setData(results);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Gets the model containing information related to the IconTabFilters.
|
|
215
|
+
*
|
|
216
|
+
* @returns {sap.ui.model.Model | undefined} The model
|
|
217
|
+
*/
|
|
218
|
+
;
|
|
219
|
+
|
|
220
|
+
_proto.getTabsModel = function getTabsModel() {
|
|
221
|
+
var sTabsModel = "tabsInternal";
|
|
222
|
+
var oContent = this.content;
|
|
223
|
+
|
|
224
|
+
if (!oContent) {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
var oModel = oContent.getModel(sTabsModel);
|
|
229
|
+
|
|
230
|
+
if (!oModel) {
|
|
231
|
+
oModel = new JSONModel({});
|
|
232
|
+
oContent.setModel(oModel, sTabsModel);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return oModel;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
_proto._getAllInnerControls = function _getAllInnerControls() {
|
|
239
|
+
var _this4 = this;
|
|
240
|
+
|
|
241
|
+
var bOnlyForVisibleTab = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
242
|
+
return this.innerControls.reduce(function (aInnerControls, sInnerControl) {
|
|
243
|
+
var oControl = Core.byId(sInnerControl);
|
|
244
|
+
|
|
245
|
+
if (oControl) {
|
|
246
|
+
aInnerControls.push(oControl);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return aInnerControls.filter(function (oInnerControl) {
|
|
250
|
+
var _this4$_getTabFromInn;
|
|
251
|
+
|
|
252
|
+
return !bOnlyForVisibleTab || ((_this4$_getTabFromInn = _this4._getTabFromInnerControl(oInnerControl)) === null || _this4$_getTabFromInn === void 0 ? void 0 : _this4$_getTabFromInn.getVisible());
|
|
253
|
+
});
|
|
254
|
+
}, []) || [];
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
_proto._getTabFromInnerControl = function _getTabFromInnerControl(oControl) {
|
|
258
|
+
var sSupportedClass = IconTabFilter.getMetadata().getName();
|
|
259
|
+
var oTab = oControl;
|
|
260
|
+
|
|
261
|
+
if (oTab && !oTab.isA(sSupportedClass) && oTab.getParent) {
|
|
262
|
+
oTab = oControl.getParent();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return oTab && oTab.isA(sSupportedClass) ? oTab : undefined;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
_proto._getSelectedInnerControl = function _getSelectedInnerControl() {
|
|
269
|
+
var _this5 = this;
|
|
270
|
+
|
|
271
|
+
var oSelectedTab = this.content.getItems().find(function (oItem) {
|
|
272
|
+
return oItem.getKey() === _this5.content.getSelectedKey();
|
|
273
|
+
});
|
|
274
|
+
return oSelectedTab ? this._getAllInnerControls().find(function (oMacroAPI) {
|
|
275
|
+
return _this5._getTabFromInnerControl(oMacroAPI) === oSelectedTab;
|
|
276
|
+
}) : undefined;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
_proto._refreshTabsCount = function _refreshTabsCount() {
|
|
280
|
+
var _this6 = this;
|
|
281
|
+
|
|
282
|
+
var sSelectedKey = this.content.getSelectedKey();
|
|
283
|
+
|
|
284
|
+
this._getAllInnerControls(true).forEach(function (oMacroAPI) {
|
|
285
|
+
var oIconTabFilter = _this6._getTabFromInnerControl(oMacroAPI);
|
|
286
|
+
|
|
287
|
+
if (oMacroAPI !== null && oMacroAPI !== void 0 && oMacroAPI.getCounts && (_this6.countsOutDated || sSelectedKey === (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()))) {
|
|
288
|
+
if (oIconTabFilter && oIconTabFilter.setCount) {
|
|
289
|
+
oIconTabFilter.setCount("...");
|
|
290
|
+
oMacroAPI.getCounts().then(function (iCount) {
|
|
291
|
+
return oIconTabFilter.setCount(iCount || "0");
|
|
292
|
+
}).catch(function (oError) {
|
|
293
|
+
Log.error("Error while requesting Counts for Control", oError);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
this.setCountsOutDated(false);
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
_proto._setInnerBinding = function _setInnerBinding() {
|
|
303
|
+
var _this7 = this;
|
|
304
|
+
|
|
305
|
+
var bRequestIfNotInitialized = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
306
|
+
|
|
307
|
+
if (this.content) {
|
|
308
|
+
this._getAllInnerControls().forEach(function (oMacroAPI) {
|
|
309
|
+
var _oMacroAPI$sAction;
|
|
310
|
+
|
|
311
|
+
var oIconTabFilter = _this7._getTabFromInnerControl(oMacroAPI);
|
|
312
|
+
|
|
313
|
+
var bIsSelectedKey = (oIconTabFilter === null || oIconTabFilter === void 0 ? void 0 : oIconTabFilter.getKey()) === _this7.content.getSelectedKey();
|
|
314
|
+
|
|
315
|
+
var sAction = bIsSelectedKey && !_this7.getProperty("freezeContent") ? BindingAction.Resume : BindingAction.Suspend;
|
|
316
|
+
(_oMacroAPI$sAction = oMacroAPI[sAction]) === null || _oMacroAPI$sAction === void 0 ? void 0 : _oMacroAPI$sAction.call(oMacroAPI, sAction === BindingAction.Resume ? bRequestIfNotInitialized && bIsSelectedKey : undefined);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
_proto._setTabMessageStrip = function _setTabMessageStrip(properties) {
|
|
322
|
+
var sText = "";
|
|
323
|
+
var aIgnoredFields = properties.ignoredFields;
|
|
324
|
+
var oFilterControl = properties.filterControl;
|
|
325
|
+
|
|
326
|
+
if (oFilterControl && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && properties.title) {
|
|
327
|
+
var aIgnoredLabels = MessageStrip.getLabels(aIgnoredFields, properties.entityTypePath, oFilterControl, properties.resourceBundle);
|
|
328
|
+
sText = MessageStrip.getText(aIgnoredLabels, oFilterControl, properties.title, DelegateUtil.getLocalizedText);
|
|
329
|
+
return sText;
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
return MultipleModeControl;
|
|
334
|
+
}(Control), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "showCounts", [_dec2], {
|
|
335
|
+
configurable: true,
|
|
336
|
+
enumerable: true,
|
|
337
|
+
writable: true,
|
|
338
|
+
initializer: null
|
|
339
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "freezeContent", [_dec3], {
|
|
340
|
+
configurable: true,
|
|
341
|
+
enumerable: true,
|
|
342
|
+
writable: true,
|
|
343
|
+
initializer: null
|
|
344
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "countsOutDated", [_dec4], {
|
|
345
|
+
configurable: true,
|
|
346
|
+
enumerable: true,
|
|
347
|
+
writable: true,
|
|
348
|
+
initializer: null
|
|
349
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec5], {
|
|
350
|
+
configurable: true,
|
|
351
|
+
enumerable: true,
|
|
352
|
+
writable: true,
|
|
353
|
+
initializer: null
|
|
354
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "innerControls", [_dec6], {
|
|
355
|
+
configurable: true,
|
|
356
|
+
enumerable: true,
|
|
357
|
+
writable: true,
|
|
358
|
+
initializer: null
|
|
359
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "select", [_dec7], {
|
|
360
|
+
configurable: true,
|
|
361
|
+
enumerable: true,
|
|
362
|
+
writable: true,
|
|
363
|
+
initializer: null
|
|
364
|
+
})), _class2)) || _class);
|
|
365
|
+
return MultipleModeControl;
|
|
366
|
+
}, false);
|
|
367
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk11bHRpcGxlTW9kZUNvbnRyb2wudHMiXSwibmFtZXMiOlsiQmluZGluZ0FjdGlvbiIsIk11bHRpcGxlTW9kZUNvbnRyb2wiLCJkZWZpbmVVSTVDbGFzcyIsInByb3BlcnR5IiwidHlwZSIsImRlZmF1bHRWYWx1ZSIsImFnZ3JlZ2F0aW9uIiwibXVsdGlwbGUiLCJpc0RlZmF1bHQiLCJhc3NvY2lhdGlvbiIsImV2ZW50Iiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRUYWJzTW9kZWwiLCJnZXRBZ2dyZWdhdGlvbiIsImF0dGFjaEV2ZW50IiwiaGFuZGxlVGFiQ2hhbmdlIiwiYmluZCIsIl9nZXRBbGxJbm5lckNvbnRyb2xzIiwiZm9yRWFjaCIsIm9NYWNyb0FQSSIsInNob3dDb3VudHMiLCJfcmVmcmVzaFRhYnNDb3VudCIsInN1c3BlbmRCaW5kaW5nIiwib25BZnRlclJlbmRlcmluZyIsIl9nZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImNvbnRlbnQiLCJvRXZlbnQiLCJtUGFyYW1ldGVycyIsImdldFBhcmFtZXRlcnMiLCJfc2V0SW5uZXJCaW5kaW5nIiwiZmlyZUV2ZW50IiwiaWNvblRhYkJhciIsInNlbGVjdGVkS2V5IiwicHJldmlvdXNLZXkiLCJpbnZhbGlkYXRlQ29udGVudCIsInNldENvdW50c091dERhdGVkIiwiYlZhbHVlIiwic2V0UHJvcGVydHkiLCJzZXRGcmVlemVDb250ZW50IiwidXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwib0ZpbHRlckNvbnRyb2wiLCJzRW50aXR5VHlwZVBhdGgiLCJvUmVzb3VyY2VCdW5kbGUiLCJ0YWJzTW9kZWwiLCJyZXN1bHRzIiwib1RhYiIsIl9nZXRUYWJGcm9tSW5uZXJDb250cm9sIiwic1RhYklkIiwiZ2V0S2V5IiwibUlnbm9yZWRGaWVsZHMiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm5vdEFwcGxpY2FibGUiLCJmaWVsZHMiLCJ0aXRsZSIsIl9zZXRUYWJNZXNzYWdlU3RyaXAiLCJlbnRpdHlUeXBlUGF0aCIsImZpbHRlckNvbnRyb2wiLCJpZ25vcmVkRmllbGRzIiwicmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0Iiwic2V0RGF0YSIsInNUYWJzTW9kZWwiLCJvQ29udGVudCIsInVuZGVmaW5lZCIsIm9Nb2RlbCIsImdldE1vZGVsIiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJiT25seUZvclZpc2libGVUYWIiLCJpbm5lckNvbnRyb2xzIiwicmVkdWNlIiwiYUlubmVyQ29udHJvbHMiLCJzSW5uZXJDb250cm9sIiwiQ29yZSIsImJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImdldFZpc2libGUiLCJzU3VwcG9ydGVkQ2xhc3MiLCJJY29uVGFiRmlsdGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiaXNBIiwiZ2V0UGFyZW50Iiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRTZWxlY3RlZEtleSIsInNTZWxlY3RlZEtleSIsIm9JY29uVGFiRmlsdGVyIiwiZ2V0Q291bnRzIiwiY291bnRzT3V0RGF0ZWQiLCJzZXRDb3VudCIsInRoZW4iLCJpQ291bnQiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiQ29udHJvbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7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cUN4RSxjQUFyQyxFQUFxRGtFLFVBQVUsQ0FBQ3JELEtBQWhFLEVBQXVFOEQsWUFBWSxDQUFDQyxnQkFBcEYsQ0FBUjtBQUNBLGVBQU9ULEtBQVA7QUFDQTtBQUNELEs7OztJQTFOZ0NVLE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0E2Tm5CMUgsbUIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBhc3NvY2lhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCBJY29uVGFiQmFyIGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgSWNvblRhYkZpbHRlciBmcm9tIFwic2FwL20vSWNvblRhYkZpbHRlclwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBJbm5lckNvbnRyb2xUeXBlID0gTWFjcm9BUEkgJlxuXHRQYXJ0aWFsPHtcblx0XHRyZXN1bWVCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRzdXNwZW5kQmluZGluZzogRnVuY3Rpb247XG5cdFx0Z2V0Q291bnRzOiBGdW5jdGlvbjtcblx0XHRyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkczogRnVuY3Rpb247XG5cdFx0aW52YWxpZGF0ZUNvbnRlbnQ6IEZ1bmN0aW9uO1xuXHR9PjtcblxudHlwZSBNZXNzYWdlU3RyaXBQcm9wZXJ0aWVzID0ge1xuXHRlbnRpdHlUeXBlUGF0aDogc3RyaW5nO1xuXHRmaWx0ZXJDb250cm9sOiBDb250cm9sO1xuXHRpZ25vcmVkRmllbGRzOiBhbnlbXTtcblx0cmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZnJlZXplQ29udGVudCE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0Y291bnRzT3V0RGF0ZWQhOiBib29sZWFuO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLm0uSWNvblRhYkJhclwiLCBtdWx0aXBsZTogZmFsc2UsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRjb250ZW50ITogSWNvblRhYkJhcjtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiwgbXVsdGlwbGU6IHRydWUgfSlcblx0aW5uZXJDb250cm9scyE6IHN0cmluZ1tdO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3Ncblx0XHQodGhpcy5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIikgYXMgSWNvblRhYkJhciB8IHVuZGVmaW5lZCk/LmF0dGFjaEV2ZW50KFwic2VsZWN0XCIsIHRoaXMuaGFuZGxlVGFiQ2hhbmdlLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdGlmICh0aGlzLnNob3dDb3VudHMpIHtcblx0XHRcdFx0b01hY3JvQVBJLmF0dGFjaEV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIsIHRoaXMuX3JlZnJlc2hUYWJzQ291bnQuYmluZCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRvTWFjcm9BUEkuc3VzcGVuZEJpbmRpbmc/LigpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHR0aGlzLl9nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4oIXRoaXMuZ2V0UHJvcGVydHkoXCJmcmVlemVDb250ZW50XCIpKTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCkge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5FdmVudH0gb0V2ZW50IEV2ZW50IGZpcmVkIGJ5IHRoZSBJY29uVGFiQmFyXG5cdCAqL1xuXHRoYW5kbGVUYWJDaGFuZ2Uob0V2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cblx0XHR0aGlzLl9zZXRJbm5lckJpbmRpbmcodHJ1ZSk7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogdGhpcy5jb250ZW50LFxuXHRcdFx0c2VsZWN0ZWRLZXk6IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleSxcblx0XHRcdHByZXZpb3VzS2V5OiBtUGFyYW1ldGVycz8ucHJldmlvdXNLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiBhbGwgaW5uZXIgY29udHJvbHMuXG5cdCAqL1xuXHRpbnZhbGlkYXRlQ29udGVudCgpIHtcblx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdG9NYWNyb0FQSS5pbnZhbGlkYXRlQ29udGVudD8uKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgY291bnRzIHRvIG91dCBvZiBkYXRlIG9yIHVwIHRvIGRhdGVcblx0ICogSWYgdGhlIGNvdW50cyBhcmUgc2V0IHRvIFwib3V0IG9mIGRhdGVcIiBhbmQgdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgZG9lc24ndCBjb250YWluIGFuIGlubmVyIGNvbnRyb2wgYWxsIGlubmVyIGNvbnRyb2xzIGFyZSByZXF1ZXN0ZWQgdG8gZ2V0IHRoZSBuZXcgY291bnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJWYWx1ZSBGcmVlemUgb3Igbm90IHRoZSBjb250cm9sXG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5fZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKSkge1xuXHRcdFx0dGhpcy5fcmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogIC0gY29udGVudCBpcyBmcm96ZW46IHRoZSBiaW5kaW5nIG9mIHRoZSBpbm5lciBjb250cm9scyBhcmUgc3VzcGVuZGVkLlxuXHQgKiAgLSBjb250ZW50IGlzIHVuZnJvemVuOiB0aGUgYmluZGluZyBvZiBpbm5lciBjb250cm9sIHJlbGF0ZWQgdG8gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgcmVzdW1lZC5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5GaWx0ZXJCYXJ9IG9GaWx0ZXJDb250cm9sIFRoZSBmaWx0ZXIgY29udHJvbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VudGl0eVR5cGVQYXRoIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2xcblx0ICogQHBhcmFtIG9SZXNvdXJjZUJ1bmRsZVxuXHQgKi9cblx0dXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKG9GaWx0ZXJDb250cm9sOiBDb250cm9sLCBzRW50aXR5VHlwZVBhdGg6IHN0cmluZywgb1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0aWYgKHRhYnNNb2RlbCkge1xuXHRcdFx0Y29uc3QgcmVzdWx0czogYW55ID0ge307XG5cdFx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UYWIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGlmIChvVGFiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1RhYklkID0gb1RhYi5nZXRLZXkoKTtcblx0XHRcdFx0XHRjb25zdCBtSWdub3JlZEZpZWxkcyA9IG9NYWNyb0FQSS5yZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcz8uKG9GaWx0ZXJDb250cm9sKSB8fCBbXTtcblx0XHRcdFx0XHRyZXN1bHRzW3NUYWJJZF0gPSB7XG5cdFx0XHRcdFx0XHRub3RBcHBsaWNhYmxlOiB7XG5cdFx0XHRcdFx0XHRcdGZpZWxkczogbUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB0aGlzLl9zZXRUYWJNZXNzYWdlU3RyaXAoe1xuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoOiBzRW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0ZmlsdGVyQ29udHJvbDogb0ZpbHRlckNvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlZEZpZWxkczogbUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VCdW5kbGU6IG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogb1RhYi5nZXRUZXh0KClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdCh0YWJzTW9kZWwgYXMgYW55KS5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBtb2RlbCBjb250YWluaW5nIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIEljb25UYWJGaWx0ZXJzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c2FwLnVpLm1vZGVsLk1vZGVsIHwgdW5kZWZpbmVkfSBUaGUgbW9kZWxcblx0ICovXG5cdGdldFRhYnNNb2RlbCgpOiBNb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpO1xuXHRcdGlmICghb01vZGVsKSB7XG5cdFx0XHRvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KTtcblx0XHRcdG9Db250ZW50LnNldE1vZGVsKG9Nb2RlbCwgc1RhYnNNb2RlbCk7XG5cdFx0fVxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHRfZ2V0QWxsSW5uZXJDb250cm9scyhiT25seUZvclZpc2libGVUYWIgPSBmYWxzZSk6IElubmVyQ29udHJvbFR5cGVbXSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaW5uZXJDb250cm9scy5yZWR1Y2UoKGFJbm5lckNvbnRyb2xzOiBJbm5lckNvbnRyb2xUeXBlW10sIHNJbm5lckNvbnRyb2w6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IENvcmUuYnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9Db250cm9sOiBDb250cm9sKTogSWNvblRhYkZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1N1cHBvcnRlZENsYXNzID0gSWNvblRhYkZpbHRlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRsZXQgb1RhYjogYW55ID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBKHNTdXBwb3J0ZWRDbGFzcykgJiYgb1RhYi5nZXRQYXJlbnQpIHtcblx0XHRcdG9UYWIgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9UYWIgJiYgb1RhYi5pc0Eoc1N1cHBvcnRlZENsYXNzKSA/IChvVGFiIGFzIEljb25UYWJGaWx0ZXIpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFNlbGVjdGVkSW5uZXJDb250cm9sKCk6IElubmVyQ29udHJvbFR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9TZWxlY3RlZFRhYiA9IHRoaXMuY29udGVudC5nZXRJdGVtcygpLmZpbmQoKG9JdGVtKSA9PiAob0l0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IHRoaXMuY29udGVudC5nZXRTZWxlY3RlZEtleSgpKTtcblx0XHRyZXR1cm4gb1NlbGVjdGVkVGFiXG5cdFx0XHQ/IHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5maW5kKChvTWFjcm9BUEkpID0+IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKSA9PT0gb1NlbGVjdGVkVGFiKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfcmVmcmVzaFRhYnNDb3VudCgpOiB2b2lkIHtcblx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHR0aGlzLl9nZXRBbGxJbm5lckNvbnRyb2xzKHRydWUpLmZvckVhY2goKG9NYWNyb0FQSSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRpZiAob01hY3JvQVBJPy5nZXRDb3VudHMgJiYgKHRoaXMuY291bnRzT3V0RGF0ZWQgfHwgc1NlbGVjdGVkS2V5ID09PSBvSWNvblRhYkZpbHRlcj8uZ2V0S2V5KCkpKSB7XG5cdFx0XHRcdGlmIChvSWNvblRhYkZpbHRlciAmJiBvSWNvblRhYkZpbHRlci5zZXRDb3VudCkge1xuXHRcdFx0XHRcdG9JY29uVGFiRmlsdGVyLnNldENvdW50KFwiLi4uXCIpO1xuXHRcdFx0XHRcdG9NYWNyb0FQSVxuXHRcdFx0XHRcdFx0LmdldENvdW50cygpXG5cdFx0XHRcdFx0XHQudGhlbigoaUNvdW50OiBzdHJpbmcpID0+IG9JY29uVGFiRmlsdGVyLnNldENvdW50KGlDb3VudCB8fCBcIjBcIikpXG5cdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgQ291bnRzIGZvciBDb250cm9sXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQoZmFsc2UpO1xuXHR9XG5cblx0X3NldElubmVyQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuX2dldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpIHtcblx0XHRsZXQgc1RleHQgPSBcIlwiO1xuXHRcdGNvbnN0IGFJZ25vcmVkRmllbGRzID0gcHJvcGVydGllcy5pZ25vcmVkRmllbGRzO1xuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gcHJvcGVydGllcy5maWx0ZXJDb250cm9sO1xuXHRcdGlmIChvRmlsdGVyQ29udHJvbCAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIHByb3BlcnRpZXMudGl0bGUpIHtcblx0XHRcdGNvbnN0IGFJZ25vcmVkTGFiZWxzID0gTWVzc2FnZVN0cmlwLmdldExhYmVscyhcblx0XHRcdFx0YUlnbm9yZWRGaWVsZHMsXG5cdFx0XHRcdHByb3BlcnRpZXMuZW50aXR5VHlwZVBhdGgsXG5cdFx0XHRcdG9GaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLnJlc291cmNlQnVuZGxlXG5cdFx0XHQpO1xuXHRcdFx0c1RleHQgPSBNZXNzYWdlU3RyaXAuZ2V0VGV4dChhSWdub3JlZExhYmVscywgb0ZpbHRlckNvbnRyb2wsIHByb3BlcnRpZXMudGl0bGUsIERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KTtcblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlwbGVNb2RlQ29udHJvbDtcbiJdfQ==
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
2
|
+
import Log from "sap/base/Log";
|
|
3
|
+
import { aggregation, association, defineUI5Class, event, property } from "sap/fe/core/helpers/ClassSupport";
|
|
4
|
+
import MessageStrip from "sap/fe/core/helpers/MessageStrip";
|
|
5
|
+
import DelegateUtil from "sap/fe/macros/DelegateUtil";
|
|
6
|
+
import MacroAPI from "sap/fe/macros/MacroAPI";
|
|
7
|
+
import IconTabBar from "sap/m/IconTabBar";
|
|
8
|
+
import IconTabFilter from "sap/m/IconTabFilter";
|
|
9
|
+
import Control from "sap/ui/core/Control";
|
|
10
|
+
import Core from "sap/ui/core/Core";
|
|
11
|
+
import RenderManager from "sap/ui/core/RenderManager";
|
|
12
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
13
|
+
import Model from "sap/ui/model/Model";
|
|
14
|
+
|
|
15
|
+
export type InnerControlType = MacroAPI &
|
|
16
|
+
Partial<{
|
|
17
|
+
resumeBinding: Function;
|
|
18
|
+
suspendBinding: Function;
|
|
19
|
+
getCounts: Function;
|
|
20
|
+
refreshNotApplicableFields: Function;
|
|
21
|
+
invalidateContent: Function;
|
|
22
|
+
}>;
|
|
23
|
+
|
|
24
|
+
type MessageStripProperties = {
|
|
25
|
+
entityTypePath: string;
|
|
26
|
+
filterControl: Control;
|
|
27
|
+
ignoredFields: any[];
|
|
28
|
+
resourceBundle: ResourceBundle;
|
|
29
|
+
title: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
enum BindingAction {
|
|
33
|
+
Suspend = "suspendBinding",
|
|
34
|
+
Resume = "resumeBinding"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@defineUI5Class("sap.fe.templates.ListReport.controls.MultipleModeControl")
|
|
38
|
+
class MultipleModeControl extends Control {
|
|
39
|
+
@property({ type: "boolean" })
|
|
40
|
+
showCounts!: boolean;
|
|
41
|
+
|
|
42
|
+
@property({ type: "boolean", defaultValue: false })
|
|
43
|
+
freezeContent!: boolean;
|
|
44
|
+
|
|
45
|
+
@property({ type: "boolean", defaultValue: false })
|
|
46
|
+
countsOutDated!: boolean;
|
|
47
|
+
|
|
48
|
+
@aggregation({ type: "sap.m.IconTabBar", multiple: false, isDefault: true })
|
|
49
|
+
content!: IconTabBar;
|
|
50
|
+
|
|
51
|
+
@association({ type: "sap.ui.core.Control", multiple: true })
|
|
52
|
+
innerControls!: string[];
|
|
53
|
+
|
|
54
|
+
@event()
|
|
55
|
+
select!: Function;
|
|
56
|
+
|
|
57
|
+
onBeforeRendering() {
|
|
58
|
+
this.getTabsModel(); // Generate the model which is mandatory for some bindings
|
|
59
|
+
(this.getAggregation("content") as IconTabBar | undefined)?.attachEvent("select", this.handleTabChange.bind(this));
|
|
60
|
+
this._getAllInnerControls().forEach((oMacroAPI) => {
|
|
61
|
+
if (this.showCounts) {
|
|
62
|
+
oMacroAPI.attachEvent("internalDataRequested", this._refreshTabsCount.bind(this));
|
|
63
|
+
}
|
|
64
|
+
oMacroAPI.suspendBinding?.();
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
onAfterRendering() {
|
|
69
|
+
this._getSelectedInnerControl()?.resumeBinding?.(!this.getProperty("freezeContent"));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static render(oRm: RenderManager, oControl: MultipleModeControl) {
|
|
73
|
+
oRm.renderControl(oControl.content);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Manages the binding of all inner controls when the selected IconTabFilter is changed.
|
|
78
|
+
*
|
|
79
|
+
* @param {sap.ui.base.Event} oEvent Event fired by the IconTabBar
|
|
80
|
+
*/
|
|
81
|
+
handleTabChange(oEvent: any): void {
|
|
82
|
+
const mParameters = oEvent.getParameters();
|
|
83
|
+
|
|
84
|
+
this._setInnerBinding(true);
|
|
85
|
+
this.fireEvent("select", {
|
|
86
|
+
iconTabBar: this.content,
|
|
87
|
+
selectedKey: mParameters?.selectedKey,
|
|
88
|
+
previousKey: mParameters?.previousKey
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Invalidates the content of all inner controls.
|
|
94
|
+
*/
|
|
95
|
+
invalidateContent() {
|
|
96
|
+
this.setCountsOutDated(true);
|
|
97
|
+
this._getAllInnerControls().forEach((oMacroAPI) => {
|
|
98
|
+
oMacroAPI.invalidateContent?.();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Sets the counts to out of date or up to date
|
|
104
|
+
* If the counts are set to "out of date" and the selected IconTabFilter doesn't contain an inner control all inner controls are requested to get the new counts.
|
|
105
|
+
*
|
|
106
|
+
* @param {boolean} bValue Freeze or not the control
|
|
107
|
+
*/
|
|
108
|
+
setCountsOutDated(bValue = true) {
|
|
109
|
+
this.setProperty("countsOutDated", bValue);
|
|
110
|
+
// if the current tab is not configured with no inner Control
|
|
111
|
+
// the tab counts must be manually refreshed since no Macro API will sent event internalDataRequested
|
|
112
|
+
if (bValue && !this._getSelectedInnerControl()) {
|
|
113
|
+
this._refreshTabsCount();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Freezes the content :
|
|
119
|
+
* - content is frozen: the binding of the inner controls are suspended.
|
|
120
|
+
* - content is unfrozen: the binding of inner control related to the selected IconTabFilter is resumed.
|
|
121
|
+
*
|
|
122
|
+
* @param {boolean} bValue Freeze or not the control
|
|
123
|
+
*/
|
|
124
|
+
setFreezeContent(bValue: boolean) {
|
|
125
|
+
this.setProperty("freezeContent", bValue);
|
|
126
|
+
this._setInnerBinding();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Updates the internal model with the properties that are not applicable on each IconTabFilter (containing inner control) according to the entityType of the filter control.
|
|
131
|
+
*
|
|
132
|
+
* @param {sap.ui.mdc.FilterBar} oFilterControl The filter control
|
|
133
|
+
* @param {string} sEntityTypePath The entity type of the filter control
|
|
134
|
+
* @param oResourceBundle
|
|
135
|
+
*/
|
|
136
|
+
updateMultiTabNotApplicableFields(oFilterControl: Control, sEntityTypePath: string, oResourceBundle: ResourceBundle) {
|
|
137
|
+
const tabsModel = this.getTabsModel();
|
|
138
|
+
if (tabsModel) {
|
|
139
|
+
const results: any = {};
|
|
140
|
+
this._getAllInnerControls().forEach((oMacroAPI) => {
|
|
141
|
+
const oTab = this._getTabFromInnerControl(oMacroAPI);
|
|
142
|
+
if (oTab) {
|
|
143
|
+
const sTabId = oTab.getKey();
|
|
144
|
+
const mIgnoredFields = oMacroAPI.refreshNotApplicableFields?.(oFilterControl) || [];
|
|
145
|
+
results[sTabId] = {
|
|
146
|
+
notApplicable: {
|
|
147
|
+
fields: mIgnoredFields,
|
|
148
|
+
title: this._setTabMessageStrip({
|
|
149
|
+
entityTypePath: sEntityTypePath,
|
|
150
|
+
filterControl: oFilterControl,
|
|
151
|
+
ignoredFields: mIgnoredFields,
|
|
152
|
+
resourceBundle: oResourceBundle,
|
|
153
|
+
title: oTab.getText()
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
(tabsModel as any).setData(results);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Gets the model containing information related to the IconTabFilters.
|
|
165
|
+
*
|
|
166
|
+
* @returns {sap.ui.model.Model | undefined} The model
|
|
167
|
+
*/
|
|
168
|
+
getTabsModel(): Model | undefined {
|
|
169
|
+
const sTabsModel = "tabsInternal";
|
|
170
|
+
const oContent = this.content;
|
|
171
|
+
if (!oContent) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
let oModel = oContent.getModel(sTabsModel);
|
|
175
|
+
if (!oModel) {
|
|
176
|
+
oModel = new JSONModel({});
|
|
177
|
+
oContent.setModel(oModel, sTabsModel);
|
|
178
|
+
}
|
|
179
|
+
return oModel;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
_getAllInnerControls(bOnlyForVisibleTab = false): InnerControlType[] {
|
|
183
|
+
return (
|
|
184
|
+
this.innerControls.reduce((aInnerControls: InnerControlType[], sInnerControl: string) => {
|
|
185
|
+
const oControl = Core.byId(sInnerControl) as InnerControlType;
|
|
186
|
+
if (oControl) {
|
|
187
|
+
aInnerControls.push(oControl);
|
|
188
|
+
}
|
|
189
|
+
return aInnerControls.filter(
|
|
190
|
+
(oInnerControl) => !bOnlyForVisibleTab || this._getTabFromInnerControl(oInnerControl)?.getVisible()
|
|
191
|
+
);
|
|
192
|
+
}, []) || []
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
_getTabFromInnerControl(oControl: Control): IconTabFilter | undefined {
|
|
197
|
+
const sSupportedClass = IconTabFilter.getMetadata().getName();
|
|
198
|
+
let oTab: any = oControl;
|
|
199
|
+
if (oTab && !oTab.isA(sSupportedClass) && oTab.getParent) {
|
|
200
|
+
oTab = oControl.getParent();
|
|
201
|
+
}
|
|
202
|
+
return oTab && oTab.isA(sSupportedClass) ? (oTab as IconTabFilter) : undefined;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
_getSelectedInnerControl(): InnerControlType | undefined {
|
|
206
|
+
const oSelectedTab = this.content.getItems().find((oItem) => (oItem as IconTabFilter).getKey() === this.content.getSelectedKey());
|
|
207
|
+
return oSelectedTab
|
|
208
|
+
? this._getAllInnerControls().find((oMacroAPI) => this._getTabFromInnerControl(oMacroAPI) === oSelectedTab)
|
|
209
|
+
: undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
_refreshTabsCount(): void {
|
|
213
|
+
const sSelectedKey = this.content.getSelectedKey();
|
|
214
|
+
this._getAllInnerControls(true).forEach((oMacroAPI) => {
|
|
215
|
+
const oIconTabFilter = this._getTabFromInnerControl(oMacroAPI);
|
|
216
|
+
if (oMacroAPI?.getCounts && (this.countsOutDated || sSelectedKey === oIconTabFilter?.getKey())) {
|
|
217
|
+
if (oIconTabFilter && oIconTabFilter.setCount) {
|
|
218
|
+
oIconTabFilter.setCount("...");
|
|
219
|
+
oMacroAPI
|
|
220
|
+
.getCounts()
|
|
221
|
+
.then((iCount: string) => oIconTabFilter.setCount(iCount || "0"))
|
|
222
|
+
.catch(function (oError: any) {
|
|
223
|
+
Log.error("Error while requesting Counts for Control", oError);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
this.setCountsOutDated(false);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
_setInnerBinding(bRequestIfNotInitialized = false) {
|
|
232
|
+
if (this.content) {
|
|
233
|
+
this._getAllInnerControls().forEach((oMacroAPI) => {
|
|
234
|
+
const oIconTabFilter = this._getTabFromInnerControl(oMacroAPI);
|
|
235
|
+
const bIsSelectedKey = oIconTabFilter?.getKey() === this.content.getSelectedKey();
|
|
236
|
+
const sAction = bIsSelectedKey && !this.getProperty("freezeContent") ? BindingAction.Resume : BindingAction.Suspend;
|
|
237
|
+
oMacroAPI[sAction]?.(sAction === BindingAction.Resume ? bRequestIfNotInitialized && bIsSelectedKey : undefined);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
_setTabMessageStrip(properties: MessageStripProperties) {
|
|
243
|
+
let sText = "";
|
|
244
|
+
const aIgnoredFields = properties.ignoredFields;
|
|
245
|
+
const oFilterControl = properties.filterControl;
|
|
246
|
+
if (oFilterControl && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && properties.title) {
|
|
247
|
+
const aIgnoredLabels = MessageStrip.getLabels(
|
|
248
|
+
aIgnoredFields,
|
|
249
|
+
properties.entityTypePath,
|
|
250
|
+
oFilterControl,
|
|
251
|
+
properties.resourceBundle
|
|
252
|
+
);
|
|
253
|
+
sText = MessageStrip.getText(aIgnoredLabels, oFilterControl, properties.title, DelegateUtil.getLocalizedText);
|
|
254
|
+
return sText;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export default MultipleModeControl;
|