@sapui5/sap.fe.navigation 1.124.2 → 1.126.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.
|
@@ -12,6 +12,8 @@ import V4ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
|
12
12
|
import URI from "sap/ui/thirdparty/URI";
|
|
13
13
|
import jQuery from "sap/ui/thirdparty/jquery";
|
|
14
14
|
import openWindow from "sap/ui/util/openWindow";
|
|
15
|
+
import type Container from "sap/ushell/Container";
|
|
16
|
+
import type Navigation from "sap/ushell/services/Navigation";
|
|
15
17
|
import NavError from "./NavError";
|
|
16
18
|
import type { SerializedSelectionVariant } from "./SelectionVariant";
|
|
17
19
|
import SelectionVariant from "./SelectionVariant";
|
|
@@ -217,13 +219,15 @@ export class NavigationHandler extends BaseObject {
|
|
|
217
219
|
* @returns The Navigation service
|
|
218
220
|
* @private
|
|
219
221
|
*/
|
|
220
|
-
_getAppNavigationServiceAsync():
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
222
|
+
async _getAppNavigationServiceAsync(): Promise<Navigation> {
|
|
223
|
+
const ushellContainer: Container = sap.ui.require("sap/ushell/Container");
|
|
224
|
+
return ushellContainer
|
|
225
|
+
?.getServiceAsync("Navigation")
|
|
226
|
+
.then(function (oCrossAppNavService: object) {
|
|
227
|
+
return oCrossAppNavService as Navigation;
|
|
224
228
|
})
|
|
225
229
|
.catch(function () {
|
|
226
|
-
Log.error("NavigationHandler:
|
|
230
|
+
Log.error("NavigationHandler: Navigation is not available.");
|
|
227
231
|
throw new NavError("NavigationHandler.NO.XAPPSERVICE");
|
|
228
232
|
});
|
|
229
233
|
}
|
|
@@ -429,7 +433,7 @@ export class NavigationHandler extends BaseObject {
|
|
|
429
433
|
}
|
|
430
434
|
|
|
431
435
|
const fnNavExplace = function () {
|
|
432
|
-
const sNewHrefPromise = oCrossAppNavService.
|
|
436
|
+
const sNewHrefPromise = oCrossAppNavService.getHref(oNavArguments, oNavHandler.oComponent);
|
|
433
437
|
sNewHrefPromise
|
|
434
438
|
.then(function (sNewHref: any) {
|
|
435
439
|
openWindow(sNewHref);
|
|
@@ -454,7 +458,7 @@ export class NavigationHandler extends BaseObject {
|
|
|
454
458
|
if (sNavMode == "explace") {
|
|
455
459
|
fnNavExplace();
|
|
456
460
|
} else {
|
|
457
|
-
const ptoExt = oCrossAppNavService.
|
|
461
|
+
const ptoExt = oCrossAppNavService.navigate(oNavArguments, oNavHandler.oComponent);
|
|
458
462
|
// TODO: This is just a temporary solution to allow FE V2 to use toExternal promise.
|
|
459
463
|
if (oNavHandler._navigateCallback) {
|
|
460
464
|
oNavHandler._navigateCallback(ptoExt);
|
|
@@ -483,9 +487,12 @@ export class NavigationHandler extends BaseObject {
|
|
|
483
487
|
}
|
|
484
488
|
oNavHandler
|
|
485
489
|
._getAppNavigationServiceAsync()
|
|
486
|
-
.then(function (oCrossAppNavService:
|
|
487
|
-
|
|
488
|
-
|
|
490
|
+
.then(async function (oCrossAppNavService: Navigation) {
|
|
491
|
+
try {
|
|
492
|
+
const oTargets = await (oCrossAppNavService.isNavigationSupported(
|
|
493
|
+
[oNavArguments],
|
|
494
|
+
oNavHandler.oComponent
|
|
495
|
+
) as unknown as Promise<{ supported: boolean }[]>);
|
|
489
496
|
if (oTargets[0].supported) {
|
|
490
497
|
if (!bExPlace) {
|
|
491
498
|
fnStoreAndNavigate(oCrossAppNavService);
|
|
@@ -497,15 +504,14 @@ export class NavigationHandler extends BaseObject {
|
|
|
497
504
|
const oError = new NavError("NavigationHandler.isIntentSupported.notSupported");
|
|
498
505
|
fnOnError(oError);
|
|
499
506
|
}
|
|
500
|
-
})
|
|
501
|
-
|
|
502
|
-
if (fnOnError) {
|
|
503
|
-
oSupportedPromise.fail(function () {
|
|
507
|
+
} catch (oError) {
|
|
508
|
+
if (fnOnError) {
|
|
504
509
|
// technical error: could not determine if intent is supported
|
|
505
510
|
const oError = oNavHandler._createTechnicalError("NavigationHandler.isIntentSupported.failed");
|
|
506
511
|
fnOnError(oError);
|
|
507
|
-
}
|
|
512
|
+
}
|
|
508
513
|
}
|
|
514
|
+
return;
|
|
509
515
|
})
|
|
510
516
|
.catch(function (oError: any) {
|
|
511
517
|
if (fnOnError) {
|
|
@@ -666,60 +672,60 @@ export class NavigationHandler extends BaseObject {
|
|
|
666
672
|
// inner app state was not found in the AppHash, but xapp state => try to read the xapp state
|
|
667
673
|
this._getAppNavigationServiceAsync()
|
|
668
674
|
.then(function (oCrossAppNavService: any) {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
675
|
+
return oCrossAppNavService.getStartupAppState(that.oComponent);
|
|
676
|
+
})
|
|
677
|
+
.catch(function () {
|
|
678
|
+
const oError = oNavHandler._createTechnicalError("NavigationHandler.getStartupState.failed");
|
|
679
|
+
oMyDeferred.reject(oError, {}, NavType.xAppState);
|
|
680
|
+
})
|
|
681
|
+
.then(function (oAppState: any) {
|
|
682
|
+
// get app state from sap-xapp-state,
|
|
683
|
+
// create a copy, not only a reference, because we want to modify the object
|
|
684
|
+
let oAppStateData = oAppState.getData();
|
|
685
|
+
let oError;
|
|
686
|
+
if (oAppStateData) {
|
|
687
|
+
try {
|
|
688
|
+
oAppStateData = JSON.parse(JSON.stringify(oAppStateData));
|
|
689
|
+
} catch (x) {
|
|
690
|
+
oError = oNavHandler._createTechnicalError("NavigationHandler.AppStateData.parseError");
|
|
691
|
+
oMyDeferred.reject(oError, oStartupParameters, NavType.xAppState);
|
|
692
|
+
return oMyDeferred.promise();
|
|
683
693
|
}
|
|
694
|
+
}
|
|
684
695
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
696
|
+
if (oAppStateData) {
|
|
697
|
+
const oSelVar = new SelectionVariant(oAppStateData.selectionVariant);
|
|
698
|
+
|
|
699
|
+
const oSelVars = oNavHandler._splitInboundNavigationParameters(
|
|
700
|
+
oSelVar,
|
|
701
|
+
oStartupParameters,
|
|
702
|
+
aDefaultedParameters
|
|
703
|
+
);
|
|
704
|
+
oAppStateData.selectionVariant = oSelVars.oNavigationSelVar.toJSONString();
|
|
705
|
+
oAppStateData.oSelectionVariant = oSelVars.oNavigationSelVar;
|
|
706
|
+
oAppStateData.oDefaultedSelectionVariant = oSelVars.oDefaultedSelVar;
|
|
707
|
+
oAppStateData.bNavSelVarHasDefaultsOnly = oSelVars.bNavSelVarHasDefaultsOnly;
|
|
708
|
+
const successHandlerHybridState = function (iAppStateData: object, _ref: object, navType: string): void {
|
|
709
|
+
oAppStateData.iAppState = iAppStateData;
|
|
710
|
+
oMyDeferred.resolve(oAppStateData, oStartupParameters, navType);
|
|
711
|
+
};
|
|
712
|
+
if (hybridIAppStateKeyParams !== undefined && iAppStateHybridDeferred !== undefined) {
|
|
713
|
+
iAppStateHybridDeferred.done(successHandlerHybridState);
|
|
714
|
+
} else if (oAppStateData[HYBRID_IAPP_STATE_KEY]) {
|
|
715
|
+
that._loadAppState(oAppStateData[HYBRID_IAPP_STATE_KEY], hybridDeferred, NavType.hybrid).done(
|
|
716
|
+
successHandlerHybridState
|
|
692
717
|
);
|
|
693
|
-
oAppStateData.selectionVariant = oSelVars.oNavigationSelVar.toJSONString();
|
|
694
|
-
oAppStateData.oSelectionVariant = oSelVars.oNavigationSelVar;
|
|
695
|
-
oAppStateData.oDefaultedSelectionVariant = oSelVars.oDefaultedSelVar;
|
|
696
|
-
oAppStateData.bNavSelVarHasDefaultsOnly = oSelVars.bNavSelVarHasDefaultsOnly;
|
|
697
|
-
const successHandlerHybridState = function (iAppStateData: object, _ref: object, navType: string) {
|
|
698
|
-
oAppStateData.iAppState = iAppStateData;
|
|
699
|
-
oMyDeferred.resolve(oAppStateData, oStartupParameters, navType);
|
|
700
|
-
};
|
|
701
|
-
if (hybridIAppStateKeyParams !== undefined && iAppStateHybridDeferred !== undefined) {
|
|
702
|
-
iAppStateHybridDeferred.done(successHandlerHybridState);
|
|
703
|
-
} else if (oAppStateData[HYBRID_IAPP_STATE_KEY]) {
|
|
704
|
-
that._loadAppState(oAppStateData[HYBRID_IAPP_STATE_KEY], hybridDeferred, NavType.hybrid).done(
|
|
705
|
-
successHandlerHybridState
|
|
706
|
-
);
|
|
707
|
-
} else {
|
|
708
|
-
oMyDeferred.resolve(oAppStateData, oStartupParameters, NavType.xAppState);
|
|
709
|
-
}
|
|
710
|
-
} else if (oStartupParameters) {
|
|
711
|
-
parseUrlParams(oStartupParameters, aDefaultedParameters, oMyDeferred, NavType.xAppState);
|
|
712
718
|
} else {
|
|
713
|
-
|
|
714
|
-
oError = oNavHandler._createTechnicalError("NavigationHandler.getDataFromAppState.failed");
|
|
715
|
-
oMyDeferred.reject(oError, oStartupParameters || {}, NavType.xAppState);
|
|
719
|
+
oMyDeferred.resolve(oAppStateData, oStartupParameters, NavType.xAppState);
|
|
716
720
|
}
|
|
717
|
-
})
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
721
|
+
} else if (oStartupParameters) {
|
|
722
|
+
parseUrlParams(oStartupParameters, aDefaultedParameters, oMyDeferred, NavType.xAppState);
|
|
723
|
+
} else {
|
|
724
|
+
// sap-xapp-state navigation, but ID has already expired, but URL parameters available
|
|
725
|
+
oError = oNavHandler._createTechnicalError("NavigationHandler.getDataFromAppState.failed");
|
|
726
|
+
oMyDeferred.reject(oError, oStartupParameters || {}, NavType.xAppState);
|
|
727
|
+
}
|
|
728
|
+
return;
|
|
723
729
|
})
|
|
724
730
|
.catch(function () {
|
|
725
731
|
const oError = oNavHandler._createTechnicalError("NavigationHandler._getAppNavigationServiceAsync.failed");
|
|
@@ -1415,8 +1421,8 @@ export class NavigationHandler extends BaseObject {
|
|
|
1415
1421
|
presentationVariant?: object;
|
|
1416
1422
|
valueTexts?: object;
|
|
1417
1423
|
}
|
|
1418
|
-
): JQuery.Promise<
|
|
1419
|
-
const oMyDeferred = jQuery.Deferred()
|
|
1424
|
+
): JQuery.Promise<unknown, unknown, unknown> {
|
|
1425
|
+
const oMyDeferred = jQuery.Deferred() as JQuery.Deferred<unknown, unknown, unknown>;
|
|
1420
1426
|
let mSemanticAttributes: any;
|
|
1421
1427
|
if (oTableEventParameters != undefined) {
|
|
1422
1428
|
mSemanticAttributes = oTableEventParameters.semanticAttributes;
|
|
@@ -1536,7 +1542,8 @@ export class NavigationHandler extends BaseObject {
|
|
|
1536
1542
|
* @private
|
|
1537
1543
|
* @ui5-restricted
|
|
1538
1544
|
*/
|
|
1539
|
-
|
|
1545
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
1546
|
+
_getAppStateKeyAndUrlParameters(sSelectionVariant: string): JQuery.Promise<unknown, unknown, unknown> {
|
|
1540
1547
|
return this.processBeforeSmartLinkPopoverOpens(undefined, sSelectionVariant, undefined, undefined);
|
|
1541
1548
|
}
|
|
1542
1549
|
|
|
@@ -1550,7 +1557,7 @@ export class NavigationHandler extends BaseObject {
|
|
|
1550
1557
|
async _getAppSpecificHash(appHash: string): Promise<string | undefined> {
|
|
1551
1558
|
try {
|
|
1552
1559
|
const crossAppService = await this._getAppNavigationServiceAsync();
|
|
1553
|
-
return crossAppService.
|
|
1560
|
+
return await crossAppService.getHref({ appSpecificRoute: appHash });
|
|
1554
1561
|
} catch (error: unknown) {
|
|
1555
1562
|
const message = error instanceof Error ? error.message : String(error);
|
|
1556
1563
|
Log.error(`FE : Can not fetch App sepcific URL : ${message}`);
|
|
@@ -1840,7 +1847,7 @@ export class NavigationHandler extends BaseObject {
|
|
|
1840
1847
|
const oNavHandler = this;
|
|
1841
1848
|
return this._getAppNavigationServiceAsync()
|
|
1842
1849
|
.then(function (oCrossAppNavService: any) {
|
|
1843
|
-
return oCrossAppNavService.
|
|
1850
|
+
return oCrossAppNavService.createEmptyAppState(oNavHandler.oComponent);
|
|
1844
1851
|
})
|
|
1845
1852
|
.then(function (oAppState: any) {
|
|
1846
1853
|
return oNavHandler._fnSaveAppStateWithImmediateReturn(oAppData, oAppState, fnOnError);
|
|
@@ -1871,77 +1878,77 @@ export class NavigationHandler extends BaseObject {
|
|
|
1871
1878
|
const oNavHandler = this;
|
|
1872
1879
|
this._getAppNavigationServiceAsync()
|
|
1873
1880
|
.then(function (oCrossAppNavService: any) {
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
oAppData = {
|
|
1884
|
-
selectionVariant: "{}",
|
|
1885
|
-
oSelectionVariant: new SelectionVariant(),
|
|
1886
|
-
oDefaultedSelectionVariant: new SelectionVariant(),
|
|
1887
|
-
bNavSelVarHasDefaultsOnly: false,
|
|
1888
|
-
tableVariantId: "",
|
|
1889
|
-
customData: {},
|
|
1890
|
-
appStateKey: sAppStateKey,
|
|
1891
|
-
presentationVariant: {},
|
|
1892
|
-
valueTexts: {},
|
|
1893
|
-
semanticDates: {},
|
|
1894
|
-
data: {}
|
|
1895
|
-
};
|
|
1896
|
-
if (oAppDataLoaded.selectionVariant) {
|
|
1897
|
-
/*
|
|
1898
|
-
* In case that we get an object from the stored AppData (=persistency), we need to stringify the JSON object.
|
|
1899
|
-
*/
|
|
1900
|
-
oAppData.selectionVariant = oNavHandler._ensureSelectionVariantFormatString(oAppDataLoaded.selectionVariant);
|
|
1901
|
-
oAppData.oSelectionVariant = new SelectionVariant(oAppData.selectionVariant);
|
|
1902
|
-
}
|
|
1903
|
-
if (oAppDataLoaded.tableVariantId) {
|
|
1904
|
-
oAppData.tableVariantId = oAppDataLoaded.tableVariantId;
|
|
1905
|
-
}
|
|
1906
|
-
if (oAppDataLoaded.customData) {
|
|
1907
|
-
oAppData.customData = oAppDataLoaded.customData;
|
|
1908
|
-
}
|
|
1909
|
-
if (oAppDataLoaded.presentationVariant) {
|
|
1910
|
-
oAppData.presentationVariant = oAppDataLoaded.presentationVariant;
|
|
1911
|
-
}
|
|
1912
|
-
if (oAppDataLoaded.valueTexts) {
|
|
1913
|
-
oAppData.valueTexts = oAppDataLoaded.valueTexts;
|
|
1914
|
-
}
|
|
1915
|
-
if (oAppDataLoaded.semanticDates) {
|
|
1916
|
-
oAppData.semanticDates = oAppDataLoaded.semanticDates;
|
|
1917
|
-
}
|
|
1918
|
-
/* In V2 case, we need the data in the below format for hybrid case */
|
|
1919
|
-
if (navType === NavType.hybrid) {
|
|
1920
|
-
oAppData.data = oAppDataLoaded;
|
|
1921
|
-
}
|
|
1922
|
-
} else {
|
|
1923
|
-
oAppData = merge(oAppData, oAppDataLoaded);
|
|
1924
|
-
if (oAppDataLoaded.selectionVariant) {
|
|
1925
|
-
/*
|
|
1926
|
-
* In case that we get an object from the stored AppData (=persistency), we need to stringify the JSON object.
|
|
1927
|
-
*/
|
|
1928
|
-
oAppData.selectionVariant = oNavHandler._ensureSelectionVariantFormatString(oAppDataLoaded.selectionVariant);
|
|
1929
|
-
oAppData.oSelectionVariant = new SelectionVariant(oAppData.selectionVariant);
|
|
1930
|
-
}
|
|
1931
|
-
}
|
|
1881
|
+
return oCrossAppNavService.getAppState(oNavHandler.oComponent, sAppStateKey);
|
|
1882
|
+
})
|
|
1883
|
+
.catch(function () {
|
|
1884
|
+
const oError = oNavHandler._createTechnicalError("NavigationHandler._getAppNavigationServiceAsync.failed");
|
|
1885
|
+
oDeferred.reject(oError, {}, navType);
|
|
1886
|
+
})
|
|
1887
|
+
.then(function (oAppState: any) {
|
|
1888
|
+
let oAppData: any = {};
|
|
1889
|
+
const oAppDataLoaded = oAppState.getData();
|
|
1932
1890
|
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
oDeferred.resolve(oAppData, {}, navType);
|
|
1936
|
-
});
|
|
1937
|
-
oAppStatePromise.fail(function () {
|
|
1938
|
-
const oError = oNavHandler._createTechnicalError("NavigationHandler.getAppState.failed");
|
|
1891
|
+
if (typeof oAppDataLoaded === "undefined") {
|
|
1892
|
+
const oError = oNavHandler._createTechnicalError("NavigationHandler.getDataFromAppState.failed");
|
|
1939
1893
|
oDeferred.reject(oError, {}, navType);
|
|
1940
|
-
})
|
|
1941
|
-
|
|
1894
|
+
} else if (oNavHandler._sMode === Mode.ODataV2) {
|
|
1895
|
+
oAppData = {
|
|
1896
|
+
selectionVariant: "{}",
|
|
1897
|
+
oSelectionVariant: new SelectionVariant(),
|
|
1898
|
+
oDefaultedSelectionVariant: new SelectionVariant(),
|
|
1899
|
+
bNavSelVarHasDefaultsOnly: false,
|
|
1900
|
+
tableVariantId: "",
|
|
1901
|
+
customData: {},
|
|
1902
|
+
appStateKey: sAppStateKey,
|
|
1903
|
+
presentationVariant: {},
|
|
1904
|
+
valueTexts: {},
|
|
1905
|
+
semanticDates: {},
|
|
1906
|
+
data: {}
|
|
1907
|
+
};
|
|
1908
|
+
if (oAppDataLoaded.selectionVariant) {
|
|
1909
|
+
/*
|
|
1910
|
+
* In case that we get an object from the stored AppData (=persistency), we need to stringify the JSON object.
|
|
1911
|
+
*/
|
|
1912
|
+
oAppData.selectionVariant = oNavHandler._ensureSelectionVariantFormatString(oAppDataLoaded.selectionVariant);
|
|
1913
|
+
oAppData.oSelectionVariant = new SelectionVariant(oAppData.selectionVariant);
|
|
1914
|
+
}
|
|
1915
|
+
if (oAppDataLoaded.tableVariantId) {
|
|
1916
|
+
oAppData.tableVariantId = oAppDataLoaded.tableVariantId;
|
|
1917
|
+
}
|
|
1918
|
+
if (oAppDataLoaded.customData) {
|
|
1919
|
+
oAppData.customData = oAppDataLoaded.customData;
|
|
1920
|
+
}
|
|
1921
|
+
if (oAppDataLoaded.presentationVariant) {
|
|
1922
|
+
oAppData.presentationVariant = oAppDataLoaded.presentationVariant;
|
|
1923
|
+
}
|
|
1924
|
+
if (oAppDataLoaded.valueTexts) {
|
|
1925
|
+
oAppData.valueTexts = oAppDataLoaded.valueTexts;
|
|
1926
|
+
}
|
|
1927
|
+
if (oAppDataLoaded.semanticDates) {
|
|
1928
|
+
oAppData.semanticDates = oAppDataLoaded.semanticDates;
|
|
1929
|
+
}
|
|
1930
|
+
/* In V2 case, we need the data in the below format for hybrid case */
|
|
1931
|
+
if (navType === NavType.hybrid) {
|
|
1932
|
+
oAppData.data = oAppDataLoaded;
|
|
1933
|
+
}
|
|
1934
|
+
} else {
|
|
1935
|
+
oAppData = merge(oAppData, oAppDataLoaded);
|
|
1936
|
+
if (oAppDataLoaded.selectionVariant) {
|
|
1937
|
+
/*
|
|
1938
|
+
* In case that we get an object from the stored AppData (=persistency), we need to stringify the JSON object.
|
|
1939
|
+
*/
|
|
1940
|
+
oAppData.selectionVariant = oNavHandler._ensureSelectionVariantFormatString(oAppDataLoaded.selectionVariant);
|
|
1941
|
+
oAppData.oSelectionVariant = new SelectionVariant(oAppData.selectionVariant);
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
// resolve is called on passed Deferred object to trigger a call of the done method, if implemented
|
|
1946
|
+
// the done method will receive the loaded appState and the navigation type as parameters
|
|
1947
|
+
oDeferred.resolve(oAppData, {}, navType);
|
|
1948
|
+
return;
|
|
1942
1949
|
})
|
|
1943
1950
|
.catch(function () {
|
|
1944
|
-
const oError = oNavHandler._createTechnicalError("NavigationHandler.
|
|
1951
|
+
const oError = oNavHandler._createTechnicalError("NavigationHandler.getAppState.failed");
|
|
1945
1952
|
oDeferred.reject(oError, {}, navType);
|
|
1946
1953
|
});
|
|
1947
1954
|
|
|
@@ -93,7 +93,7 @@ sap.ui.define(["sap/ui/core/Lib", "sap/ui/core/library"], function (Library, _li
|
|
|
93
93
|
const thisLib = Library.init({
|
|
94
94
|
name: "sap.fe.navigation",
|
|
95
95
|
// eslint-disable-next-line no-template-curly-in-string
|
|
96
|
-
version: "1.
|
|
96
|
+
version: "1.126.0",
|
|
97
97
|
dependencies: ["sap.ui.core"],
|
|
98
98
|
types: ["sap.fe.navigation.NavType", "sap.fe.navigation.ParamHandlingMode", "sap.fe.navigation.SuppressionBehavior"],
|
|
99
99
|
interfaces: [],
|