@sapui5/sap.suite.ui.generic.template 1.145.0 → 1.145.2
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 +1 -1
- package/src/sap/suite/ui/generic/template/.library +1 -1
- package/src/sap/suite/ui/generic/template/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/Canvas/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ListReport/controller/ControllerImplementation.js +92 -9
- package/src/sap/suite/ui/generic/template/ListReport/controller/IappStateHandler.js +19 -8
- package/src/sap/suite/ui/generic/template/ListReport/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ListReport/view/fragments/SmartChart.fragment.xml +3 -2
- package/src/sap/suite/ui/generic/template/ListReport/view/fragments/SmartTable.fragment.xml +5 -4
- package/src/sap/suite/ui/generic/template/ObjectPage/controller/ControllerImplementation.js +7 -4
- package/src/sap/suite/ui/generic/template/ObjectPage/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartChart.fragment.xml +3 -2
- package/src/sap/suite/ui/generic/template/ObjectPage/view/fragments/SmartTable.fragment.xml +3 -2
- package/src/sap/suite/ui/generic/template/QuickCreate/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/QuickView/manifest.json +1 -1
- package/src/sap/suite/ui/generic/template/genericUtilities/ControlStateWrapperFactory.js +108 -67
- package/src/sap/suite/ui/generic/template/genericUtilities/controlHelper.js +29 -29
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/DynamicPageWrapper.js +19 -51
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/ObjectPageLayoutWrapper.js +10 -32
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/PreliminaryWrapper.js +151 -0
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SearchFieldWrapper.js +8 -30
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartFilterBarWrapper.js +49 -162
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartTableChartCommon.js +100 -94
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartTableWrapper.js +22 -3
- package/src/sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartVariantManagementWrapper.js +90 -81
- package/src/sap/suite/ui/generic/template/lib/AppComponent.js +1 -1
- package/src/sap/suite/ui/generic/template/lib/navigation/NavigationController.js +1 -1
- package/src/sap/suite/ui/generic/template/library.js +1 -1
|
@@ -4,41 +4,64 @@ sap.ui.define([
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Constructor for SmartTableChartCommon
|
|
7
|
-
*
|
|
8
|
-
* @param {object}
|
|
9
|
-
* @param
|
|
10
|
-
*
|
|
7
|
+
* @param {sap.ui.core.Control} oControl - The SmartTable or SmartChart control
|
|
8
|
+
* @param {object} oController - The controller instance
|
|
9
|
+
* @param {object} oFactory - The ControlStateWrapperFactory instance
|
|
10
|
+
* @param {string} sInitializationEvent - The initialization event name (e.g., "initialise")
|
|
11
|
+
* @param {object} [mExtensions] - Optional extension functions for control-specific state handling
|
|
12
|
+
* @param {function} [mExtensions.fnExtendGetUiState] - Function to extend UiState during getState
|
|
13
|
+
* Called with (oStateUiState, oControlUiState) where modifications to oStateUiState add to the state
|
|
14
|
+
* @param {function} [mExtensions.fnExtendSetUiState] - Function to extend UiState during setState
|
|
15
|
+
* Called with (oStateUiState, oControlUiState) where oStateUiState contains the state to apply
|
|
11
16
|
* @returns {object}
|
|
12
17
|
*/
|
|
13
18
|
|
|
14
19
|
// deals with state of SFB itself, without SVM (see SmartVariantManagementWrapper) and go-button
|
|
15
20
|
// (does not contain a state from SFB point of view - however, we remember whether it was pressed once
|
|
16
21
|
// to restore data - this information is not considered being part of SFB)
|
|
17
|
-
function SmartTableChartCommon(
|
|
18
|
-
var oSmartControl
|
|
19
|
-
var
|
|
22
|
+
function SmartTableChartCommon(oControl, oController, oFactory, sInitializationEvent, mExtensions) {
|
|
23
|
+
var oSmartControl = oControl;
|
|
24
|
+
var oVariantManagementControl, bVariantManagementActive;
|
|
20
25
|
var oSmartControlStateWrapper;
|
|
21
26
|
var oVariantManagementStateWrapper;
|
|
27
|
+
var oVariantManagementInitializedResolve;
|
|
28
|
+
var fnResolveReady;
|
|
22
29
|
|
|
23
|
-
var
|
|
24
|
-
|
|
30
|
+
var oVariantManagementInitializedPromise = new Promise(function(resolve){
|
|
31
|
+
oVariantManagementInitializedResolve = resolve;
|
|
25
32
|
});
|
|
26
33
|
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
var oReadyPromise = new Promise(function(resolve) {
|
|
35
|
+
fnResolveReady = resolve;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Initialize control state wrapper and check if control is already initialized
|
|
39
|
+
oSmartControlStateWrapper = getControlWrapper(oSmartControl);
|
|
40
|
+
if (!oSmartControl.isInitialised()) {
|
|
41
|
+
// In case Smart Chart/Table is not yet initialized
|
|
42
|
+
// listen to the initialize event & then initialize the wrapper
|
|
43
|
+
oSmartControl.attachEvent(sInitializationEvent, fnControlInitialized);
|
|
44
|
+
} else {
|
|
45
|
+
fnControlInitialized();
|
|
29
46
|
}
|
|
30
47
|
|
|
31
48
|
// creates a simple wrapper for a SmartTable or SmartChart (a control using UIState) (ignoring initialization and vm)
|
|
32
49
|
function getControlWrapper(oControl) {
|
|
33
50
|
var bIsApplying = false; // avoid forwarding change event when caused by us applying a state
|
|
34
51
|
function fnGetState() {
|
|
35
|
-
var
|
|
52
|
+
var oControlUiState = oControl.getUiState(); // unfortunately not serializable, but a managed object
|
|
53
|
+
var oStateUiState = {
|
|
54
|
+
oPresentationVariant: oControlUiState.getPresentationVariant(),
|
|
55
|
+
oSelectionVariant: oControlUiState.getSelectionVariant()
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Allow extension to add control-specific properties (e.g., tableSettings for SmartTable)
|
|
59
|
+
if (mExtensions && mExtensions.fnExtendGetUiState) {
|
|
60
|
+
mExtensions.fnExtendGetUiState(oStateUiState, oControlUiState);
|
|
61
|
+
}
|
|
62
|
+
|
|
36
63
|
return {
|
|
37
|
-
oUiState:
|
|
38
|
-
oPresentationVariant: oUiState.getPresentationVariant(),
|
|
39
|
-
oSelectionVariant: oUiState.getSelectionVariant(),
|
|
40
|
-
oTableSettings: oUiState.getTableSettings()
|
|
41
|
-
}
|
|
64
|
+
oUiState: oStateUiState
|
|
42
65
|
};
|
|
43
66
|
}
|
|
44
67
|
|
|
@@ -53,15 +76,20 @@ sap.ui.define([
|
|
|
53
76
|
bIsApplying = true;
|
|
54
77
|
// don't create UiState (managed object) from scratch, but fetch it from control and only apply known properties from state - thus, if any other properties would be added, we don't
|
|
55
78
|
// interfere with them
|
|
56
|
-
var
|
|
79
|
+
var oControlUiState = oControl.getUiState();
|
|
57
80
|
if (
|
|
58
|
-
|
|
59
|
-
oControl.getVariantManagement().getModified() && oControl.getVariantManagement().getStandardVariantKey() ===
|
|
81
|
+
oControlUiState.getProperty("variantName") === "" ||
|
|
82
|
+
oControl.getVariantManagement().getModified() && oControl.getVariantManagement().getStandardVariantKey() === oControlUiState.getProperty("variantName")
|
|
60
83
|
){
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
84
|
+
oControlUiState.setPresentationVariant(oState.oUiState.oPresentationVariant);
|
|
85
|
+
oControlUiState.setSelectionVariant(oState.oUiState.oSelectionVariant);
|
|
86
|
+
|
|
87
|
+
// Allow extension to set control-specific properties (e.g., tableSettings for SmartTable)
|
|
88
|
+
if (mExtensions && mExtensions.fnExtendSetUiState) {
|
|
89
|
+
mExtensions.fnExtendSetUiState(oState.oUiState, oControlUiState);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
oControl.setUiState(oControlUiState);
|
|
65
93
|
}
|
|
66
94
|
bIsApplying = false;
|
|
67
95
|
} else {
|
|
@@ -88,76 +116,58 @@ sap.ui.define([
|
|
|
88
116
|
setState: fnSetState,
|
|
89
117
|
getLocalId: fnGetLocalId,
|
|
90
118
|
bVMConnection: oControl && oControl.getSmartVariant && !!oControl.getSmartVariant(),
|
|
91
|
-
attachStateChanged: fnAttachStateChanged
|
|
119
|
+
attachStateChanged: fnAttachStateChanged,
|
|
120
|
+
onAfterVariantInitialise: oVariantManagementInitializedResolve
|
|
92
121
|
};
|
|
93
122
|
}
|
|
94
123
|
|
|
95
124
|
function fnGetState() {
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// or VariantManagement is not enabled.
|
|
100
|
-
return oVariantManagementStateWrapper.getState();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (oSmartControlStateWrapper && !bVariantManagementActive) {
|
|
104
|
-
// VariantManagement is not turned on & SmartControlStateWrapper instance
|
|
105
|
-
return oSmartControlStateWrapper.getState();
|
|
106
|
-
}
|
|
125
|
+
if (oVariantManagementStateWrapper) {
|
|
126
|
+
// Variant management is active
|
|
127
|
+
return oVariantManagementStateWrapper.getState();
|
|
107
128
|
}
|
|
108
129
|
|
|
109
|
-
//
|
|
110
|
-
return
|
|
130
|
+
// No variant management - return control state directly
|
|
131
|
+
return oSmartControlStateWrapper.getState();
|
|
111
132
|
}
|
|
112
133
|
|
|
113
134
|
function fnSetState(oState) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// map legacy states - before separating VM state from state of managed control, inner state information
|
|
117
|
-
// (presentation variant and selection variant) were put as oUiState on the same level as VM state
|
|
118
|
-
// information (variant id and dirty indicator), now they are contained in map managedControlStates
|
|
119
|
-
if (oState){
|
|
120
|
-
if (oState.oUiState && !oState.managedControlStates) {
|
|
121
|
-
oState.managedControlStates = Object.create(null);
|
|
122
|
-
oState.managedControlStates[oSmartControlStateWrapper.getLocalId()] = {oUiState: oState.oUiState};
|
|
123
|
-
}
|
|
124
|
-
if (oState.bVariantModified !== undefined) {
|
|
125
|
-
oState.modified = oState.bVariantModified;
|
|
126
|
-
}
|
|
127
|
-
if (oState.sVariantId !== undefined) {
|
|
128
|
-
oState.variantId = oState.sVariantId;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
135
|
+
if (!oState) {
|
|
136
|
+
// If no state provided, set standard variant on control
|
|
132
137
|
if (bVariantManagementActive) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
oVariantManagementStateWrapper.setState(oState);
|
|
139
|
+
} else {
|
|
140
|
+
oSmartControlStateWrapper.setState(oState);
|
|
136
141
|
}
|
|
137
|
-
|
|
138
|
-
// SmartTable/Chart shall be used
|
|
139
|
-
oSmartControlStateWrapper.setState(oPreliminaryState);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function fnSetControl(oControl) {
|
|
144
|
-
oSmartControl = oControl;
|
|
145
|
-
oSmartControlStateWrapper = getControlWrapper(oSmartControl);
|
|
146
|
-
if (!oSmartControl.isInitialised()) {
|
|
147
|
-
// In case Smart Chart/Table is not yet initialized
|
|
148
|
-
// listen to the initialize event & then resolve the control
|
|
149
|
-
oSmartControl.attachEvent(sInitializationEvent, fnControlInitialized);
|
|
150
142
|
return;
|
|
151
143
|
}
|
|
152
144
|
|
|
153
|
-
|
|
145
|
+
// Map legacy states - before separating VM state from state of managed control, inner state information
|
|
146
|
+
// (presentation variant and selection variant) were put as oUiState on the same level as VM state
|
|
147
|
+
// information (variant id and dirty indicator), now they are contained in map managedControlStates
|
|
148
|
+
if (oState.oUiState && !oState.managedControlStates) {
|
|
149
|
+
oState.managedControlStates = Object.create(null);
|
|
150
|
+
oState.managedControlStates[oSmartControlStateWrapper.getLocalId()] = {oUiState: oState.oUiState};
|
|
151
|
+
}
|
|
152
|
+
if (oState.bVariantModified !== undefined) {
|
|
153
|
+
oState.modified = oState.bVariantModified;
|
|
154
|
+
}
|
|
155
|
+
if (oState.sVariantId !== undefined) {
|
|
156
|
+
oState.variantId = oState.sVariantId;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (bVariantManagementActive) {
|
|
160
|
+
// In case VariantManagement is configured
|
|
161
|
+
oVariantManagementStateWrapper.setState(oState);
|
|
162
|
+
} else {
|
|
163
|
+
// SmartTable/Chart shall be used
|
|
164
|
+
oSmartControlStateWrapper.setState(oState);
|
|
165
|
+
}
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
function fnControlInitialized() {
|
|
157
|
-
bSmartControlInitialized = true;
|
|
158
|
-
|
|
159
169
|
// deal with VM
|
|
160
|
-
// 3
|
|
170
|
+
// 3 possibilities with respect to VM
|
|
161
171
|
// a) no VM (relevant for this control) at all
|
|
162
172
|
// b) control managed as part of page wide variant management
|
|
163
173
|
// c) control creates own VM
|
|
@@ -181,39 +191,35 @@ sap.ui.define([
|
|
|
181
191
|
oVariantManagementStateWrapper = oFactory.getControlStateWrapper(oVariantManagementControl, {
|
|
182
192
|
managedControlWrappers: [ oSmartControlStateWrapper ]
|
|
183
193
|
});
|
|
184
|
-
|
|
194
|
+
fnResolveReady();
|
|
185
195
|
} else {
|
|
186
|
-
//
|
|
187
|
-
// also initialized
|
|
196
|
+
// Wait for VariantManagement to be initialized
|
|
188
197
|
oSmartControl.attachAfterVariantInitialise(fnControlInitialized);
|
|
189
198
|
}
|
|
190
|
-
|
|
191
|
-
|
|
199
|
+
} else {
|
|
200
|
+
// No variant management or page-level variant management - ready immediately
|
|
201
|
+
fnResolveReady();
|
|
192
202
|
}
|
|
193
|
-
// There is no VariantManagement configured for this SmartChart/SmartTable
|
|
194
|
-
oControlAssignedResolve(oSmartControl);
|
|
195
203
|
}
|
|
196
204
|
|
|
197
205
|
function fnAttachStateChanged(fnHandler) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
|
|
206
|
+
if (bVariantManagementActive) {
|
|
207
|
+
oVariantManagementStateWrapper.attachStateChanged(fnHandler);
|
|
208
|
+
} else {
|
|
204
209
|
oSmartControlStateWrapper.attachStateChanged(fnHandler);
|
|
205
|
-
|
|
206
|
-
});
|
|
210
|
+
}
|
|
207
211
|
}
|
|
208
212
|
|
|
209
213
|
return {
|
|
210
214
|
getState: fnGetState,
|
|
211
215
|
setState: fnSetState,
|
|
212
|
-
setControl: fnSetControl,
|
|
213
216
|
attachStateChanged: fnAttachStateChanged,
|
|
214
|
-
bVMConnection: oSmartControl && oSmartControl.getSmartVariant && !!oSmartControl.getSmartVariant()
|
|
217
|
+
bVMConnection: oSmartControl && oSmartControl.getSmartVariant && !!oSmartControl.getSmartVariant(),
|
|
218
|
+
oVariantManagementInitializedPromise: oVariantManagementInitializedPromise,
|
|
219
|
+
onAfterVariantInitialise: oVariantManagementInitializedResolve,
|
|
220
|
+
oReadyPromise: oReadyPromise
|
|
215
221
|
};
|
|
216
222
|
}
|
|
217
223
|
|
|
218
224
|
return SmartTableChartCommon;
|
|
219
|
-
});
|
|
225
|
+
});
|
|
@@ -2,10 +2,29 @@ sap.ui.define([
|
|
|
2
2
|
"sap/suite/ui/generic/template/genericUtilities/controlStateWrapperFactory/SmartTableChartCommon"
|
|
3
3
|
], function(SmartTableChartCommon) {
|
|
4
4
|
"use strict";
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Constructor for SmartTableWrapper
|
|
8
|
+
* @param {sap.ui.comp.smarttable.SmartTable} oSmartTable - The SmartTable control
|
|
9
|
+
* @param {object} oController - The controller instance
|
|
10
|
+
* @param {object} oFactory - The ControlStateWrapperFactory instance
|
|
11
|
+
* @returns {object} Wrapper object for SmartTable
|
|
12
|
+
*/
|
|
6
13
|
function SmartTableWrapper(oSmartTable, oController, oFactory){
|
|
7
|
-
|
|
14
|
+
// SmartTable extends SmartTableChartCommon with tableSettings support
|
|
15
|
+
return new SmartTableChartCommon(oSmartTable, oController, oFactory, "initialise", {
|
|
16
|
+
// Extension to add tableSettings to the state
|
|
17
|
+
fnExtendGetUiState: function(oStateUiState, oControlUiState) {
|
|
18
|
+
oStateUiState.oTableSettings = oControlUiState.getTableSettings();
|
|
19
|
+
},
|
|
20
|
+
// Extension to apply tableSettings from the state
|
|
21
|
+
fnExtendSetUiState: function(oStateUiState, oControlUiState) {
|
|
22
|
+
if (oStateUiState.oTableSettings) {
|
|
23
|
+
oControlUiState.setTableSettings(oStateUiState.oTableSettings);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
8
27
|
}
|
|
9
28
|
|
|
10
29
|
return SmartTableWrapper;
|
|
11
|
-
});
|
|
30
|
+
});
|
|
@@ -4,18 +4,16 @@ sap.ui.define([
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Constructor for SmartVariantManagementWrapper
|
|
7
|
-
* @param {sap.ui.comp.smartvariants.SmartVariantManagement}
|
|
8
|
-
* or the Id of control for which this wrapper is created
|
|
7
|
+
* @param {sap.ui.comp.smartvariants.SmartVariantManagement} oControl - The SmartVariantManagement control
|
|
9
8
|
* @param {object} oController - the controller of the current component
|
|
10
9
|
* @param {object} oFactory - the controlStateWrapperFactory
|
|
11
10
|
* @param {object} mParams
|
|
12
11
|
* @param {array} mParams.managedControlWrappers - array of controlStateWrappers for controls handled by the SVM
|
|
13
|
-
*
|
|
14
|
-
* @param {Object} mParams.dynamicPageWrapper - dynamicPageWrapper instance handled by SVM
|
|
12
|
+
* @param {object} mParams.smartFilterBarWrapper - explicit reference to SmartFilterBarWrapper for special handling
|
|
15
13
|
* @returns {object}
|
|
16
14
|
*/
|
|
17
15
|
|
|
18
|
-
function SmartVariantManagementWrapper(
|
|
16
|
+
function SmartVariantManagementWrapper(oControl, oController, oFactory, mParams) {
|
|
19
17
|
// Special handling of SmartFilterBarWrapper for several reasons:
|
|
20
18
|
// - Suppress selection when restoring a variant. Selection is solely triggered according to information in appState. Otherwise, erroneous selection could be triggered in
|
|
21
19
|
// a few situations:
|
|
@@ -26,14 +24,10 @@ sap.ui.define([
|
|
|
26
24
|
// - Store and restore extension state (extension implemented in SFB instead of SVM, which would be more appropriate from architectural point of view)
|
|
27
25
|
// flag to control whether we are currently in the process of applying a state to suppress the event to inform about a new state´
|
|
28
26
|
// only needed when setting the variant itself - for managed controls, their wrappers should avoid firing the event themselves
|
|
29
|
-
var oSmartVariantManagement
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (typeof vTarget !== "string") {
|
|
35
|
-
fnSetControl(vTarget);
|
|
36
|
-
}
|
|
27
|
+
var oSmartVariantManagement = oControl;
|
|
28
|
+
var oPreliminaryState;
|
|
29
|
+
var bIsApplyingVariant = false;
|
|
30
|
+
var bAllControlsInitialized = false;
|
|
37
31
|
|
|
38
32
|
// Handles the state of the variant management itself (i.e. which variant is selected and whether it's dirty), including the state of the managed controls.
|
|
39
33
|
// Is responsible esp. to restore this state with correct dependency resp. in correct order
|
|
@@ -50,69 +44,74 @@ sap.ui.define([
|
|
|
50
44
|
// For these controls, a real user changes are already handled by the direct connection. On the other hand, these controls also fire their change events, if their state is
|
|
51
45
|
// changed from SVM (by the same connection) - setting variant dirty here would be wrong.
|
|
52
46
|
mParams.managedControlWrappers.forEach(function(oWrapper){
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
47
|
+
(oWrapper.oVMConnectionPromise || Promise.resolve(oWrapper.bVMConnection)).then(function(bVMConnection) {
|
|
48
|
+
if (!bVMConnection) {
|
|
49
|
+
oWrapper.attachStateChanged(function(){
|
|
50
|
+
oSmartVariantManagement.currentVariantSetModified(true);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
});
|
|
58
54
|
});
|
|
59
55
|
|
|
56
|
+
// Get SmartFilterBarWrapper explicitly from params.
|
|
57
|
+
// This connection is needed because SmartFilterBar provides special callbacks to store/restore state
|
|
58
|
+
// for controls that don't have a direct variant management connection (bVMConnection = false), such as:
|
|
59
|
+
// - Extension filters (custom filters added via app or adaptation extensions)
|
|
60
|
+
// - Multiple views state (selected tab in multi-table/chart scenarios)
|
|
61
|
+
// These controls need their state saved/restored with variants via the SFB's beforeVariantFetch/afterVariantLoad events.
|
|
62
|
+
var oSmartFilterBarWrapper = mParams.smartFilterBarWrapper;
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
function fnSetControl(oControl) {
|
|
63
|
-
oSmartVariantManagement = oControl;
|
|
64
|
-
fnResolveControlAssigned(oSmartVariantManagement);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
var oSmartFilterBarWrapper = mParams.managedControlWrappers.find(function(oWrapper){
|
|
68
|
-
return oWrapper.setSVMWrapperCallbacks;
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// provide callbacks needed for SFB wrapper to store/restore extnesion state with variant
|
|
64
|
+
// Provide callbacks needed for SFB wrapper to store/restore extension state with variant
|
|
72
65
|
if (oSmartFilterBarWrapper){
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
66
|
+
// Build array with wrapper + bVMConnection info once all wrappers are ready
|
|
67
|
+
Promise.all(mParams.managedControlWrappers.map(function(oWrapper){
|
|
68
|
+
return (oWrapper.oVMConnectionPromise || Promise.resolve(oWrapper.bVMConnection)).then(function(bVMConnection){
|
|
69
|
+
return {
|
|
70
|
+
wrapper: oWrapper,
|
|
71
|
+
bVMConnection: bVMConnection
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
})).then(function(aWrapperInfo) {
|
|
75
|
+
oSmartFilterBarWrapper.setSVMWrapperCallbacks({
|
|
76
|
+
getManagedControlStates: function(){
|
|
77
|
+
var mManagedControlStates = Object.create(null);
|
|
78
|
+
aWrapperInfo.forEach(function(oInfo){
|
|
79
|
+
if (!oInfo.bVMConnection) {
|
|
80
|
+
mManagedControlStates[oInfo.wrapper.getLocalId()] = oInfo.wrapper.getState();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
return mManagedControlStates;
|
|
84
|
+
},
|
|
85
|
+
setManagedControlStates: function(oState){
|
|
86
|
+
aWrapperInfo.forEach(function(oInfo){
|
|
87
|
+
if (!oInfo.bVMConnection) {
|
|
88
|
+
oInfo.wrapper.setState(oState[oInfo.wrapper.getLocalId()]);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
// Create promise that resolves when all managed controls' variant management is ready
|
|
97
|
+
// This ensures getState() can query controls even if setState() is never called (e.g., app starts from scratch)
|
|
98
|
+
var oAllControlsInitializedPromise = Promise.all(
|
|
99
|
+
mParams.managedControlWrappers.map(function(oWrapper){
|
|
100
|
+
return oWrapper.oVariantManagementInitializedPromise || Promise.resolve();
|
|
101
|
+
})
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
// Set flag when all controls are initialized
|
|
105
|
+
oAllControlsInitializedPromise.then(function() {
|
|
106
|
+
bAllControlsInitialized = true;
|
|
107
|
+
});
|
|
108
|
+
|
|
96
109
|
// Wrapper is intended to set a state to the ui, but not to trigger a selection (which should happen only after all (relevant) parts of ui state is set to the correct state
|
|
97
110
|
// are set correct. Therefore, setting variant from here should never trigger a selection.
|
|
98
111
|
function fnSetVariant(sVariantId){
|
|
99
112
|
if (oSmartFilterBarWrapper){
|
|
100
113
|
oSmartFilterBarWrapper.suppressSelection(true);
|
|
101
114
|
}
|
|
102
|
-
var sId = mParams.managedControlWrappers[0].getLocalId();
|
|
103
|
-
var oControl = oController.getView().byId(sId);
|
|
104
|
-
if (oControl && oControl.isA("sap.ui.comp.smarttable.SmartTable")) {
|
|
105
|
-
oControl.attachAfterVariantInitialise(function() {
|
|
106
|
-
//set currentVariantId only when sVariantId is not standard (as it might be overriding existing
|
|
107
|
-
//different currentVariantId) or smartTable's (oControl) currentVariantId is not equal to sVariantId.
|
|
108
|
-
if (sVariantId !== '*standard*' && sVariantId !== '') {
|
|
109
|
-
if (oControl.getCurrentVariantId && oControl.getCurrentVariantId() !== sVariantId) {
|
|
110
|
-
oControl.setCurrentVariantId(sVariantId);
|
|
111
|
-
}
|
|
112
|
-
oSmartVariantManagement.setModified(false);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
115
|
oSmartVariantManagement.setCurrentVariantId(sVariantId);
|
|
117
116
|
if (oSmartFilterBarWrapper){
|
|
118
117
|
oSmartFilterBarWrapper.suppressSelection(false);
|
|
@@ -133,7 +132,11 @@ sap.ui.define([
|
|
|
133
132
|
}
|
|
134
133
|
|
|
135
134
|
function getState() {
|
|
136
|
-
if
|
|
135
|
+
// Return preliminary state if managed controls not fully initialized
|
|
136
|
+
// Note: If early getState() calls become an issue (controls not initialized yet), we could enhance this to:
|
|
137
|
+
// - Store only SVM-specific data (variantId, modified) in oPreliminaryState
|
|
138
|
+
// - Always query managed control wrappers directly (they handle their own preliminary state via PreliminaryWrapper)
|
|
139
|
+
if (!bAllControlsInitialized) {
|
|
137
140
|
return oPreliminaryState;
|
|
138
141
|
}
|
|
139
142
|
|
|
@@ -150,22 +153,23 @@ sap.ui.define([
|
|
|
150
153
|
|
|
151
154
|
function setState(oState) {
|
|
152
155
|
oPreliminaryState = oState;
|
|
153
|
-
|
|
156
|
+
|
|
157
|
+
// Wait for all managed controls to be initialized before applying state
|
|
158
|
+
oAllControlsInitializedPromise.then(function() {
|
|
159
|
+
bIsApplyingVariant = true;
|
|
154
160
|
if (!oPreliminaryState) {
|
|
155
161
|
// if no state is provided set default variant (not modified)
|
|
156
162
|
// use cases:
|
|
157
163
|
// - LR: if appStateKey in the URL that cannot be read
|
|
158
164
|
// - OP: if switching to different object instance (in discovery mode always, in persistency mode when page was not shown)
|
|
159
165
|
fnSetVariant(oSmartVariantManagement.getDefaultVariantId());
|
|
160
|
-
|
|
161
|
-
}
|
|
162
|
-
if (oPreliminaryState.modified) {
|
|
166
|
+
} else if (oPreliminaryState.modified) {
|
|
163
167
|
// Special logic according to UX: If variant was modified anyway, there's no benefit for the user to see the name (but it could be confusing), so standard variant (not default!) should be
|
|
164
168
|
// set (which is achieved by empty string)
|
|
165
169
|
fnSetVariant("");
|
|
170
|
+
oSmartVariantManagement.currentVariantSetModified(true);
|
|
166
171
|
// Usually restoring the state of any of the managed controls should mark the variant as dirty, but there might be edge cases (state from an old release not containing information for any
|
|
167
172
|
// managed control now relevant), so to be on the safe side, we set modified=true explicitly.
|
|
168
|
-
oSmartVariantManagement.currentVariantSetModified(true);
|
|
169
173
|
fnSetManagedControlStates(oPreliminaryState);
|
|
170
174
|
} else {
|
|
171
175
|
fnSetVariant(oPreliminaryState.variantId);
|
|
@@ -183,6 +187,7 @@ sap.ui.define([
|
|
|
183
187
|
}
|
|
184
188
|
}
|
|
185
189
|
}
|
|
190
|
+
bIsApplyingVariant = false;
|
|
186
191
|
});
|
|
187
192
|
}
|
|
188
193
|
|
|
@@ -190,26 +195,30 @@ sap.ui.define([
|
|
|
190
195
|
// state of variant management itself can be changed directly (user selects a different variant or stores current state as (new) variant), or indirectly (user changes some
|
|
191
196
|
// data of a control managed by VM, e.g. some filter values in SFB)
|
|
192
197
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
198
|
+
// Wrap the handler to suppress events when applying a variant
|
|
199
|
+
var fnSuppressibleHandler = function() {
|
|
200
|
+
if (!bIsApplyingVariant) {
|
|
201
|
+
fnHandler();
|
|
202
|
+
}
|
|
203
|
+
};
|
|
196
204
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
// This is one of the possible ways to get into a state with a clean variant with execute on select, but no data loaded - see also comment to identify SFB wrapper.
|
|
200
|
-
oSmartVariantManagement.attachAfterSave(fnHandler);
|
|
205
|
+
// state change when user selects a different variant
|
|
206
|
+
oSmartVariantManagement.attachSelect(fnSuppressibleHandler);
|
|
201
207
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
208
|
+
// when user saves current state as a new variant, this is also a state change (as the variant id is part of the state)
|
|
209
|
+
// note: Even if new (SFB) variant is marked as execute on select, and currently no data is selected, no need to select data here (and thus also not to collapse header).
|
|
210
|
+
// This is one of the possible ways to get into a state with a clean variant with execute on select, but no data loaded - see also comment to identify SFB wrapper.
|
|
211
|
+
oSmartVariantManagement.attachAfterSave(fnSuppressibleHandler);
|
|
212
|
+
|
|
213
|
+
// any change of a managed control is state change
|
|
214
|
+
mParams.managedControlWrappers.forEach(function(oWrapper){
|
|
215
|
+
oWrapper.attachStateChanged(fnSuppressibleHandler);
|
|
206
216
|
});
|
|
207
217
|
}
|
|
208
218
|
|
|
209
219
|
return {
|
|
210
220
|
getState : getState,
|
|
211
221
|
setState : setState,
|
|
212
|
-
setControl: fnSetControl,
|
|
213
222
|
attachStateChanged : attachStateChanged
|
|
214
223
|
};
|
|
215
224
|
}
|
|
@@ -959,7 +959,7 @@ sap.ui.define([
|
|
|
959
959
|
* @public
|
|
960
960
|
* @extends sap.ui.core.UIComponent
|
|
961
961
|
* @author SAP SE
|
|
962
|
-
* @version 1.145.
|
|
962
|
+
* @version 1.145.2
|
|
963
963
|
* @name sap.suite.ui.generic.template.lib.AppComponent
|
|
964
964
|
*/
|
|
965
965
|
var oAppComponent = UIComponent.extend("sap.suite.ui.generic.template.lib.AppComponent", {
|
|
@@ -3213,7 +3213,7 @@ sap.ui.define(["sap/ui/base/Object",
|
|
|
3213
3213
|
* @param {sap.suite.ui.generic.template.lib.AppComponent} oAppComponent The AppComponent instance
|
|
3214
3214
|
* @public
|
|
3215
3215
|
* @extends sap.ui.base.Object
|
|
3216
|
-
* @version 1.145.
|
|
3216
|
+
* @version 1.145.2
|
|
3217
3217
|
* @since 1.30.0
|
|
3218
3218
|
* @alias sap.suite.ui.generic.template.lib.NavigationController
|
|
3219
3219
|
*/
|