@sapui5/sap.fe.core 1.95.0 → 1.98.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/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +3 -3
- package/src/sap/fe/core/AppComponent.js +9 -44
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/BusyLocker.js +13 -1
- package/src/sap/fe/core/CommonUtils.js +129 -219
- package/src/sap/fe/core/ExtensionAPI.js +14 -6
- package/src/sap/fe/core/PageController.js +9 -35
- package/src/sap/fe/core/RouterProxy.js +79 -75
- package/src/sap/fe/core/Synchronization.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +16 -7
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TransactionHelper.js +183 -65
- package/src/sap/fe/core/actions/draft.js +50 -23
- package/src/sap/fe/core/actions/messageHandling.js +86 -7
- package/src/sap/fe/core/actions/nonDraft.js +1 -1
- package/src/sap/fe/core/actions/operations.js +75 -33
- package/src/sap/fe/core/actions/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +276 -122
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +90 -46
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +234 -232
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +539 -209
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +550 -213
- package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +227 -103
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -7
- package/src/sap/fe/core/controllerextensions/Paginator.js +38 -12
- package/src/sap/fe/core/controllerextensions/Placeholder.js +16 -19
- package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +20 -7
- package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +19 -17
- package/src/sap/fe/core/controllerextensions/ViewState.js +54 -9
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +40 -34
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +110 -109
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
- package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
- package/src/sap/fe/core/controls/FilterBar.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
- package/src/sap/fe/core/converters/ConverterContext.js +13 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
- package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +920 -882
- package/src/sap/fe/core/converters/MetaModelConverter.ts +829 -853
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -4
- package/src/sap/fe/core/converters/annotations/DataField.ts +53 -3
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +83 -48
- package/src/sap/fe/core/converters/controls/Common/Action.js +15 -3
- package/src/sap/fe/core/converters/controls/Common/Action.ts +12 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +68 -21
- package/src/sap/fe/core/converters/controls/Common/Form.ts +60 -16
- package/src/sap/fe/core/converters/controls/Common/KPI.js +331 -248
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +355 -287
- package/src/sap/fe/core/converters/controls/Common/Table.js +426 -332
- package/src/sap/fe/core/converters/controls/Common/Table.ts +516 -383
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
- package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/converters/helpers/ID.js +9 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -2
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +34 -4
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -7
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
- package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
- package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
- package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +64 -1
- package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
- package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
- package/src/sap/fe/core/library.js +28 -2
- package/src/sap/fe/core/library.support.js +10 -4
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +67 -3
- package/src/sap/fe/core/messagebundle_ar.properties +40 -3
- package/src/sap/fe/core/messagebundle_bg.properties +40 -3
- package/src/sap/fe/core/messagebundle_ca.properties +41 -4
- package/src/sap/fe/core/messagebundle_cs.properties +41 -4
- package/src/sap/fe/core/messagebundle_cy.properties +40 -3
- package/src/sap/fe/core/messagebundle_da.properties +40 -3
- package/src/sap/fe/core/messagebundle_de.properties +40 -3
- package/src/sap/fe/core/messagebundle_el.properties +40 -3
- package/src/sap/fe/core/messagebundle_en.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +46 -2
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -0
- package/src/sap/fe/core/messagebundle_es.properties +40 -3
- package/src/sap/fe/core/messagebundle_es_MX.properties +41 -4
- package/src/sap/fe/core/messagebundle_et.properties +40 -3
- package/src/sap/fe/core/messagebundle_fi.properties +40 -3
- package/src/sap/fe/core/messagebundle_fr.properties +41 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +40 -3
- package/src/sap/fe/core/messagebundle_hi.properties +40 -3
- package/src/sap/fe/core/messagebundle_hr.properties +40 -3
- package/src/sap/fe/core/messagebundle_hu.properties +41 -4
- package/src/sap/fe/core/messagebundle_id.properties +42 -5
- package/src/sap/fe/core/messagebundle_it.properties +40 -3
- package/src/sap/fe/core/messagebundle_iw.properties +40 -3
- package/src/sap/fe/core/messagebundle_ja.properties +49 -12
- package/src/sap/fe/core/messagebundle_kk.properties +40 -3
- package/src/sap/fe/core/messagebundle_ko.properties +40 -3
- package/src/sap/fe/core/messagebundle_lt.properties +40 -3
- package/src/sap/fe/core/messagebundle_lv.properties +40 -3
- package/src/sap/fe/core/messagebundle_ms.properties +40 -3
- package/src/sap/fe/core/messagebundle_nl.properties +40 -3
- package/src/sap/fe/core/messagebundle_no.properties +40 -3
- package/src/sap/fe/core/messagebundle_pl.properties +40 -3
- package/src/sap/fe/core/messagebundle_pt.properties +42 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +40 -3
- package/src/sap/fe/core/messagebundle_ro.properties +40 -3
- package/src/sap/fe/core/messagebundle_ru.properties +40 -3
- package/src/sap/fe/core/messagebundle_sh.properties +40 -3
- package/src/sap/fe/core/messagebundle_sk.properties +40 -3
- package/src/sap/fe/core/messagebundle_sl.properties +40 -3
- package/src/sap/fe/core/messagebundle_sv.properties +41 -4
- package/src/sap/fe/core/messagebundle_th.properties +40 -3
- package/src/sap/fe/core/messagebundle_tr.properties +40 -3
- package/src/sap/fe/core/messagebundle_uk.properties +40 -3
- package/src/sap/fe/core/messagebundle_vi.properties +40 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +40 -3
- package/src/sap/fe/core/messagebundle_zh_TW.properties +40 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -328
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -37
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +13 -33
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
- package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
- package/src/sap/fe/core/templating/FilterHelper.js +10 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +47 -107
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -72
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
/* eslint-disable no-alert */
|
|
6
6
|
sap.ui.define(
|
|
@@ -128,6 +128,7 @@ sap.ui.define(
|
|
|
128
128
|
this._bDisableOnHashChange = false;
|
|
129
129
|
this._bIgnoreRestore = false;
|
|
130
130
|
this._bCleanedRestore = false;
|
|
131
|
+
this._bForceFocus = true; // Trigger the focus mechanism for the first view displayed by the app
|
|
131
132
|
},
|
|
132
133
|
|
|
133
134
|
destroy: function() {
|
|
@@ -158,6 +159,14 @@ sap.ui.define(
|
|
|
158
159
|
return this._oRouter.getHashChanger().getHash();
|
|
159
160
|
},
|
|
160
161
|
|
|
162
|
+
isFocusForced: function() {
|
|
163
|
+
return this._bForceFocus;
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
setFocusForced: function(bForced) {
|
|
167
|
+
this._bForceFocus = bForced;
|
|
168
|
+
},
|
|
169
|
+
|
|
161
170
|
/**
|
|
162
171
|
* Resets the internal variable sIAppStateKey.
|
|
163
172
|
*
|
|
@@ -180,42 +189,31 @@ sap.ui.define(
|
|
|
180
189
|
* @param {string} sHash Hash to be navigated to
|
|
181
190
|
* @param {boolean} bPreserveHistory If set to true, non-ancestor entries in history will be retained
|
|
182
191
|
* @param {boolean} bDisablePreservationCache If set to true, cache preservation mechanism is disabled for the current navigation
|
|
183
|
-
* @
|
|
192
|
+
* @param {boolean} bForceFocus If set to true, the logic to set the focus once the navigation is finalized will be triggered (onPageReady)
|
|
193
|
+
* @returns {Promise} Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
|
|
184
194
|
* @ui5-restricted
|
|
185
195
|
*/
|
|
186
|
-
navToHash: function(sHash, bPreserveHistory, bDisablePreservationCache) {
|
|
196
|
+
navToHash: function(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus) {
|
|
187
197
|
var that = this;
|
|
188
198
|
|
|
189
199
|
if (this._oRouteMatchSynchronization) {
|
|
190
200
|
return this._oRouteMatchSynchronization.waitFor().then(function() {
|
|
191
201
|
that._oRouteMatchSynchronization = null;
|
|
192
|
-
return that._internalNavToHash(sHash, bPreserveHistory, bDisablePreservationCache);
|
|
202
|
+
return that._internalNavToHash(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus);
|
|
193
203
|
});
|
|
194
204
|
} else {
|
|
195
205
|
if (this._bActivateRouteMatchSynchro) {
|
|
196
206
|
this.waitForRouteMatchBeforeNavigation();
|
|
197
207
|
}
|
|
198
|
-
return that._internalNavToHash(sHash, bPreserveHistory, bDisablePreservationCache);
|
|
208
|
+
return that._internalNavToHash(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus);
|
|
199
209
|
}
|
|
200
210
|
},
|
|
201
211
|
|
|
202
|
-
_internalNavToHash: function(sHash, bPreserveHistory, bDisablePreservationCache) {
|
|
203
|
-
var that = this,
|
|
204
|
-
sLastFocusControlId = sap.ui.getCore().getCurrentFocusedControlId(),
|
|
205
|
-
sLastFocusInfo =
|
|
206
|
-
sLastFocusControlId && sap.ui.getCore().byId(sLastFocusControlId)
|
|
207
|
-
? sap.ui
|
|
208
|
-
.getCore()
|
|
209
|
-
.byId(sLastFocusControlId)
|
|
210
|
-
.getFocusInfo()
|
|
211
|
-
: null,
|
|
212
|
-
shashBeforeRoutechanged = this.getHash();
|
|
213
|
-
|
|
212
|
+
_internalNavToHash: function(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus) {
|
|
214
213
|
// Add the app state in the hash if needed
|
|
215
214
|
if (this.fclEnabled && this.sIAppStateKey && !findAppStateInHash(sHash)) {
|
|
216
215
|
sHash = setAppStateInHash(sHash, this.sIAppStateKey);
|
|
217
216
|
}
|
|
218
|
-
var oNewState = this._extractStateFromHash(sHash);
|
|
219
217
|
|
|
220
218
|
if (!this.checkHashWithGuard(sHash)) {
|
|
221
219
|
if (!this.oResourceBundle) {
|
|
@@ -226,15 +224,28 @@ sap.ui.define(
|
|
|
226
224
|
// in the EditFlow we rely on a UI5 mechanism that displays a confirm dialog.
|
|
227
225
|
if (!confirm(this.oResourceBundle.getText("C_ROUTER_PROXY_SAPFE_EXIT_NOTSAVED_MESSAGE"))) {
|
|
228
226
|
// The user clicked on Cancel --> cancel navigation
|
|
229
|
-
return Promise.resolve();
|
|
227
|
+
return Promise.resolve(false);
|
|
230
228
|
}
|
|
231
229
|
this.bIsGuardCrossAllowed = true;
|
|
232
230
|
}
|
|
231
|
+
|
|
232
|
+
// In case the navigation will cause a new view to be displayed, we force the focus
|
|
233
|
+
// I.e. if the keys for the hash we're navigating to is a superset of the current hash keys.
|
|
234
|
+
var oNewState = this._extractStateFromHash(sHash);
|
|
235
|
+
if (!this._bForceFocus) {
|
|
236
|
+
// If the focus was already forced, keep it
|
|
237
|
+
var aCurrentHashKeys = this._extractKeysFromHash(this.getHash());
|
|
238
|
+
this._bForceFocus =
|
|
239
|
+
bForceFocus ||
|
|
240
|
+
(aCurrentHashKeys.length < oNewState.keys.length &&
|
|
241
|
+
aCurrentHashKeys.every(function(key, index) {
|
|
242
|
+
return key === oNewState.keys[index];
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
245
|
+
|
|
233
246
|
var oHistoryAction = this._pushNewState(oNewState, false, bPreserveHistory, bDisablePreservationCache);
|
|
234
247
|
|
|
235
|
-
return this._rebuildBrowserHistory(oHistoryAction, false)
|
|
236
|
-
that.storeFocusForHash(sLastFocusControlId, sLastFocusInfo, shashBeforeRoutechanged);
|
|
237
|
-
});
|
|
248
|
+
return this._rebuildBrowserHistory(oHistoryAction, false);
|
|
238
249
|
},
|
|
239
250
|
|
|
240
251
|
/**
|
|
@@ -258,34 +269,6 @@ sap.ui.define(
|
|
|
258
269
|
}
|
|
259
270
|
},
|
|
260
271
|
|
|
261
|
-
getFocusControlForCurrentHash: function() {
|
|
262
|
-
var sCurrenthash = this.getHash();
|
|
263
|
-
var oLastFocusedControl;
|
|
264
|
-
for (var i = this._oManagedHistory.length - 1; i >= 0; i--) {
|
|
265
|
-
if (sCurrenthash === this._oManagedHistory[i].hash) {
|
|
266
|
-
oLastFocusedControl = this._oManagedHistory[i].oLastFocusControl;
|
|
267
|
-
break;
|
|
268
|
-
} else {
|
|
269
|
-
this._oManagedHistory[i].oLastFocusControl = undefined;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return oLastFocusedControl;
|
|
274
|
-
},
|
|
275
|
-
|
|
276
|
-
storeFocusForHash: function(sLastFocusControlId, sLastFocusInfo, sHash) {
|
|
277
|
-
var oManagedhistory = this._oManagedHistory;
|
|
278
|
-
for (var i = 0; i < oManagedhistory.length; i++) {
|
|
279
|
-
if (sHash === oManagedhistory[i].hash) {
|
|
280
|
-
oManagedhistory[i].oLastFocusControl = {
|
|
281
|
-
controlId: sLastFocusControlId,
|
|
282
|
-
focusInfo: sLastFocusInfo
|
|
283
|
-
};
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
},
|
|
288
|
-
|
|
289
272
|
/**
|
|
290
273
|
* Navigates back in the history.
|
|
291
274
|
*
|
|
@@ -432,6 +415,24 @@ sap.ui.define(
|
|
|
432
415
|
this._bActivateRouteMatchSynchro = false;
|
|
433
416
|
},
|
|
434
417
|
|
|
418
|
+
_extractKeysFromHash: function(sHash) {
|
|
419
|
+
if (sHash === undefined) {
|
|
420
|
+
sHash = "";
|
|
421
|
+
}
|
|
422
|
+
var sHashNoParams = sHash.split("?")[0]; // remove params
|
|
423
|
+
var aTokens = sHashNoParams.split("/");
|
|
424
|
+
var aKeys = [];
|
|
425
|
+
|
|
426
|
+
aTokens.forEach(function(sToken) {
|
|
427
|
+
var regexKey = /[^\(\)]+\([^\(\)]+\)/; // abc(def)
|
|
428
|
+
if (regexKey.test(sToken)) {
|
|
429
|
+
aKeys.push(sToken.split("(")[0]);
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
return aKeys;
|
|
434
|
+
},
|
|
435
|
+
|
|
435
436
|
/**
|
|
436
437
|
* Builds a state from a hash.
|
|
437
438
|
*
|
|
@@ -441,22 +442,13 @@ sap.ui.define(
|
|
|
441
442
|
* @ui5-restricted
|
|
442
443
|
*/
|
|
443
444
|
_extractStateFromHash: function(sHash) {
|
|
444
|
-
var oState = {
|
|
445
|
-
keys: []
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
// Retrieve object keys
|
|
449
445
|
if (sHash === undefined) {
|
|
450
446
|
sHash = "";
|
|
451
447
|
}
|
|
452
|
-
|
|
453
|
-
var
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
if (regexKey.test(sToken)) {
|
|
457
|
-
oState.keys.push(sToken.split("(")[0]);
|
|
458
|
-
}
|
|
459
|
-
});
|
|
448
|
+
|
|
449
|
+
var oState = {
|
|
450
|
+
keys: this._extractKeysFromHash(sHash)
|
|
451
|
+
};
|
|
460
452
|
|
|
461
453
|
// Retrieve layout (if any)
|
|
462
454
|
var aLayout = sHash.match(new RegExp("\\?.*" + enumURLParams.LAYOUTPARAM + "=([^&]*)"));
|
|
@@ -518,7 +510,6 @@ sap.ui.define(
|
|
|
518
510
|
}
|
|
519
511
|
|
|
520
512
|
// 3. Then pop all states until we find an ancestor of the new state, or we find a state that need to be preserved
|
|
521
|
-
var oLastFocusControl;
|
|
522
513
|
var oLastRemovedItem;
|
|
523
514
|
while (this._oManagedHistory.length > 0) {
|
|
524
515
|
var oTopState = this._oManagedHistory[this._oManagedHistory.length - 1];
|
|
@@ -527,13 +518,11 @@ sap.ui.define(
|
|
|
527
518
|
this._compareCacheStates(oTopState, oNewState) !== enumState.ANCESTOR
|
|
528
519
|
) {
|
|
529
520
|
// The top state is not an ancestor of oNewState and is not preserved --> we can pop it
|
|
530
|
-
oLastFocusControl = oTopState.oLastFocusControl;
|
|
531
521
|
oLastRemovedItem = this._oManagedHistory.pop();
|
|
532
522
|
iPopCount++;
|
|
533
523
|
} else if (oTopState.preserved && removeAppStateInHash(oTopState.hash) === removeAppStateInHash(oNewState.hash)) {
|
|
534
524
|
// We try to add a state that is already in cache (due to preserved flag) but with a different iapp-state
|
|
535
525
|
// --> we should delete the previous entry (it will be later replaced by the new one) and stop popping
|
|
536
|
-
oLastFocusControl = oTopState.oLastFocusControl;
|
|
537
526
|
oLastRemovedItem = this._oManagedHistory.pop();
|
|
538
527
|
iPopCount++;
|
|
539
528
|
oNewState.preserved = true;
|
|
@@ -565,7 +554,6 @@ sap.ui.define(
|
|
|
565
554
|
}
|
|
566
555
|
|
|
567
556
|
// 5. Now we can push the state at the top of the internal history
|
|
568
|
-
oNewState.oLastFocusControl = oLastFocusControl;
|
|
569
557
|
var bHasSameHash = oLastRemovedItem && oNewState.hash === oLastRemovedItem.hash;
|
|
570
558
|
if (this._oManagedHistory.length === 0 || this._oManagedHistory[this._oManagedHistory.length - 1].hash !== oNewState.hash) {
|
|
571
559
|
this._oManagedHistory.push(oNewState);
|
|
@@ -619,12 +607,12 @@ sap.ui.define(
|
|
|
619
607
|
},
|
|
620
608
|
|
|
621
609
|
/**
|
|
622
|
-
*
|
|
610
|
+
* Synchronizes the browser history with the internal history of the routerProxy, and triggers a navigation if needed.
|
|
623
611
|
*
|
|
624
612
|
* @memberof sap.fe.core.RouterProxy
|
|
625
613
|
* @param {object} oHistoryAction Specifies the navigation action to be performed
|
|
626
|
-
* @param {boolean} bRebuildOnly `true` if
|
|
627
|
-
* @returns {Promise}
|
|
614
|
+
* @param {boolean} bRebuildOnly `true` if internal history is currently being rebuilt
|
|
615
|
+
* @returns {Promise} Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
|
|
628
616
|
* @ui5-restricted
|
|
629
617
|
* @final
|
|
630
618
|
*/
|
|
@@ -652,7 +640,7 @@ sap.ui.define(
|
|
|
652
640
|
}
|
|
653
641
|
|
|
654
642
|
that.bIsRebuildHistoryRunning = false;
|
|
655
|
-
resolve();
|
|
643
|
+
resolve(true); // a navigation occurred
|
|
656
644
|
}
|
|
657
645
|
|
|
658
646
|
// Async callbacks when navigating back, in order to let all notifications and events get processed
|
|
@@ -667,7 +655,7 @@ sap.ui.define(
|
|
|
667
655
|
function backAsync() {
|
|
668
656
|
window.removeEventListener("popstate", backAsync);
|
|
669
657
|
that.bIsRebuildHistoryRunning = false;
|
|
670
|
-
resolve();
|
|
658
|
+
resolve(true); // a navigation occurred
|
|
671
659
|
}
|
|
672
660
|
|
|
673
661
|
that._bIgnoreRestore = true;
|
|
@@ -677,14 +665,14 @@ sap.ui.define(
|
|
|
677
665
|
that._oRouter.getHashChanger().replaceHash(oTargetState.hash);
|
|
678
666
|
history.replaceState(Object.assign({ feLevel: newLevel }, history.state), "");
|
|
679
667
|
that.bIsRebuildHistoryRunning = false;
|
|
680
|
-
resolve();
|
|
668
|
+
resolve(true); // a navigation occurred
|
|
681
669
|
break;
|
|
682
670
|
|
|
683
671
|
case "append":
|
|
684
672
|
that._oRouter.getHashChanger().setHash(oTargetState.hash);
|
|
685
673
|
history.replaceState(Object.assign({ feLevel: newLevel }, history.state), "");
|
|
686
674
|
that.bIsRebuildHistoryRunning = false;
|
|
687
|
-
resolve();
|
|
675
|
+
resolve(true); // a navigation occurred
|
|
688
676
|
break;
|
|
689
677
|
|
|
690
678
|
case "back":
|
|
@@ -701,7 +689,7 @@ sap.ui.define(
|
|
|
701
689
|
default:
|
|
702
690
|
// No navigation
|
|
703
691
|
that.bIsRebuildHistoryRunning = false;
|
|
704
|
-
resolve();
|
|
692
|
+
resolve(false); // no navigation --> resolve to false
|
|
705
693
|
}
|
|
706
694
|
});
|
|
707
695
|
},
|
|
@@ -815,6 +803,22 @@ sap.ui.define(
|
|
|
815
803
|
return !sPrevHash || !that.checkHashWithGuard(sPrevHash);
|
|
816
804
|
}
|
|
817
805
|
return false;
|
|
806
|
+
},
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Checks if the last 2 entries in the history share the same context.
|
|
810
|
+
*
|
|
811
|
+
* @returns {boolean} `true` if they share the same context.
|
|
812
|
+
*/
|
|
813
|
+
checkIfBackHasSameContext: function() {
|
|
814
|
+
if (this._oManagedHistory.length < 2) {
|
|
815
|
+
return false;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
var oCurrentState = this._oManagedHistory[this._oManagedHistory.length - 1];
|
|
819
|
+
var oPreviousState = this._oManagedHistory[this._oManagedHistory.length - 2];
|
|
820
|
+
|
|
821
|
+
return oCurrentState.hash.split("?")[0] === oPreviousState.hash.split("?")[0];
|
|
818
822
|
}
|
|
819
823
|
});
|
|
820
824
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(
|
|
6
|
-
["sap/ui/core/UIComponent", "sap/fe/core/CommonUtils", "sap/base/Log"],
|
|
7
|
-
function(UIComponent, CommonUtils, Log) {
|
|
6
|
+
["sap/ui/core/UIComponent", "sap/fe/core/CommonUtils", "sap/ui/mdc/p13n/StateUtil", "sap/base/Log"],
|
|
7
|
+
function(UIComponent, CommonUtils, StateUtil, Log) {
|
|
8
8
|
"use strict";
|
|
9
9
|
|
|
10
10
|
var TemplateComponent = UIComponent.extend("sap.fe.core.TemplateComponent", {
|
|
@@ -12,7 +12,7 @@ sap.ui.define(
|
|
|
12
12
|
interfaces: ["sap.ui.core.IAsyncContentCreation"],
|
|
13
13
|
properties: {
|
|
14
14
|
/**
|
|
15
|
-
* OData
|
|
15
|
+
* Name of the OData entity set
|
|
16
16
|
*/
|
|
17
17
|
entitySet: {
|
|
18
18
|
type: "string",
|
|
@@ -93,6 +93,15 @@ sap.ui.define(
|
|
|
93
93
|
init: function() {
|
|
94
94
|
this.oAppComponent = CommonUtils.getAppComponent(this);
|
|
95
95
|
UIComponent.prototype.init.apply(this, arguments);
|
|
96
|
+
var oStateChangedHandler = function(oEvent) {
|
|
97
|
+
var oControl = oEvent.getParameter("control");
|
|
98
|
+
if (oControl.isA("sap.ui.mdc.Table") || oControl.isA("sap.ui.mdc.FilterBar")) {
|
|
99
|
+
var oMacroAPI = oControl.getParent();
|
|
100
|
+
oMacroAPI.fireStateChanged();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
StateUtil.detachStateChange(oStateChangedHandler);
|
|
104
|
+
StateUtil.attachStateChange(oStateChangedHandler);
|
|
96
105
|
},
|
|
97
106
|
|
|
98
107
|
// This method is called by UI5 core to access to the component containing the customizing configuration.
|
|
@@ -102,11 +111,11 @@ sap.ui.define(
|
|
|
102
111
|
return this.oAppComponent;
|
|
103
112
|
},
|
|
104
113
|
|
|
105
|
-
onPageReady: function(
|
|
114
|
+
onPageReady: function(mParameters) {
|
|
106
115
|
if (this.getRootControl() && this.getRootControl().getController() && this.getRootControl().getController().onPageReady) {
|
|
107
116
|
this.getRootControl()
|
|
108
117
|
.getController()
|
|
109
|
-
.onPageReady(
|
|
118
|
+
.onPageReady(mParameters);
|
|
110
119
|
}
|
|
111
120
|
},
|
|
112
121
|
|
|
@@ -141,7 +150,7 @@ sap.ui.define(
|
|
|
141
150
|
.getController()
|
|
142
151
|
._getPageTitleInformation();
|
|
143
152
|
} else {
|
|
144
|
-
return
|
|
153
|
+
return {};
|
|
145
154
|
}
|
|
146
155
|
},
|
|
147
156
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/base/Log", "sap/ui/base/Object", "sap/ui/model/json/JSONModel"], function(Log, BaseObject, JSONModel) {
|
|
6
6
|
"use strict";
|