@sapui5/sap.ushell 1.129.1 → 1.130.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 +1 -1
- package/src/main/js/sap/ushell/.library +1 -1
- package/src/main/js/sap/ushell/AppInfoParameters.js +478 -346
- package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +41 -6
- package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +3 -3
- package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
- package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
- package/src/main/js/sap/ushell/NWBCInterface.js +1 -1
- package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
- package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
- package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +7 -3
- package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
- package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
- package/src/main/js/sap/ushell/api/S4MyHome.js +33 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +8 -0
- package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +871 -733
- package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +50 -50
- package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +121 -116
- package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +16 -12
- package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +2 -4
- package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +48 -53
- package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +1 -1
- package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +2 -1
- package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +26 -5
- package/src/main/js/sap/ushell/components/contentFinder/Component.js +20 -13
- package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +28 -35
- package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/controller/WidgetGallery.controller.js +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +60 -5
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +17 -6
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +11 -3
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +6 -0
- package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +174 -176
- package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +28 -7
- package/src/main/js/sap/ushell/components/contentFinder/view/ContentFinderDialog.view.xml +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/view/VisualizationsNoDataIllustratedMessage.fragment.xml +28 -0
- package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +1 -1
- package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +17 -14
- package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/contentFinderStandalone/manifestAppSearch.json +1 -1
- package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/pages/ActionMode.js +6 -1
- package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
- package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
- package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +2 -2
- package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
- package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/Component.js +2 -1
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/controls/FloatingContainer.js +74 -5
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +20 -4
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +149 -197
- package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.view.xml +88 -85
- package/src/main/js/sap/ushell/components/shell/Settings/appearance/AppearanceEntry.js +15 -19
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.controller.js +2 -2
- package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
- package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +30 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +30 -16
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources.properties +29 -15
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ar.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_bg.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ca.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cnr.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cs.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_cy.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_da.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_de.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_el.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en_GB.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_en_US_saprigi.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_es.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_es_MX.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_et.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fi.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr_CA.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hi.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hr.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_hu.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_id.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_it.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_iw.properties +4 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ja.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_kk.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ko.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_lt.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_lv.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_mk.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ms.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_nl.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_no.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pl.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pt.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_pt_PT.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ro.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_ru.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sh.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sk.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sl.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sr.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_sv.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_th.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_tr.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_uk.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_vi.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_zh_CN.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_zh_TW.properties +3 -0
- package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
- package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +1 -1
- package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
- package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
- package/src/main/js/sap/ushell/iconfonts.js +2 -1
- package/src/main/js/sap/ushell/library.js +1 -1
- package/src/main/js/sap/ushell/navigationMode.js +1 -1
- package/src/main/js/sap/ushell/performance/ShellAnalytics.js +18 -6
- package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
- package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
- package/src/main/js/sap/ushell/renderer/Renderer.js +21 -20
- package/src/main/js/sap/ushell/renderer/Shell.controller.js +378 -576
- package/src/main/js/sap/ushell/renderer/Shell.view.js +5 -4
- package/src/main/js/sap/ushell/renderer/resources/resources.properties +57 -22
- package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +6 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +3 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +10 -10
- package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -9
- package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +3 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +1 -1
- package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +4 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +4 -4
- package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +5 -4
- package/src/main/js/sap/ushell/services/AppLifeCycle.js +102 -107
- package/src/main/js/sap/ushell/services/AppState.js +1 -1
- package/src/main/js/sap/ushell/services/Bookmark.js +1 -1
- package/src/main/js/sap/ushell/services/BookmarkV2.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +2 -2
- package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
- package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
- package/src/main/js/sap/ushell/services/CommonDataModel.js +1 -1
- package/src/main/js/sap/ushell/services/Configuration.js +1 -1
- package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
- package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
- package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +1 -1
- package/src/main/js/sap/ushell/services/DarkModeSupport.js +161 -144
- package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
- package/src/main/js/sap/ushell/services/Extension.js +3 -3
- package/src/main/js/sap/ushell/services/FlpLaunchPage.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
- package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
- package/src/main/js/sap/ushell/services/LaunchPage.js +1 -1
- package/src/main/js/sap/ushell/services/Menu.js +1 -1
- package/src/main/js/sap/ushell/services/Message.js +1 -1
- package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +1 -1
- package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
- package/src/main/js/sap/ushell/services/MessageInternal.js +1 -1
- package/src/main/js/sap/ushell/services/Navigation/compatibility.js +1 -1
- package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
- package/src/main/js/sap/ushell/services/Navigation.js +1 -1
- package/src/main/js/sap/ushell/services/NavigationDataProvider.js +1 -1
- package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
- package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
- package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
- package/src/main/js/sap/ushell/services/Pages.js +1 -1
- package/src/main/js/sap/ushell/services/Personalization.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
- package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
- package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
- package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
- package/src/main/js/sap/ushell/services/PluginManager.js +1 -1
- package/src/main/js/sap/ushell/services/ReferenceResolver.js +74 -100
- package/src/main/js/sap/ushell/services/Search.js +1 -1
- package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
- package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
- package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
- package/src/main/js/sap/ushell/services/SmartNavigation.js +1 -1
- package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
- package/src/main/js/sap/ushell/services/UITracer.js +1 -1
- package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
- package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
- package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +2 -1
- package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +1 -1
- package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
- package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
- package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
- package/src/main/js/sap/ushell/services/UserRecents.js +4 -4
- package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
- package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
- package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
- package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
- package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
- package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
- package/src/main/js/sap/ushell/state/ShellModel.js +31 -0
- package/src/main/js/sap/ushell/state/StateManager.js +28 -0
- package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
- package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.ttf +0 -0
- package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff +0 -0
- package/src/main/js/sap/ushell/themes/base/fonts/BusinessSuiteInAppSymbols.woff2 +0 -0
- package/src/main/js/sap/ushell/themes/base/library.source.less +0 -1
- package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +0 -1
- package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +0 -1
- package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +0 -1
- package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/AboutButton.js +17 -21
- package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +358 -100
- package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.fragment.xml +169 -90
- package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/Page.js +77 -9
- package/src/main/js/sap/ushell/ui/launchpad/PageRenderer.js +20 -20
- package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
- package/src/main/js/sap/ushell/ui/utils.js +1 -1
- package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
- package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
- package/src/main/js/sap/ushell/utils/DynamicTileRequest.js +1 -3
- package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +3 -1
- package/src/main/js/sap/ushell/utils/UrlParsing.js +38 -0
- package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/DestinationResolver.js +13 -1
- package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/resources/resources.properties +43 -27
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ar.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_bg.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ca.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_cnr.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_cs.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_cy.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_da.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_de.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_el.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_en.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_en_GB.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_es.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_es_MX.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_et.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_fi.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_fr.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_fr_CA.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_hi.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_hr.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_hu.properties +5 -5
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_id.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_it.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_iw.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ja.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_kk.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ko.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_lt.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_lv.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_mk.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ms.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_nl.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_no.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_pl.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_pt.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_pt_PT.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ro.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_ru.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_sh.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_sk.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_sl.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_sr.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_sv.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_th.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_tr.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_uk.properties +3 -3
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_vi.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_zh_CN.properties +2 -2
- package/src/main/js/sap/ushell/utils/workpage/resources/resources_zh_TW.properties +2 -2
- package/src/main/js/sap/ushell/utils.js +8 -20
- package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
- package/src/main/js/sap/ushell/themes/base/AppearanceView.less +0 -213
- package/src/main/js/sap/ushell/themes/sap_belize_base/AppearanceView.less +0 -213
- package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/AppearanceView.less +0 -213
- package/src/main/js/sap/ushell/themes/sap_hcb/base_AppearanceView.less +0 -213
|
@@ -18,7 +18,6 @@ sap.ui.define([
|
|
|
18
18
|
"sap/ui/core/routing/History",
|
|
19
19
|
"sap/ui/Device",
|
|
20
20
|
"sap/ui/performance/trace/Interaction",
|
|
21
|
-
"sap/ui/performance/Measurement",
|
|
22
21
|
"sap/ui/thirdparty/hasher",
|
|
23
22
|
"sap/ui/thirdparty/jquery",
|
|
24
23
|
"sap/ushell/bootstrap/SchedulingAgent",
|
|
@@ -32,6 +31,7 @@ sap.ui.define([
|
|
|
32
31
|
"sap/ushell/resources",
|
|
33
32
|
"sap/ushell/services/AppConfiguration",
|
|
34
33
|
"sap/ushell/utils",
|
|
34
|
+
"sap/ushell/utils/UrlParsing",
|
|
35
35
|
"sap/ushell/utils/WindowUtils",
|
|
36
36
|
"sap/ushell/renderer/ShellLayout",
|
|
37
37
|
"sap/ushell/renderer/utils",
|
|
@@ -58,7 +58,6 @@ sap.ui.define([
|
|
|
58
58
|
Ui5History,
|
|
59
59
|
Device,
|
|
60
60
|
Interaction,
|
|
61
|
-
Measurement,
|
|
62
61
|
hasher,
|
|
63
62
|
jQuery,
|
|
64
63
|
SchedulingAgent,
|
|
@@ -72,6 +71,7 @@ sap.ui.define([
|
|
|
72
71
|
ushellResources,
|
|
73
72
|
AppConfiguration,
|
|
74
73
|
ushellUtils,
|
|
74
|
+
UrlParsing,
|
|
75
75
|
WindowUtils,
|
|
76
76
|
ShellLayout,
|
|
77
77
|
RendererUtils,
|
|
@@ -119,7 +119,7 @@ sap.ui.define([
|
|
|
119
119
|
newWindow: 1,
|
|
120
120
|
replace: 0
|
|
121
121
|
};
|
|
122
|
-
const
|
|
122
|
+
const NavigationMode = {
|
|
123
123
|
embedded: "embedded",
|
|
124
124
|
newWindowThenEmbedded: "newWindowThenEmbedded",
|
|
125
125
|
newWindow: "newWindow",
|
|
@@ -304,40 +304,18 @@ sap.ui.define([
|
|
|
304
304
|
|
|
305
305
|
this.history = History;
|
|
306
306
|
this.oViewPortContainer = Element.getElementById("viewPortContainer");
|
|
307
|
-
AppLifeCycleAI.init(this.oViewPortContainer, oViewConfig.
|
|
307
|
+
AppLifeCycleAI.init(this.oViewPortContainer, oViewConfig.disableHomeAppCache);
|
|
308
308
|
|
|
309
309
|
// init Shell Navigation
|
|
310
|
-
const initShellNavigationInternal = function (oShellNavigationInternal, oAppLifeCycleService) {
|
|
311
|
-
this.oShellNavigationInternal = oShellNavigationInternal;
|
|
312
|
-
this.oShellNavigationInternal.registerPrivateFilters(oAppLifeCycleService);
|
|
313
|
-
|
|
314
|
-
// register the router in the ShellNavigationInternal to let it skip the split of hash before firing the hashChange event
|
|
315
|
-
this.oShellNavigationInternal.registerExtraRouter(oRouter);
|
|
316
|
-
this.oShellNavigationInternal.registerNavigationFilter(this._handleEmptyHash.bind(this));
|
|
317
|
-
// must be after event registration (for synchronous nav target resolver calls)
|
|
318
|
-
this.oShellNavigationInternal.init(this.doHashChange.bind(this));
|
|
319
|
-
|
|
320
|
-
this.oShellNavigationInternal.registerNavigationFilter(this._disableSourceAppRouter.bind(this));
|
|
321
|
-
|
|
322
|
-
this.oShellNavigationInternal.registerNavigationFilter(this.handleDataLoss.bind(this));
|
|
323
|
-
this.oShellNavigationInternal.registerNavigationFilter(this._unblockUI.bind(this));
|
|
324
|
-
|
|
325
|
-
AppLifeCycleAI.registerHandleHashChange(this.oShellNavigationInternal);
|
|
326
|
-
// enable the direct app start and tests to wait for the initialization
|
|
327
|
-
EventHub.emit("ShellNavigationInitialized", Date.now());
|
|
328
|
-
}.bind(this);
|
|
329
|
-
|
|
330
310
|
Promise.all([
|
|
331
|
-
Container.getServiceAsync("URLParsing"),
|
|
332
311
|
Container.getServiceAsync("ShellNavigationInternal"),
|
|
333
312
|
Container.getServiceAsync("AppLifeCycle")
|
|
334
313
|
])
|
|
335
314
|
.then((aServices) => {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
this._oAppLifeCycleService = aServices[2];
|
|
315
|
+
const oShellNavigationInternal = aServices[0];
|
|
316
|
+
this._oAppLifeCycleService = aServices[1];
|
|
339
317
|
|
|
340
|
-
|
|
318
|
+
this._initShellNavigationInternal(oShellNavigationInternal, this._oAppLifeCycleService, oRouter);
|
|
341
319
|
});
|
|
342
320
|
|
|
343
321
|
Container.setLogonFrameProvider(this._getLogonFrameProvider());
|
|
@@ -414,6 +392,33 @@ sap.ui.define([
|
|
|
414
392
|
}
|
|
415
393
|
},
|
|
416
394
|
|
|
395
|
+
/**
|
|
396
|
+
* @param {object} oShellNavigationInternal
|
|
397
|
+
* @param {object} oAppLifeCycleService
|
|
398
|
+
* @param {object} oRouter
|
|
399
|
+
*/
|
|
400
|
+
_initShellNavigationInternal: function (oShellNavigationInternal, oAppLifeCycleService, oRouter) {
|
|
401
|
+
this.oShellNavigationInternal = oShellNavigationInternal;
|
|
402
|
+
this.oShellNavigationInternal.registerPrivateFilters(oAppLifeCycleService);
|
|
403
|
+
|
|
404
|
+
// register the router in the ShellNavigationInternal to let it skip the split of hash before firing the hashChange event
|
|
405
|
+
this.oShellNavigationInternal.registerExtraRouter(oRouter);
|
|
406
|
+
this.oShellNavigationInternal.registerNavigationFilter(this._handleEmptyHash.bind(this));
|
|
407
|
+
// must be after event registration (for synchronous nav target resolver calls)
|
|
408
|
+
this.oShellNavigationInternal.init(this.doHashChange.bind(this));
|
|
409
|
+
|
|
410
|
+
this.oShellNavigationInternal.registerNavigationFilter(this._disableSourceAppRouter.bind(this));
|
|
411
|
+
|
|
412
|
+
this.oShellNavigationInternal.registerNavigationFilter(this.handleDataLoss.bind(this));
|
|
413
|
+
this.oShellNavigationInternal.registerNavigationFilter(this._unblockUI.bind(this));
|
|
414
|
+
|
|
415
|
+
AppLifeCycleAI.registerHandleHashChange(this.oShellNavigationInternal);
|
|
416
|
+
// enable the direct app start and tests to wait for the initialization
|
|
417
|
+
EventHub.emit("ShellNavigationInitialized", Date.now());
|
|
418
|
+
},
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
*/
|
|
417
422
|
_bindTabTitle: function () {
|
|
418
423
|
const oBinding = ShellModel.getModel().bindProperty("/application/title");
|
|
419
424
|
oBinding.attachChange(() => {
|
|
@@ -472,20 +477,19 @@ sap.ui.define([
|
|
|
472
477
|
* This method currently assumes that the application is displayed in the "minimal" state (no home button present).
|
|
473
478
|
*/
|
|
474
479
|
_onBackNavigationChanged: function (oEvent) {
|
|
475
|
-
AppLifeCycleAI.setBackNavigationChanged(true);
|
|
476
480
|
const fnCallback = oEvent.getParameters().data;
|
|
477
481
|
const sCurrentShellMode = StateManager.getShellMode();
|
|
478
482
|
const sCurrentLaunchpadState = StateManager.getLaunchpadState();
|
|
479
483
|
|
|
480
484
|
if (fnCallback) {
|
|
481
|
-
|
|
485
|
+
RelatedServices.setNavigateBack(fnCallback);
|
|
482
486
|
|
|
483
487
|
if (sCurrentLaunchpadState === LaunchpadState.App && [Minimal, Standalone, Embedded].includes(sCurrentShellMode)) {
|
|
484
488
|
Container.getRendererInternal("fiori2").showHeaderItem("backBtn", true);
|
|
485
489
|
}
|
|
486
490
|
} else {
|
|
487
491
|
//if no callback is provided we set the default handler: history back
|
|
488
|
-
|
|
492
|
+
RelatedServices.resetNavigateBack();
|
|
489
493
|
}
|
|
490
494
|
},
|
|
491
495
|
|
|
@@ -636,12 +640,14 @@ sap.ui.define([
|
|
|
636
640
|
},
|
|
637
641
|
|
|
638
642
|
onExit: function () {
|
|
643
|
+
closeAllDialogs = true;
|
|
644
|
+
|
|
639
645
|
this._aDoables.forEach((oDoable) => {
|
|
640
646
|
oDoable.off();
|
|
641
647
|
});
|
|
642
648
|
this._aDoables = [];
|
|
643
649
|
|
|
644
|
-
ShellUIServiceFactory.detachBackNavigationChanged(this.
|
|
650
|
+
ShellUIServiceFactory.detachBackNavigationChanged(this._onBackNavigationChanged, this);
|
|
645
651
|
|
|
646
652
|
this._aDanglingControls.forEach((oControl) => {
|
|
647
653
|
oControl.destroy();
|
|
@@ -658,7 +664,7 @@ sap.ui.define([
|
|
|
658
664
|
EventBus.getInstance().unsubscribe("sap.ushell", "appOpened", this.onAppOpened, this);
|
|
659
665
|
|
|
660
666
|
// Some qUnits destroy the shell very early, check if oShellNavigationInternal exists
|
|
661
|
-
if (this.oShellNavigationInternal) {
|
|
667
|
+
if (this.oShellNavigationInternal && this.oShellNavigationInternal.hashChanger) {
|
|
662
668
|
this.oShellNavigationInternal.hashChanger.destroy();
|
|
663
669
|
}
|
|
664
670
|
|
|
@@ -764,7 +770,7 @@ sap.ui.define([
|
|
|
764
770
|
}
|
|
765
771
|
|
|
766
772
|
// Do we do an ex-place navigation?
|
|
767
|
-
const oParsedHash =
|
|
773
|
+
const oParsedHash = UrlParsing.parseShellHash(targetIntent);
|
|
768
774
|
const bBuiltInIntent = Container.getRendererInternal()._isBuiltInIntent(oParsedHash);
|
|
769
775
|
const aParsedNavMode = oParsedHash.params["sap-ushell-navmode"];
|
|
770
776
|
const sNavMode = aParsedNavMode && aParsedNavMode[0];
|
|
@@ -828,7 +834,7 @@ sap.ui.define([
|
|
|
828
834
|
const oResolvedHashFragment = await oService.resolveHashFragment(sTargetHash);
|
|
829
835
|
|
|
830
836
|
const bIsExplaceNavigation = oResolvedHashFragment.targetNavigationMode === "explace" || oResolvedHashFragment.targetNavigationMode === "frameless";
|
|
831
|
-
const bIsBackNavigationAndNewWindow = bIsBackNavigation && oResolvedHashFragment.navigationMode ===
|
|
837
|
+
const bIsBackNavigationAndNewWindow = bIsBackNavigation && oResolvedHashFragment.navigationMode === NavigationMode.newWindowThenEmbedded;
|
|
832
838
|
|
|
833
839
|
if (bIsExplaceNavigation && (!bIsBackNavigationAndNewWindow)) {
|
|
834
840
|
this.bExplaceNavigation = true;
|
|
@@ -1082,174 +1088,178 @@ sap.ui.define([
|
|
|
1082
1088
|
*/
|
|
1083
1089
|
doHashChange: function (sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError) {
|
|
1084
1090
|
Log.debug(`${sLogFesrPrefix} Interaction Start`, "doHashChange", sModuleName);
|
|
1085
|
-
const fnResolveInteraction = this._notifyAsyncStep();
|
|
1086
|
-
|
|
1087
|
-
//Performance Debug
|
|
1088
|
-
Measurement.start("FLP:ShellController.doHashChange", "doHashChange", "FLP");
|
|
1089
1091
|
ushellUtils.setPerformanceMark("FLP-ShellController-doHashChange-begin");
|
|
1090
1092
|
EventHub.emit("trackHashChange", sShellHash);
|
|
1091
1093
|
|
|
1092
|
-
const oDashboard = Element.getElementById("sapUshellDashboardPage");
|
|
1093
|
-
if (oDashboard) {
|
|
1094
|
-
oDashboard.setBlocked(true);
|
|
1095
|
-
oDashboard.setBusy(true);
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
1094
|
const oDeferred = new jQuery.Deferred();
|
|
1099
1095
|
|
|
1100
|
-
this._doHashChange(this, sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError)
|
|
1101
|
-
.catch(() => {
|
|
1102
|
-
EventHub.emit("doHashChangeError", Date.now());
|
|
1103
|
-
if (oDashboard) {
|
|
1104
|
-
oDashboard.setBlocked(false);
|
|
1105
|
-
oDashboard.setBusy(false);
|
|
1106
|
-
}
|
|
1107
|
-
})
|
|
1108
|
-
.finally(() => {
|
|
1109
|
-
Measurement.end("FLP:ShellController.doHashChange");
|
|
1110
|
-
|
|
1111
|
-
Log.debug(`${sLogFesrPrefix} Interaction End`, "doHashChange", sModuleName);
|
|
1112
|
-
fnResolveInteraction();
|
|
1113
|
-
|
|
1114
|
-
oDeferred.resolve();
|
|
1115
|
-
});
|
|
1116
|
-
|
|
1117
|
-
return oDeferred.promise();
|
|
1118
|
-
},
|
|
1119
|
-
|
|
1120
|
-
_doHashChange: async function (oShellController, sShellHash, sAppPart, sOldShellHash, sOldAppPart, oParseError) {
|
|
1121
1096
|
// reset here because the result of wasHistoryEntryReplaced is only useful in navigation filters
|
|
1122
1097
|
// and might give inconsistent results after this point.
|
|
1123
|
-
this.
|
|
1098
|
+
this._bWasHistoryEntryReplaced = this.oShellNavigationInternal.wasHistoryEntryReplaced();
|
|
1124
1099
|
this.oShellNavigationInternal.resetHistoryEntryReplaced();
|
|
1125
|
-
let oInMemoryApplicationInstance;
|
|
1126
1100
|
|
|
1127
1101
|
if (!this.bEnableHashChange) {
|
|
1128
1102
|
this.bEnableHashChange = true;
|
|
1129
|
-
|
|
1103
|
+
oDeferred.resolve();
|
|
1104
|
+
return oDeferred.promise();
|
|
1130
1105
|
}
|
|
1131
|
-
|
|
1132
|
-
//
|
|
1106
|
+
|
|
1107
|
+
// When the application is opened in the new tab, the ShellHashEvent should be fired in order to update UI5 hasher,
|
|
1108
|
+
// but the application should not be resolved again.
|
|
1133
1109
|
if (this.bRestorePreviousHash) {
|
|
1134
1110
|
this.bRestorePreviousHash = false;
|
|
1135
|
-
|
|
1111
|
+
oDeferred.resolve();
|
|
1112
|
+
return oDeferred.promise();
|
|
1136
1113
|
}
|
|
1137
1114
|
|
|
1115
|
+
const sFixedShellHash = UrlParsing.ensureLeadingHash(sShellHash);
|
|
1116
|
+
const sFixedOldShellHash = UrlParsing.ensureLeadingHash(sOldShellHash);
|
|
1117
|
+
|
|
1118
|
+
// todo [FLPCOREANDUX-10024] where does this oParseError come from?
|
|
1138
1119
|
if (oParseError) {
|
|
1139
|
-
|
|
1140
|
-
|
|
1120
|
+
Log.error(`Error when parsing the hash: '${sFixedShellHash}'`, oParseError);
|
|
1121
|
+
this.hashChangeFailure(
|
|
1122
|
+
this.history.getHistoryLength(),
|
|
1141
1123
|
oParseError.message,
|
|
1142
1124
|
null,
|
|
1143
1125
|
"sap.ushell.renderer.Shell.controller",
|
|
1144
1126
|
false
|
|
1145
|
-
)
|
|
1146
|
-
|
|
1127
|
+
)
|
|
1128
|
+
.then(oDeferred.resolve.bind(oDeferred))
|
|
1129
|
+
.catch(oDeferred.reject.bind(oDeferred));
|
|
1130
|
+
return oDeferred.promise();
|
|
1147
1131
|
}
|
|
1148
1132
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1133
|
+
const oDashboard = Element.getElementById("sapUshellDashboardPage");
|
|
1134
|
+
if (oDashboard) {
|
|
1135
|
+
oDashboard.setBlocked(true);
|
|
1136
|
+
oDashboard.setBusy(true);
|
|
1137
|
+
}
|
|
1151
1138
|
|
|
1152
|
-
const
|
|
1153
|
-
|
|
1139
|
+
const fnResolveInteraction = this._notifyAsyncStep();
|
|
1140
|
+
|
|
1141
|
+
this._doHashChange(sFixedShellHash, sAppPart, sFixedOldShellHash)
|
|
1142
|
+
.catch(() => {
|
|
1143
|
+
EventHub.emit("doHashChangeError", Date.now());
|
|
1144
|
+
})
|
|
1145
|
+
.finally(() => {
|
|
1146
|
+
Log.debug(`${sLogFesrPrefix} Interaction End`, "doHashChange", sModuleName);
|
|
1147
|
+
fnResolveInteraction();
|
|
1148
|
+
|
|
1149
|
+
if (oDashboard) {
|
|
1150
|
+
oDashboard.setBlocked(false);
|
|
1151
|
+
oDashboard.setBusy(false);
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
oDeferred.resolve();
|
|
1155
|
+
});
|
|
1156
|
+
|
|
1157
|
+
return oDeferred.promise();
|
|
1158
|
+
},
|
|
1159
|
+
|
|
1160
|
+
_doHashChange: async function (sShellHash, sAppPart, sOldShellHash) {
|
|
1161
|
+
// save current history length to handle errors (in case)
|
|
1162
|
+
const iOriginalHistoryLength = this.history.getHistoryLength();
|
|
1154
1163
|
|
|
1155
1164
|
// track hash change
|
|
1156
|
-
|
|
1165
|
+
this.history.hashChange(sShellHash, sOldShellHash);
|
|
1157
1166
|
|
|
1158
1167
|
// we save the current-application before resolving the next navigation's fragment,
|
|
1159
1168
|
// as in cases of navigation in a new window we need to set it back for the app-configuration to be consistent
|
|
1160
|
-
|
|
1169
|
+
const oOldResolvedHashFragment = AppConfiguration.getCurrentApplication();
|
|
1161
1170
|
|
|
1162
1171
|
try {
|
|
1163
|
-
const oResult = await oShellController._resolveHashFragment(sFixedShellHash);
|
|
1164
|
-
let oResolvedHashFragment = oResult.resolvedHashFragment;
|
|
1165
|
-
const oParsedShellHash = oResult.parsedShellHash;
|
|
1166
|
-
|
|
1167
1172
|
// NOTE: AppConfiguration.setCurrentApplication was called with the currently resolved target.
|
|
1168
|
-
const
|
|
1169
|
-
const oConfig = oShellController._getConfig();
|
|
1170
|
-
const bComponentLoaded = !!(oResolvedHashFragment && oResolvedHashFragment.componentHandle);
|
|
1171
|
-
// for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
|
|
1172
|
-
// NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
|
|
1173
|
-
const sTargetUi5ComponentName = oResolvedHashFragment && oResolvedHashFragment.ui5ComponentName;
|
|
1174
|
-
|
|
1175
|
-
// calculate effective Navigation Mode with resolution result and current Application,
|
|
1176
|
-
// we will determine the next navigation mode.
|
|
1177
|
-
oResolvedHashFragment = oShellController._calculateNavigationMode(oResolvedHashFragment);
|
|
1178
|
-
|
|
1179
|
-
// do not stall for initial navigation
|
|
1180
|
-
if (oShellController.currentAppBeforeNav) {
|
|
1181
|
-
// store the state of the current app before opening the new app
|
|
1182
|
-
AppLifeCycleAI.storeAppExtensions();
|
|
1183
|
-
// stall all state management changes, those __most probably__ come from the target application
|
|
1184
|
-
StateManager.stallChanges();
|
|
1185
|
-
}
|
|
1173
|
+
const oResult = await this._resolveHashFragment(sShellHash);
|
|
1186
1174
|
|
|
1187
|
-
|
|
1188
|
-
if (
|
|
1189
|
-
//
|
|
1190
|
-
StateManager.applyStalledChanges();
|
|
1175
|
+
// Only for testing
|
|
1176
|
+
if (!oResult && window.QUnit !== undefined) {
|
|
1177
|
+
// return without navigation if no result was returned.
|
|
1191
1178
|
return;
|
|
1192
1179
|
}
|
|
1193
1180
|
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
oResolvedHashFragment.applicationConfiguration = oConfig.applications[sIntent];
|
|
1197
|
-
}
|
|
1181
|
+
const oResolvedHashFragment = oResult.resolvedHashFragment;
|
|
1182
|
+
const oParsedShellHash = oResult.parsedShellHash;
|
|
1198
1183
|
|
|
1199
|
-
|
|
1184
|
+
// todo: [FLPCOREANDUX-10024] is this a real life use case?
|
|
1185
|
+
/*
|
|
1186
|
+
* A null navigationMode indicates that no hashFragment was resolved.
|
|
1187
|
+
* However, we need to restore the current hash to the previous one.
|
|
1188
|
+
* If cold start happened (history has only one entry), we go to the shell home.
|
|
1189
|
+
*/
|
|
1190
|
+
if (oResolvedHashFragment.navigationMode === null) {
|
|
1191
|
+
if (ushellUtils.isColdStart()) {
|
|
1192
|
+
window.hasher.setHash("");
|
|
1193
|
+
return;
|
|
1194
|
+
}
|
|
1200
1195
|
|
|
1201
|
-
|
|
1202
|
-
|
|
1196
|
+
this.bEnableHashChange = false;
|
|
1197
|
+
this.history.pop();
|
|
1198
|
+
this._windowHistoryBack(1);
|
|
1203
1199
|
return;
|
|
1204
1200
|
}
|
|
1205
1201
|
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1202
|
+
// store the state of the current app before opening the new app
|
|
1203
|
+
await AppLifeCycleAI.storeAppExtensions();
|
|
1204
|
+
|
|
1205
|
+
// stall all state management changes, those __most probably__ come from the target application
|
|
1206
|
+
StateManager.stallChanges();
|
|
1207
|
+
|
|
1208
|
+
const bOpenedViaNWBC = await this._openAppViaNWBC(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1209
|
+
if (bOpenedViaNWBC === true) {
|
|
1210
|
+
this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
|
|
1211
|
+
Log.info("NWBC application was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
|
|
1212
|
+
});
|
|
1213
|
+
|
|
1214
|
+
StateManager.applyStalledChanges();
|
|
1212
1215
|
return;
|
|
1213
1216
|
}
|
|
1214
1217
|
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
+
if (oResolvedHashFragment.navigationMode === NavigationMode.newWindow) {
|
|
1219
|
+
// add the app to application usage log
|
|
1220
|
+
this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
|
|
1221
|
+
Log.info("Application in new window was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
|
|
1222
|
+
});
|
|
1223
|
+
await this._openAppExplace(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1218
1224
|
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
* the ApplicationContainer can stop the router of the current app (avoid inner-app hash change notifications)
|
|
1223
|
-
* NOTE: this dependency to the ApplicationContainer is not nice, but we need a fast fix now; we should refactor
|
|
1224
|
-
* the ApplicationContainer code, because most of the logic has to be done by the shell controller;
|
|
1225
|
-
* maybe rather introduce a utility module
|
|
1226
|
-
*/
|
|
1227
|
-
EventBus.getInstance().publish("ApplicationContainer", "_prior.newUI5ComponentInstantion",
|
|
1228
|
-
{ name: sTargetUi5ComponentName }
|
|
1229
|
-
);
|
|
1225
|
+
StateManager.applyStalledChanges(); // no changes were done by the source application
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1230
1228
|
|
|
1231
|
-
//
|
|
1232
|
-
|
|
1229
|
+
// Handle "/core/shell/model/migrationConfig"
|
|
1230
|
+
const bHandledViaMigrationConfig = this._rewriteRootIntentForMigrationConfig(oResolvedHashFragment, sShellHash);
|
|
1231
|
+
if (bHandledViaMigrationConfig) {
|
|
1232
|
+
StateManager.applyStalledChanges(); // no changes were done by the source application
|
|
1233
|
+
return;
|
|
1234
|
+
}
|
|
1233
1235
|
|
|
1234
|
-
//
|
|
1235
|
-
await Container.getServiceAsync("Ui5ComponentLoader");
|
|
1236
|
+
// todo: [FLPCOREANDUX-10024] simplify error handling
|
|
1236
1237
|
try {
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1238
|
+
const bPreviousIsInitialNavigation = this.oShellNavigationInternal.isInitialNavigation();
|
|
1239
|
+
try {
|
|
1240
|
+
await this._openAppInplace(oParsedShellHash, sShellHash, oResolvedHashFragment, sOldShellHash, sAppPart, oOldResolvedHashFragment);
|
|
1241
|
+
} catch (oError) {
|
|
1242
|
+
Log.error(`Application initialization for intent "${sShellHash}" failed.`, oError);
|
|
1243
|
+
|
|
1244
|
+
// assumption is that the resolvedHashFragment already contains the componentHandle
|
|
1245
|
+
const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
|
|
1246
|
+
this.oShellNavigationInternal.setIsInitialNavigation(bPreviousIsInitialNavigation);
|
|
1247
|
+
await this.hashChangeFailure(
|
|
1248
|
+
iOriginalHistoryLength,
|
|
1249
|
+
oError.name,
|
|
1250
|
+
oError.message,
|
|
1251
|
+
oMetadata ? oMetadata.title : "",
|
|
1252
|
+
false
|
|
1253
|
+
);
|
|
1254
|
+
}
|
|
1247
1255
|
} catch (oError) {
|
|
1248
|
-
|
|
1249
|
-
|
|
1256
|
+
Log.error("Failed to open application", oError, "sap.ushell.renderer.Shell.controller");
|
|
1257
|
+
|
|
1258
|
+
const sErrorReason = ushellResources.i18n.getText("cannot_load_ui5_component_details", [sShellHash]);
|
|
1259
|
+
const sErrorReasonEnglish = `Failed to load UI5 component for navigation intent "${sShellHash}"`;
|
|
1250
1260
|
|
|
1251
|
-
AppConfiguration.setCurrentApplication(
|
|
1252
|
-
await
|
|
1261
|
+
AppConfiguration.setCurrentApplication(oOldResolvedHashFragment);
|
|
1262
|
+
await this.hashChangeFailure(
|
|
1253
1263
|
iOriginalHistoryLength,
|
|
1254
1264
|
{
|
|
1255
1265
|
title: ushellResources.i18n.getText("error"),
|
|
@@ -1265,11 +1275,12 @@ sap.ui.define([
|
|
|
1265
1275
|
);
|
|
1266
1276
|
}
|
|
1267
1277
|
} catch (oError) {
|
|
1268
|
-
|
|
1278
|
+
Log.error("Hash change handling failed. Could not open app.", oError, "sap.ushell.renderer.Shell.controller");
|
|
1279
|
+
const sErrorReason = ushellResources.i18n.getText("cannot_resolve_navigation_target_details", [sShellHash]);
|
|
1269
1280
|
// eslint-disable-next-line max-len
|
|
1270
|
-
const sErrorReasonEnglish = `Failed to resolve navigation target "${
|
|
1281
|
+
const sErrorReasonEnglish = `Failed to resolve navigation target "${sShellHash}". This is most likely caused by an incorrect SAP Fiori launchpad content configuration or by missing role assignment.`;
|
|
1271
1282
|
|
|
1272
|
-
await
|
|
1283
|
+
await this.hashChangeFailure(
|
|
1273
1284
|
iOriginalHistoryLength,
|
|
1274
1285
|
{
|
|
1275
1286
|
title: ushellResources.i18n.getText("error"),
|
|
@@ -1278,7 +1289,7 @@ sap.ui.define([
|
|
|
1278
1289
|
},
|
|
1279
1290
|
{
|
|
1280
1291
|
info: sErrorReason,
|
|
1281
|
-
fixedShellHash:
|
|
1292
|
+
fixedShellHash: sShellHash,
|
|
1282
1293
|
technicalMessage: oError.message
|
|
1283
1294
|
},
|
|
1284
1295
|
"sap.ushell.renderer.Shell.controller",
|
|
@@ -1289,79 +1300,16 @@ sap.ui.define([
|
|
|
1289
1300
|
}
|
|
1290
1301
|
},
|
|
1291
1302
|
|
|
1292
|
-
|
|
1293
|
-
* Attempts to navigate to the target application via a shortcut,
|
|
1294
|
-
* without executing unnecessary AppLifeCycle navigation logic (e.g.,
|
|
1295
|
-
* application component initialization).
|
|
1296
|
-
*
|
|
1297
|
-
* This might be necessary when the navigation should not be handled in
|
|
1298
|
-
* the current window context anymore, for example, when the
|
|
1299
|
-
* application should be opened in a new window, or NWBC takes over the
|
|
1300
|
-
* navigation task.
|
|
1301
|
-
*
|
|
1302
|
-
* @param {string} sFixedShellHash
|
|
1303
|
-
* The hash fragment including "#"
|
|
1304
|
-
* @param {string} sAppPart
|
|
1305
|
-
* The inner app route part of the intent
|
|
1306
|
-
* @param {object} oResolvedHashFragment
|
|
1307
|
-
* The resolved target intent
|
|
1308
|
-
*
|
|
1309
|
-
* @returns {Promise<boolean>} Whether the navigation was handled.
|
|
1310
|
-
* @private
|
|
1311
|
-
*/
|
|
1312
|
-
_handleEarlyNavigation: async function (sFixedShellHash, sAppPart, oResolvedHashFragment) {
|
|
1313
|
-
const oDashboard = Element.getElementById("sapUshellDashboardPage");
|
|
1314
|
-
|
|
1315
|
-
const bOpenedViaNWBC = await this._openAppViaNWBC(oResolvedHashFragment);
|
|
1316
|
-
|
|
1317
|
-
if (bOpenedViaNWBC === true) {
|
|
1318
|
-
oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
|
|
1319
|
-
this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
|
|
1320
|
-
Log.info("NWBC application was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
|
|
1321
|
-
});
|
|
1322
|
-
if (oDashboard) {
|
|
1323
|
-
oDashboard.setBlocked(false);
|
|
1324
|
-
oDashboard.setBusy(false);
|
|
1325
|
-
}
|
|
1326
|
-
|
|
1327
|
-
return true;
|
|
1328
|
-
}
|
|
1329
|
-
|
|
1330
|
-
const bNewWindowNavigation = oResolvedHashFragment?.navigationMode === oNavigationMode.newWindow;
|
|
1331
|
-
if (bNewWindowNavigation) {
|
|
1332
|
-
// add the app to application usage log
|
|
1333
|
-
oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
|
|
1334
|
-
this.logOpenAppAction(oResolvedHashFragment, sAppPart).catch(() => {
|
|
1335
|
-
Log.info("Application in new window was not logged.", undefined, "sap.ushell.renderer.Shell.controller");
|
|
1336
|
-
});
|
|
1337
|
-
const [ApplicationContainer] = await ushellUtils.requireAsync(["sap/ushell/components/container/ApplicationContainer"]);
|
|
1338
|
-
|
|
1339
|
-
oResolvedHashFragment.url = ApplicationContainer.prototype._checkNwbcUrlAdjustment(undefined, oResolvedHashFragment.applicationType, oResolvedHashFragment.url, true);
|
|
1340
|
-
this._openAppInNewWindowAndRestore(oResolvedHashFragment);
|
|
1341
|
-
if (oDashboard) {
|
|
1342
|
-
oDashboard.setBlocked(false);
|
|
1343
|
-
oDashboard.setBusy(false);
|
|
1344
|
-
}
|
|
1345
|
-
|
|
1346
|
-
return true;
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
|
-
// Close dialogs only for inplace navigation
|
|
1350
|
-
if (InstanceManager && closeAllDialogs) {
|
|
1351
|
-
InstanceManager.closeAllDialogs();
|
|
1352
|
-
InstanceManager.closeAllPopovers();
|
|
1353
|
-
}
|
|
1354
|
-
closeAllDialogs = true;
|
|
1355
|
-
|
|
1303
|
+
_rewriteRootIntentForMigrationConfig: function (oResolvedHashFragment, sShellHash) {
|
|
1356
1304
|
// In case of empty hash, if there is a resolved target, set the flag to false, from now on the rootIntent
|
|
1357
1305
|
// will be an empty hash. Otherwise, change hash to rootIntent to trigger normal resolution.
|
|
1358
1306
|
if (Config.last("/core/shell/model/migrationConfig")) {
|
|
1359
1307
|
oConfig.migrationConfig = false;
|
|
1360
1308
|
this._getConfigModel().setProperty("/migrationConfig", false);
|
|
1361
1309
|
|
|
1362
|
-
if (oResolvedHashFragment &&
|
|
1310
|
+
if (oResolvedHashFragment && sShellHash === "#") {
|
|
1363
1311
|
oConfig.rootIntent = "";
|
|
1364
|
-
} else if (
|
|
1312
|
+
} else if (sShellHash === "#") {
|
|
1365
1313
|
window.setTimeout(() => {
|
|
1366
1314
|
window.hasher.setHash(oConfig.rootIntent);
|
|
1367
1315
|
}, 0);
|
|
@@ -1369,39 +1317,35 @@ sap.ui.define([
|
|
|
1369
1317
|
return true;
|
|
1370
1318
|
}
|
|
1371
1319
|
}
|
|
1372
|
-
|
|
1373
1320
|
return false;
|
|
1374
1321
|
},
|
|
1375
1322
|
|
|
1376
|
-
|
|
1377
|
-
|
|
1323
|
+
_openAppExplace: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
|
|
1324
|
+
const [ApplicationContainer] = await ushellUtils.requireAsync(["sap/ushell/components/container/ApplicationContainer"]);
|
|
1378
1325
|
|
|
1379
|
-
|
|
1380
|
-
const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
|
|
1381
|
-
let bPreviousIsInitialNavigation;
|
|
1326
|
+
oResolvedHashFragment.url = ApplicationContainer.prototype._checkNwbcUrlAdjustment(undefined, oResolvedHashFragment.applicationType, oResolvedHashFragment.url, true);
|
|
1382
1327
|
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1328
|
+
EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
|
|
1329
|
+
|
|
1330
|
+
const oNewWin = WindowUtils.openURL(oResolvedHashFragment.url);
|
|
1331
|
+
// Show a message when window.open returns null --> Popup Blocker
|
|
1332
|
+
// Exception: in WorkZone's mobile client, when external nav happens: Keep calm and carry on.
|
|
1333
|
+
if (!oNewWin && !this._checkWindowLocationSearch("workzone-mobile-app=true")) {
|
|
1334
|
+
const msg = ushellResources.i18n.getText("fail_to_start_app_popup_blocker", [window.location.hostname]);
|
|
1335
|
+
this.delayedMessageError(msg);
|
|
1391
1336
|
}
|
|
1392
1337
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
await this.hashChangeFailure(iOriginalHistoryLength, oExc.name, oExc.message, oMetadata ? oMetadata.title : "", false);
|
|
1338
|
+
EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
|
|
1339
|
+
this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1340
|
+
},
|
|
1341
|
+
|
|
1342
|
+
_closeAllDialogs: function () {
|
|
1343
|
+
if (InstanceManager && closeAllDialogs) {
|
|
1344
|
+
InstanceManager.closeAllDialogs();
|
|
1345
|
+
InstanceManager.closeAllPopovers();
|
|
1402
1346
|
}
|
|
1403
1347
|
|
|
1404
|
-
|
|
1348
|
+
closeAllDialogs = true;
|
|
1405
1349
|
},
|
|
1406
1350
|
|
|
1407
1351
|
/**
|
|
@@ -1414,37 +1358,68 @@ sap.ui.define([
|
|
|
1414
1358
|
* <b>and</b> core-ext-light were loaded earlier. The promise is rejected with an error message in case errors occur.
|
|
1415
1359
|
*/
|
|
1416
1360
|
_resolveHashFragment: async function (sShellHash) {
|
|
1417
|
-
//
|
|
1418
|
-
Measurement.start("FLP:ShellController._resolveHashFragment", "_resolveHashFragment", "FLP");
|
|
1419
|
-
const oParsedShellHash = this.oURLParsing.parseShellHash(sShellHash) || {}; // might be empty in tests
|
|
1361
|
+
const oParsedShellHash = UrlParsing.parseShellHash(sShellHash) || {}; // might be empty in tests
|
|
1420
1362
|
const oConfig = this._getConfig(); // for testing
|
|
1363
|
+
let oResolvedHashFragment;
|
|
1421
1364
|
|
|
1422
1365
|
// Check and use resolved hash fragment from direct start promise if it's there
|
|
1423
1366
|
if (window["sap-ushell-async-libs-promise-directstart"]) {
|
|
1424
1367
|
try {
|
|
1425
1368
|
const oDirectstartPromiseResult = await window["sap-ushell-async-libs-promise-directstart"];
|
|
1426
1369
|
delete window["sap-ushell-async-libs-promise-directstart"];
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
parsedShellHash: oParsedShellHash
|
|
1430
|
-
};
|
|
1370
|
+
|
|
1371
|
+
oResolvedHashFragment = oDirectstartPromiseResult.resolvedHashFragment;
|
|
1431
1372
|
} catch (oError) {
|
|
1432
1373
|
delete window["sap-ushell-async-libs-promise-directstart"];
|
|
1433
1374
|
throw oError;
|
|
1434
1375
|
}
|
|
1376
|
+
} else {
|
|
1377
|
+
// Perform target resolution as normal...
|
|
1378
|
+
const NavTargetResolutionInternal = await Container.getServiceAsync("NavTargetResolutionInternal");
|
|
1379
|
+
oResolvedHashFragment = await ushellUtils.promisify(NavTargetResolutionInternal.resolveHashFragment(sShellHash));
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
// Only for testing: return without result if the NavTargetResolutionInternal resolved nothing
|
|
1383
|
+
if (!oResolvedHashFragment && window.QUnit !== undefined && !window._bTestNullNavigationMode) {
|
|
1384
|
+
return;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
if (!oResolvedHashFragment) {
|
|
1388
|
+
// indicate that resolving failed
|
|
1389
|
+
oResolvedHashFragment = {
|
|
1390
|
+
navigationMode: null
|
|
1391
|
+
};
|
|
1435
1392
|
}
|
|
1436
1393
|
|
|
1437
|
-
// Perform target resolution as normal...
|
|
1438
|
-
const NavTargetResolutionInternal = await Container.getServiceAsync("NavTargetResolutionInternal");
|
|
1439
|
-
const oResolvedHashFragment = await ushellUtils.promisify(NavTargetResolutionInternal.resolveHashFragment(sShellHash)) || {}; // might be empty in tests
|
|
1440
|
-
//@FIXME: Should be also executed for directstart
|
|
1441
1394
|
AppConfiguration.setCurrentApplication(oResolvedHashFragment);
|
|
1395
|
+
|
|
1396
|
+
// add application config to the application properties
|
|
1397
|
+
const sBasicHash = UrlParsing.getBasicHash(sShellHash);
|
|
1398
|
+
if (oConfig?.applications?.[sBasicHash]) {
|
|
1399
|
+
oResolvedHashFragment.applicationConfiguration = oConfig.applications[sBasicHash];
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
// adding intent as this published application info is required for the contact-support scenario
|
|
1403
|
+
oResolvedHashFragment.sFixedShellHash = sShellHash;
|
|
1404
|
+
|
|
1442
1405
|
// Override navigation mode for root intent.
|
|
1443
1406
|
// Shell home should be opened in embedded mode to allow a new window to be opened from GUI applications.
|
|
1444
|
-
if (
|
|
1445
|
-
oResolvedHashFragment.navigationMode =
|
|
1407
|
+
if (`${oParsedShellHash.semanticObject}-${oParsedShellHash.action}` === oConfig.rootIntent) {
|
|
1408
|
+
oResolvedHashFragment.navigationMode = NavigationMode.embedded;
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
// todo: [FLPCOREANDUX-10024] move any navigationMode logic to sap/ushell/navigationMode
|
|
1412
|
+
if (oResolvedHashFragment.navigationMode !== null && !oResolvedHashFragment.navigationMode) {
|
|
1413
|
+
Log.error(
|
|
1414
|
+
"Mandatory member 'navigationMode' is missing in the resolution result! Temporarily set to 'embedded' for further processing...",
|
|
1415
|
+
"sap.ushell.renderer.Shell.controller"
|
|
1416
|
+
);
|
|
1417
|
+
oResolvedHashFragment.navigationMode = NavigationMode.embedded;
|
|
1446
1418
|
}
|
|
1447
|
-
|
|
1419
|
+
|
|
1420
|
+
// override the navigation mode based on the current state of the Shell and application
|
|
1421
|
+
this._setEffectiveNavigationMode(oResolvedHashFragment);
|
|
1422
|
+
|
|
1448
1423
|
ushellUtils.setPerformanceMark("FLP-ShellController-resolveHashFragment-end");
|
|
1449
1424
|
|
|
1450
1425
|
return {
|
|
@@ -1455,24 +1430,19 @@ sap.ui.define([
|
|
|
1455
1430
|
|
|
1456
1431
|
/**
|
|
1457
1432
|
* Adjust Navigation mode based on current state of the Shell and application and the ResolveHashFragment bo be started
|
|
1458
|
-
*
|
|
1459
|
-
* This operation mutates oResolvedHashFragment
|
|
1460
|
-
*
|
|
1461
|
-
* {@link #navigate}.
|
|
1433
|
+
* This operation mutates oResolvedHashFragment {@link #navigate}.
|
|
1462
1434
|
*
|
|
1463
1435
|
* @param {object} oResolvedHashFragment the hash fragment resolved via {@link sap.ushell.services.NavTargetResolutionInternal#resolveHashFragment}
|
|
1464
|
-
*
|
|
1465
|
-
* For navigation in new window, the URL is replaced with the current location hash.
|
|
1466
|
-
* NOTE: refactor this; we should not have these implicit changes of the navigation target
|
|
1436
|
+
*
|
|
1467
1437
|
* @private
|
|
1468
1438
|
*/
|
|
1469
|
-
|
|
1439
|
+
_setEffectiveNavigationMode: function (oResolvedHashFragment) {
|
|
1470
1440
|
if (!oResolvedHashFragment) {
|
|
1471
1441
|
return; // happens in tests
|
|
1472
1442
|
}
|
|
1473
1443
|
const sNavigationMode = oResolvedHashFragment.navigationMode;
|
|
1474
1444
|
|
|
1475
|
-
if (sNavigationMode ===
|
|
1445
|
+
if (sNavigationMode === NavigationMode.newWindowThenEmbedded) {
|
|
1476
1446
|
// Implement newWindowThenEmbedded based on current state.
|
|
1477
1447
|
if (ushellUtils.isColdStart() || Ui5History.getInstance().getDirection() === Ui5HistoryDirection.Backwards) {
|
|
1478
1448
|
/*
|
|
@@ -1482,9 +1452,9 @@ sap.ui.define([
|
|
|
1482
1452
|
* Ui5History.getInstance().getDirection()
|
|
1483
1453
|
* -> URL has already been navigated to and it was the predecessor of the previous page
|
|
1484
1454
|
*/
|
|
1485
|
-
oResolvedHashFragment.navigationMode =
|
|
1455
|
+
oResolvedHashFragment.navigationMode = NavigationMode.embedded;
|
|
1486
1456
|
} else {
|
|
1487
|
-
oResolvedHashFragment.navigationMode =
|
|
1457
|
+
oResolvedHashFragment.navigationMode = NavigationMode.newWindow;
|
|
1488
1458
|
// if its a non-native navigation, we resolve the hash again in the new window
|
|
1489
1459
|
// we set the full current location hash as URL for the new window as it is
|
|
1490
1460
|
// for avoiding encoding issues and stripping off parameters or inner-app route
|
|
@@ -1493,27 +1463,26 @@ sap.ui.define([
|
|
|
1493
1463
|
oResolvedHashFragment.url = this._getCurrentLocationHash();
|
|
1494
1464
|
}
|
|
1495
1465
|
}
|
|
1496
|
-
return
|
|
1466
|
+
return;
|
|
1497
1467
|
}
|
|
1498
1468
|
|
|
1499
|
-
if (sNavigationMode ===
|
|
1469
|
+
if (sNavigationMode === NavigationMode.newWindow && ushellUtils.isColdStart()) {
|
|
1500
1470
|
// Workaround for URLs that start an FLP app which needs the shell.
|
|
1501
1471
|
if (this._hasAppCapabilitiesNavigationMode(oResolvedHashFragment)
|
|
1502
|
-
&& oResolvedHashFragment.appCapabilities.navigationMode ===
|
|
1503
|
-
oResolvedHashFragment.navigationMode =
|
|
1472
|
+
&& oResolvedHashFragment.appCapabilities.navigationMode === NavigationMode.embedded) {
|
|
1473
|
+
oResolvedHashFragment.navigationMode = NavigationMode.embedded;
|
|
1504
1474
|
return oResolvedHashFragment;
|
|
1505
1475
|
}
|
|
1506
1476
|
// Replace the content of the current window if the user has already opened one.
|
|
1507
|
-
oResolvedHashFragment.navigationMode =
|
|
1508
|
-
return
|
|
1477
|
+
oResolvedHashFragment.navigationMode = NavigationMode.replace;
|
|
1478
|
+
return;
|
|
1509
1479
|
}
|
|
1510
1480
|
|
|
1511
|
-
if (sNavigationMode ===
|
|
1481
|
+
if (sNavigationMode === NavigationMode.newWindow
|
|
1512
1482
|
&& this._hasAppCapabilitiesNavigationMode(oResolvedHashFragment)
|
|
1513
|
-
&& oResolvedHashFragment.appCapabilities.navigationMode ===
|
|
1483
|
+
&& oResolvedHashFragment.appCapabilities.navigationMode === NavigationMode.embedded) {
|
|
1514
1484
|
oResolvedHashFragment.url = this._getCurrentLocationHash();
|
|
1515
1485
|
}
|
|
1516
|
-
return oResolvedHashFragment;
|
|
1517
1486
|
},
|
|
1518
1487
|
|
|
1519
1488
|
// Workaround for URLs that start an FLP app which needs the shell.
|
|
@@ -1523,106 +1492,137 @@ sap.ui.define([
|
|
|
1523
1492
|
|
|
1524
1493
|
_usesNavigationRedirect: async function (oComponentHandle) {
|
|
1525
1494
|
if (!oComponentHandle) {
|
|
1526
|
-
|
|
1495
|
+
return false;
|
|
1527
1496
|
}
|
|
1528
1497
|
|
|
1529
1498
|
const oComponent = oComponentHandle.getInstance({});
|
|
1530
1499
|
if (!oComponent) {
|
|
1531
|
-
|
|
1500
|
+
return false;
|
|
1532
1501
|
}
|
|
1533
1502
|
|
|
1534
1503
|
if (typeof oComponent.navigationRedirect !== "function") {
|
|
1535
|
-
|
|
1504
|
+
return false;
|
|
1536
1505
|
}
|
|
1537
1506
|
|
|
1538
1507
|
// oComponent refers to a trampoline application
|
|
1539
1508
|
const oNavRedirectThenable = oComponent.navigationRedirect();
|
|
1540
1509
|
if (!oNavRedirectThenable || typeof oNavRedirectThenable.then !== "function") {
|
|
1541
|
-
|
|
1510
|
+
return false;
|
|
1542
1511
|
}
|
|
1543
1512
|
|
|
1544
|
-
|
|
1545
|
-
|
|
1513
|
+
try {
|
|
1514
|
+
const sNextHash = await ushellUtils.promisify(oNavRedirectThenable);
|
|
1515
|
+
Log.warning(`Performing navigation redirect to hash "${sNextHash}"`);
|
|
1546
1516
|
|
|
1547
|
-
|
|
1548
|
-
|
|
1517
|
+
oComponent.destroy();
|
|
1518
|
+
this.history.pop();
|
|
1519
|
+
|
|
1520
|
+
const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
|
|
1521
|
+
ShellNavigationInternal.toExternal({ target: { shellHash: sNextHash } }, undefined, false);
|
|
1522
|
+
|
|
1523
|
+
return true;
|
|
1524
|
+
} catch {
|
|
1525
|
+
return false;
|
|
1526
|
+
}
|
|
1549
1527
|
|
|
1550
|
-
const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
|
|
1551
|
-
ShellNavigationInternal.toExternal({ target: { shellHash: sNextHash } }, undefined, false);
|
|
1552
|
-
return true;
|
|
1553
1528
|
},
|
|
1554
1529
|
|
|
1555
1530
|
/**
|
|
1556
1531
|
* Performs navigation based on the given resolved hash fragment.
|
|
1557
1532
|
*
|
|
1558
1533
|
* @param {object} oParsedShellHash the parsed shell hash obtained via {@link sap.ushell.services.URLParsing} service
|
|
1559
|
-
* @param {string}
|
|
1560
|
-
* @param {object} oMetadata the metadata object obtained via {@link sap.ushell.services.AppConfiguration#parseShellHash}
|
|
1534
|
+
* @param {string} sShellHash the hash fragment to navigate to. It must start with "#" (i.e., fixed).
|
|
1561
1535
|
* @param {object} oResolvedHashFragment the hash fragment resolved via {@link sap.ushell.services.NavTargetResolutionInternal#resolveHashFragment}
|
|
1536
|
+
* @param {string} sOldShellHash the old hash fragment. It must start with "#" (i.e., fixed).
|
|
1537
|
+
* @param {string} sAppPart the application part
|
|
1562
1538
|
*
|
|
1563
1539
|
* @returns {Promise} Navigation Promise
|
|
1564
1540
|
*/
|
|
1565
|
-
|
|
1566
|
-
//
|
|
1567
|
-
Measurement.start("FLP:ShellController.navigate", "navigate", "FLP");
|
|
1568
|
-
let sNavigationMode = (isPlainObject(oResolvedHashFragment) ? oResolvedHashFragment.navigationMode : null);
|
|
1541
|
+
_openAppInplace: async function (oParsedShellHash, sShellHash, oResolvedHashFragment, sOldShellHash, sAppPart, oOldResolvedHashFragment) {
|
|
1542
|
+
// todo: [FLPCOREANDUX-10024] check the parameters sent to the AI methods
|
|
1569
1543
|
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
* However, we need to restore the current hash to the previous one.
|
|
1573
|
-
* If cold start happened (history has only one entry), we go to the shell home.
|
|
1574
|
-
*/
|
|
1575
|
-
if (sNavigationMode === null) {
|
|
1576
|
-
if (ushellUtils.isColdStart()) {
|
|
1577
|
-
window.hasher.setHash("");
|
|
1578
|
-
return;
|
|
1579
|
-
}
|
|
1544
|
+
const bNavigationFromHome = this._isFLPIntent(sOldShellHash);
|
|
1545
|
+
const bNavigationWithInnerAppRoute = !!sAppPart;
|
|
1580
1546
|
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
this._windowHistoryBack(1);
|
|
1584
|
-
return;
|
|
1585
|
-
}
|
|
1547
|
+
// Close dialogs only for inplace navigation
|
|
1548
|
+
this._closeAllDialogs();
|
|
1586
1549
|
|
|
1587
|
-
|
|
1588
|
-
sNavigationMode = (isPlainObject(oResolvedHashFragment) ? oResolvedHashFragment.navigationMode : null);
|
|
1550
|
+
await AppLifeCycleAI.handleBeforeCreateApp(sShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute);
|
|
1589
1551
|
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1552
|
+
// Enhances the resolved hash fragment with the componentHandle for UI5 apps
|
|
1553
|
+
await AppLifeCycleAI.handleCreateApp(sShellHash, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute);
|
|
1554
|
+
|
|
1555
|
+
// todo: [FLPCOREANDUX-10024] Validate the issue
|
|
1556
|
+
// the activation of user activity logging must be done after the app component is fully loaded
|
|
1557
|
+
// otherwise the module loading sequence causes race conditions on firefox
|
|
1558
|
+
const bContactSupportEnabled = Config.last("/core/extension/SupportTicket");
|
|
1559
|
+
if (bContactSupportEnabled) {
|
|
1560
|
+
ushellUtils.awaitTimeout(0)
|
|
1561
|
+
.then(() => {
|
|
1562
|
+
return ushellUtils.requireAsync("sap/ushell/UserActivityLog");
|
|
1563
|
+
})
|
|
1564
|
+
.then(([UserActivityLog]) => {
|
|
1565
|
+
UserActivityLog.activate();
|
|
1566
|
+
});
|
|
1596
1567
|
}
|
|
1597
1568
|
|
|
1598
|
-
|
|
1599
|
-
|
|
1569
|
+
const sEffectiveNavigationMode = oResolvedHashFragment.navigationMode;
|
|
1570
|
+
if (sEffectiveNavigationMode === NavigationMode.embedded) {
|
|
1571
|
+
if (!ushellUtils.isColdStart() && !this._bWasHistoryEntryReplaced) {
|
|
1600
1572
|
this.oShellNavigationInternal.setIsInitialNavigation(false);
|
|
1601
1573
|
}
|
|
1602
1574
|
|
|
1603
|
-
|
|
1575
|
+
// The trampoline application subsequently gets destroyed after it's used to enable the redirection.
|
|
1576
|
+
const bHandledByNavigationRedirect = await this._usesNavigationRedirect(oResolvedHashFragment.componentHandle);
|
|
1577
|
+
if (bHandledByNavigationRedirect) {
|
|
1578
|
+
// todo: [FLPCOREANDUX-10024] check cleanup stuff (StateManager, ...)
|
|
1579
|
+
return;
|
|
1580
|
+
}
|
|
1604
1581
|
|
|
1605
|
-
|
|
1606
|
-
await this._usesNavigationRedirect(oResolvedHashFragment.componentHandle);
|
|
1607
|
-
/*
|
|
1608
|
-
* When `_usesNavigationRedirect` succeeds, it implies the component references a trampoline application.
|
|
1609
|
-
* The trampoline application subsequently gets destroyed after it's used to enable the redirection.
|
|
1610
|
-
* The failure is being used here as a means for branching in the execution flow.
|
|
1611
|
-
*/
|
|
1612
|
-
} catch {
|
|
1613
|
-
await this._handleEmbeddedNavMode(sFixedShellHash, oParsedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash);
|
|
1582
|
+
AppLifeCycleAI.resetGlobalShellUIService();
|
|
1614
1583
|
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1584
|
+
const oShellConfig = this._getConfig();
|
|
1585
|
+
const sBasicShellHash = UrlParsing.getBasicHash(sShellHash);
|
|
1586
|
+
|
|
1587
|
+
await AppLifeCycleAI.handleCreateApplicationContainer(
|
|
1588
|
+
sBasicShellHash, // sAppId
|
|
1589
|
+
oParsedShellHash,
|
|
1590
|
+
oResolvedHashFragment,
|
|
1591
|
+
sOldShellHash
|
|
1592
|
+
);
|
|
1593
|
+
|
|
1594
|
+
// todo: [FLPCOREANDUX-10024] TBD
|
|
1595
|
+
AppLifeCycleAI.navToCurrentApp(); // todo: [FLPCOREANDUX-10024] triggers appLoaded event
|
|
1596
|
+
|
|
1597
|
+
// @Alon Barnes: Is this call even needed? The beforehand given oMetadata has not included the accessed property in the AppMeta.js
|
|
1598
|
+
// So, maybe this call can even be removed?
|
|
1599
|
+
AppMeta.setAppIcons();
|
|
1600
|
+
|
|
1601
|
+
// todo: [FLPCOREANDUX-10024] should this be done after handleControl?
|
|
1602
|
+
// this only targets the overwritten rootIntent (e.g. workzone advanced)
|
|
1603
|
+
const bIsNavToHome = sShellHash === "#" || (oShellConfig.rootIntent && sBasicShellHash === UrlParsing.getBasicHash(oShellConfig.rootIntent));
|
|
1604
|
+
AppLifeCycleAI.switchViewState(
|
|
1605
|
+
bIsNavToHome ? LaunchpadState.Home : LaunchpadState.App,
|
|
1606
|
+
sBasicShellHash, // sAppId
|
|
1607
|
+
oResolvedHashFragment.applicationType,
|
|
1608
|
+
oResolvedHashFragment.explicitNavMode
|
|
1609
|
+
);
|
|
1610
|
+
|
|
1611
|
+
// todo: [FLPCOREANDUX-10024] check whether this needs to be awaited
|
|
1612
|
+
await AppLifeCycleAI.handleAfterNavigate(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1613
|
+
|
|
1614
|
+
/*
|
|
1615
|
+
* The event is used for FESR records
|
|
1616
|
+
* Normally FESR record is closed on the "AppRendered" event, but for some cases (stateful container, etc.)
|
|
1617
|
+
* the application container is not re-rendered and EmbeddedNavigationDone is additionally fired to close the record.
|
|
1618
|
+
*/
|
|
1619
|
+
const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
|
|
1620
|
+
EventHub.emit("CloseFesrRecord", { time: Date.now(), technicalName: oMetadata.technicalName });
|
|
1622
1621
|
return;
|
|
1623
1622
|
}
|
|
1624
1623
|
|
|
1625
|
-
|
|
1624
|
+
// todo: [FLPCOREANDUX-10024] clarify whether there is an actual use case of replace navigation which requires the steps above
|
|
1625
|
+
if (sEffectiveNavigationMode === NavigationMode.replace) {
|
|
1626
1626
|
this.oShellNavigationInternal.setIsInitialNavigation(false);
|
|
1627
1627
|
// restore hash
|
|
1628
1628
|
this.bEnableHashChange = false;
|
|
@@ -1630,14 +1630,15 @@ sap.ui.define([
|
|
|
1630
1630
|
return;
|
|
1631
1631
|
}
|
|
1632
1632
|
|
|
1633
|
-
if (sNavigationMode === oNavigationMode.newWindow) {
|
|
1634
|
-
this._openAppInNewWindowAndRestore(oResolvedHashFragment);
|
|
1635
|
-
return;
|
|
1636
|
-
}
|
|
1637
|
-
|
|
1638
1633
|
// the navigation mode doesn't match any valid one.
|
|
1639
1634
|
// In this case an error message is logged and previous hash is fetched
|
|
1640
|
-
await this.hashChangeFailure(
|
|
1635
|
+
await this.hashChangeFailure(
|
|
1636
|
+
this.history.getHistoryLength(),
|
|
1637
|
+
`Navigation mode '${sEffectiveNavigationMode}' was not recognized`,
|
|
1638
|
+
null,
|
|
1639
|
+
"sap.ushell.renderer.Shell.controller",
|
|
1640
|
+
false
|
|
1641
|
+
);
|
|
1641
1642
|
},
|
|
1642
1643
|
|
|
1643
1644
|
/**
|
|
@@ -1648,7 +1649,7 @@ sap.ui.define([
|
|
|
1648
1649
|
*
|
|
1649
1650
|
* @private
|
|
1650
1651
|
*/
|
|
1651
|
-
_openAppViaNWBC: async function (oResolvedHashFragment) {
|
|
1652
|
+
_openAppViaNWBC: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
|
|
1652
1653
|
const bNwbcHandling = oResolvedHashFragment && (ushellUtils.isNativeWebGuiNavigation(oResolvedHashFragment) || oResolvedHashFragment.nativeNWBCNavigation);
|
|
1653
1654
|
|
|
1654
1655
|
if (!bNwbcHandling) {
|
|
@@ -1660,7 +1661,7 @@ sap.ui.define([
|
|
|
1660
1661
|
|
|
1661
1662
|
let iMode;
|
|
1662
1663
|
if (ushellUtils.hasNavigationModeCapability()) {
|
|
1663
|
-
iMode = iEPCMNavigationMode || oEPCMNavigationMode[
|
|
1664
|
+
iMode = iEPCMNavigationMode || oEPCMNavigationMode[NavigationMode.embedded];
|
|
1664
1665
|
}
|
|
1665
1666
|
|
|
1666
1667
|
const sUrlWithSapUser = await this._appendUserIdToUrl("sap-user", oResolvedHashFragment.url);
|
|
@@ -1704,7 +1705,7 @@ sap.ui.define([
|
|
|
1704
1705
|
}
|
|
1705
1706
|
EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
|
|
1706
1707
|
|
|
1707
|
-
await this._restoreAfterNwbcNavigation(oResolvedHashFragment);
|
|
1708
|
+
await this._restoreAfterNwbcNavigation(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1708
1709
|
/*
|
|
1709
1710
|
* TODO: This is a workaround.
|
|
1710
1711
|
* We should rather update the resolvedHashFragment before the navigation happens. Other Components listening
|
|
@@ -1739,7 +1740,7 @@ sap.ui.define([
|
|
|
1739
1740
|
* @returns {Promise} A Promise resolving when the hash is restored.
|
|
1740
1741
|
* @private
|
|
1741
1742
|
*/
|
|
1742
|
-
_restoreAfterNwbcNavigation: async function (oResolvedHashFragment) {
|
|
1743
|
+
_restoreAfterNwbcNavigation: async function (oResolvedHashFragment, oOldResolvedHashFragment) {
|
|
1743
1744
|
if (this.history.getHistoryLength() === 1 && !this._oAppLifeCycleService.getCurrentApplication()) {
|
|
1744
1745
|
// Deep link case
|
|
1745
1746
|
const Navigation = await Container.getServiceAsync("Navigation");
|
|
@@ -1748,7 +1749,7 @@ sap.ui.define([
|
|
|
1748
1749
|
}
|
|
1749
1750
|
|
|
1750
1751
|
// Regular case
|
|
1751
|
-
this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment);
|
|
1752
|
+
this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment, oOldResolvedHashFragment);
|
|
1752
1753
|
},
|
|
1753
1754
|
|
|
1754
1755
|
/**
|
|
@@ -1773,7 +1774,7 @@ sap.ui.define([
|
|
|
1773
1774
|
* The method restore the previous hash when app is opened in the new tab
|
|
1774
1775
|
* @param {*} oResolvedHashFragment resolved hash fragment
|
|
1775
1776
|
*/
|
|
1776
|
-
_restorePreviousHashAfterOpenNewWindow: function (oResolvedHashFragment) {
|
|
1777
|
+
_restorePreviousHashAfterOpenNewWindow: function (oResolvedHashFragment, oOldResolvedHashFragment) {
|
|
1777
1778
|
this.history.pop();
|
|
1778
1779
|
const oVarInstance = oResolvedHashFragment.componentHandle && oResolvedHashFragment.componentHandle.getInstance
|
|
1779
1780
|
&& oResolvedHashFragment.componentHandle.getInstance({});
|
|
@@ -1785,178 +1786,14 @@ sap.ui.define([
|
|
|
1785
1786
|
this._windowHistoryBack(1);
|
|
1786
1787
|
|
|
1787
1788
|
// set back the current application to be the one before this navigation occurred as current application is opened in a new window
|
|
1788
|
-
AppConfiguration.setCurrentApplication(
|
|
1789
|
+
AppConfiguration.setCurrentApplication(oOldResolvedHashFragment);
|
|
1789
1790
|
EventHub.emit("openedAppInNewWindow", Date.now());
|
|
1790
1791
|
},
|
|
1791
1792
|
|
|
1792
|
-
_openAppInNewWindowAndRestore: function (oResolvedHashFragment) {
|
|
1793
|
-
EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
|
|
1794
|
-
this._openAppNewWindow(oResolvedHashFragment.url);
|
|
1795
|
-
EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
|
|
1796
|
-
this._restorePreviousHashAfterOpenNewWindow(oResolvedHashFragment);
|
|
1797
|
-
},
|
|
1798
|
-
|
|
1799
|
-
_handleEmbeddedNavMode: async function (sFixedShellHash, oParsedShellHash, oMetadata, oResolvedHashFragment, sOldFixedShellHash) {
|
|
1800
|
-
// Performance Debug
|
|
1801
|
-
Measurement.start("FLP:ShellController._handleEmbeddedNavMode", "_handleEmbeddedNavMode", "FLP");
|
|
1802
|
-
const oConfig = this._getConfig();
|
|
1803
|
-
|
|
1804
|
-
AppLifeCycleAI.getShellUIService()?.resetService?.();
|
|
1805
|
-
AppLifeCycleAI.setBackNavigationChanged(false);
|
|
1806
|
-
|
|
1807
|
-
// @Alon Barnes: Is this call even needed? The beforehand given oMetadata has not included the accessed property in the AppMeta.js
|
|
1808
|
-
// So, maybe this call can even be removed?
|
|
1809
|
-
AppMeta.setAppIcons();
|
|
1810
|
-
|
|
1811
|
-
// obtain a unique id for the app (or the component)
|
|
1812
|
-
const sAppId = `-${oParsedShellHash.semanticObject}-${oParsedShellHash.action}`;
|
|
1813
|
-
|
|
1814
|
-
const bIsNavToHome = sFixedShellHash === "#" ||
|
|
1815
|
-
(oConfig.rootIntent && ushellUtils.getBasicHash(oConfig.rootIntent) === `${oParsedShellHash.semanticObject}-${oParsedShellHash.action}`);
|
|
1816
|
-
|
|
1817
|
-
// Support migration from version 1.28 or lower in case local resolution for empty hash was used
|
|
1818
|
-
const sIntent = oParsedShellHash ? `${oParsedShellHash.semanticObject}-${oParsedShellHash.action}` : "";
|
|
1819
|
-
|
|
1820
|
-
AppLifeCycleAI.switchViewState(
|
|
1821
|
-
bIsNavToHome ? LaunchpadState.Home : LaunchpadState.App,
|
|
1822
|
-
sAppId,
|
|
1823
|
-
oResolvedHashFragment.applicationType,
|
|
1824
|
-
oResolvedHashFragment.explicitNavMode
|
|
1825
|
-
);
|
|
1826
|
-
|
|
1827
|
-
if (bIsNavToHome) {
|
|
1828
|
-
AppLifeCycleAI.getShellUIService().setBackNavigation();
|
|
1829
|
-
}
|
|
1830
|
-
|
|
1831
|
-
// adding intent as this published application info is required for the contact-support scenario
|
|
1832
|
-
oResolvedHashFragment.sFixedShellHash = sFixedShellHash;
|
|
1833
|
-
|
|
1834
|
-
const oHandleControlPromise = AppLifeCycleAI.handleControl(
|
|
1835
|
-
sIntent,
|
|
1836
|
-
sAppId,
|
|
1837
|
-
oParsedShellHash,
|
|
1838
|
-
oResolvedHashFragment,
|
|
1839
|
-
this.getWrappedApplicationWithMoreStrictnessInIntention.bind(this),
|
|
1840
|
-
sFixedShellHash,
|
|
1841
|
-
sOldFixedShellHash
|
|
1842
|
-
);
|
|
1843
|
-
|
|
1844
|
-
if (this.currentAppBeforeNav) {
|
|
1845
|
-
// todo: [FLPCOREANDUX-10024] check whether this needs to be awaited
|
|
1846
|
-
if (ushellUtils.isTRApplicationType(this.currentAppBeforeNav.applicationType, ObjectPath.get("appCapabilities.appFrameworkId", this.currentAppBeforeNav)) &&
|
|
1847
|
-
!ushellUtils.isTRApplicationType(oResolvedHashFragment.applicationType)) {
|
|
1848
|
-
sap.ui.require([
|
|
1849
|
-
"sap/ushell/components/applicationIntegration/application/BlueBoxHandler",
|
|
1850
|
-
"sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler"
|
|
1851
|
-
], (
|
|
1852
|
-
BlueBoxHandler,
|
|
1853
|
-
WebGUIStatefulHandler
|
|
1854
|
-
) => {
|
|
1855
|
-
const oPreviousStatefulContainer = BlueBoxHandler.getBlueBoxByUrl(this.currentAppBeforeNav.url);
|
|
1856
|
-
if (oPreviousStatefulContainer && oPreviousStatefulContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
|
|
1857
|
-
WebGUIStatefulHandler.guiStatefulCloseCurrentApp(oPreviousStatefulContainer);
|
|
1858
|
-
}
|
|
1859
|
-
});
|
|
1860
|
-
}
|
|
1861
|
-
}
|
|
1862
|
-
|
|
1863
|
-
Measurement.end("FLP:ShellController._handleEmbeddedNavMode");
|
|
1864
|
-
|
|
1865
|
-
await oHandleControlPromise;
|
|
1866
|
-
},
|
|
1867
|
-
|
|
1868
1793
|
_isShellHomeIntent: function (sIntent) {
|
|
1869
1794
|
return sIntent === "#" || sIntent === oConfig.rootIntent;
|
|
1870
1795
|
},
|
|
1871
1796
|
|
|
1872
|
-
// Please help improve the strictness of this method.
|
|
1873
|
-
getWrappedApplicationWithMoreStrictnessInIntention: function (sIntent, oMetadata, oShellHash, oResolvedNavigationTarget, sAppId, bFullWidth, sFixedShellHash) {
|
|
1874
|
-
if (Device.system.desktop) {
|
|
1875
|
-
sap.ui.require(["sap/ushell/renderer/AccessKeysHandler"], (AccessKeysHandler) => {
|
|
1876
|
-
const sCurrentLaunchpadState = StateManager.getLaunchpadState();
|
|
1877
|
-
const bDefaultShellMode = StateManager.getShellMode() === ShellMode.Default;
|
|
1878
|
-
const oShellAppTitle = Element.getElementById("shellAppTitle");
|
|
1879
|
-
|
|
1880
|
-
if (oShellAppTitle && sCurrentLaunchpadState === LaunchpadState.App && bDefaultShellMode) {
|
|
1881
|
-
const oShellAppTitleDomRef = oShellAppTitle.getFocusDomRef();
|
|
1882
|
-
if (oShellAppTitleDomRef) {
|
|
1883
|
-
AccessKeysHandler.sendFocusBackToShell(oShellAppTitleDomRef.getAttribute("id"));
|
|
1884
|
-
}
|
|
1885
|
-
}
|
|
1886
|
-
});
|
|
1887
|
-
}
|
|
1888
|
-
|
|
1889
|
-
window.setTimeout(() => {
|
|
1890
|
-
window.setTimeout(() => {
|
|
1891
|
-
//Screen reader: "Loading Complete"
|
|
1892
|
-
this.readNavigationEnd();
|
|
1893
|
-
}, 600);
|
|
1894
|
-
|
|
1895
|
-
EventBus.getInstance().publish("launchpad", "appOpening", oResolvedNavigationTarget);
|
|
1896
|
-
Log.info("app is being opened");
|
|
1897
|
-
}, 0);
|
|
1898
|
-
if (oConfig.applications) {
|
|
1899
|
-
oResolvedNavigationTarget.applicationConfiguration = oConfig.applications[sIntent];
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1902
|
-
const oAppContainer = AppLifeCycleAI.getAppContainer(sAppId, oResolvedNavigationTarget, ushellUtils.isColdStart(), oShellHash, sFixedShellHash);
|
|
1903
|
-
let bContainerFromCachePool = false;
|
|
1904
|
-
if (oAppContainer.getIsFetchedFromCache && oAppContainer.getIsFetchedFromCache()) {
|
|
1905
|
-
bContainerFromCachePool = true;
|
|
1906
|
-
}
|
|
1907
|
-
|
|
1908
|
-
if (!bContainerFromCachePool) {
|
|
1909
|
-
AppLifeCycleAI.publishNavigationStateEvents(oAppContainer, oResolvedNavigationTarget, this.onAppAfterRendering.bind(this, oResolvedNavigationTarget));
|
|
1910
|
-
|
|
1911
|
-
if (ushellUtils.isSAPLegacyApplicationType(oAppContainer.getApplicationType(), oAppContainer.getFrameworkId())) {
|
|
1912
|
-
oAppContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
|
|
1913
|
-
}
|
|
1914
|
-
|
|
1915
|
-
if (!bFullWidth) {
|
|
1916
|
-
oAppContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1917
|
-
}
|
|
1918
|
-
|
|
1919
|
-
if (this._isFloatingContainerDocked() && window.matchMedia("(min-width: 106.4rem)").matches) {
|
|
1920
|
-
oAppContainer.addStyleClass("sapUShellDockingContainer");
|
|
1921
|
-
oAppContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1922
|
-
} else if (this._isFloatingContainerDocked()) {
|
|
1923
|
-
oAppContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1924
|
-
}
|
|
1925
|
-
|
|
1926
|
-
oAppContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
|
|
1927
|
-
|
|
1928
|
-
AppMeta._applyContentDensityByPriority();
|
|
1929
|
-
|
|
1930
|
-
// Add inner control for next request
|
|
1931
|
-
AppLifeCycleAI.addControl(oAppContainer);
|
|
1932
|
-
}
|
|
1933
|
-
|
|
1934
|
-
ushellUtils.setPerformanceMark("FLP - addAppContainer");
|
|
1935
|
-
|
|
1936
|
-
Measurement.end("FLP:ShellController.getWrappedApplication");
|
|
1937
|
-
return oAppContainer;
|
|
1938
|
-
},
|
|
1939
|
-
|
|
1940
|
-
onAppAfterRendering: function (oApplication) {
|
|
1941
|
-
// wrapped in setTimeout since "publish" is not async
|
|
1942
|
-
window.setTimeout(() => {
|
|
1943
|
-
EventBus.getInstance().publish("sap.ushell", "appOpened", oApplication);
|
|
1944
|
-
Log.info("app was opened");
|
|
1945
|
-
}, 0);
|
|
1946
|
-
|
|
1947
|
-
// publish the event externally
|
|
1948
|
-
// TODO: cloned, frozen object!
|
|
1949
|
-
const oAppOpenedEventData = AppLifeCycleAI._publicEventDataFromResolutionResult(oApplication);
|
|
1950
|
-
|
|
1951
|
-
// Event is emitted internally (EventHub) _and_ externally (for compatibility reasons)
|
|
1952
|
-
EventHub.emit("AppRendered", oAppOpenedEventData, true);
|
|
1953
|
-
RendererUtils.publishExternalEvent("appOpened", oAppOpenedEventData);
|
|
1954
|
-
ushellUtils.setPerformanceMark("FLP.appOpened");
|
|
1955
|
-
|
|
1956
|
-
const sIcon = AppMeta.getAppIcon();
|
|
1957
|
-
StateManager.updateCurrentState("application.icon", Operation.Set, sIcon);
|
|
1958
|
-
},
|
|
1959
|
-
|
|
1960
1797
|
/**
|
|
1961
1798
|
* Adds a listener to the "appComponentLoaded" Event that is published by the "sap.ushell".
|
|
1962
1799
|
* Once the "home app" Component is saved, the listener is removed, and this function will not do anything.
|
|
@@ -1985,12 +1822,6 @@ sap.ui.define([
|
|
|
1985
1822
|
* @returns {Promise} A promise resolving when the error message is shown.
|
|
1986
1823
|
*/
|
|
1987
1824
|
hashChangeFailure: async function (iHistoryLength, vMessage, vDetails, sComponent, bEnableHashChange) {
|
|
1988
|
-
const oDashboard = Element.getElementById("sapUshellDashboardPage");
|
|
1989
|
-
if (oDashboard) {
|
|
1990
|
-
oDashboard.setBlocked(false);
|
|
1991
|
-
oDashboard.setBusy(false);
|
|
1992
|
-
}
|
|
1993
|
-
|
|
1994
1825
|
StateManager.discardStalledChanges();
|
|
1995
1826
|
|
|
1996
1827
|
if (ushellUtils.isPlainObject(vMessage)) {
|
|
@@ -2041,25 +1872,6 @@ sap.ui.define([
|
|
|
2041
1872
|
}
|
|
2042
1873
|
},
|
|
2043
1874
|
|
|
2044
|
-
fixShellHash: function (sShellHash) {
|
|
2045
|
-
if (!sShellHash) {
|
|
2046
|
-
sShellHash = "#";
|
|
2047
|
-
} else if (sShellHash.charAt(0) !== "#") {
|
|
2048
|
-
sShellHash = `#${sShellHash}`;
|
|
2049
|
-
}
|
|
2050
|
-
return sShellHash;
|
|
2051
|
-
},
|
|
2052
|
-
|
|
2053
|
-
_openAppNewWindow: function (sUrl) {
|
|
2054
|
-
const oNewWin = WindowUtils.openURL(sUrl);
|
|
2055
|
-
// Show a message when window.open returns null --> Popup Blocker
|
|
2056
|
-
// Exception: in WorkZone's mobile client, when external nav happens: Keep calm and carry on.
|
|
2057
|
-
if (!oNewWin && !this._checkWindowLocationSearch("workzone-mobile-app=true")) {
|
|
2058
|
-
const msg = ushellResources.i18n.getText("fail_to_start_app_popup_blocker", [window.location.hostname]);
|
|
2059
|
-
this.delayedMessageError(msg);
|
|
2060
|
-
}
|
|
2061
|
-
},
|
|
2062
|
-
|
|
2063
1875
|
_checkWindowLocationSearch: function (sTerm) {
|
|
2064
1876
|
return window.location.search.indexOf(sTerm) > -1;
|
|
2065
1877
|
},
|
|
@@ -2159,15 +1971,14 @@ sap.ui.define([
|
|
|
2159
1971
|
const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
|
|
2160
1972
|
// If the app is kept alive in the background, the fixedShellHash is often not supplied.
|
|
2161
1973
|
// In these cases, we then try to get the hash from the current location.
|
|
2162
|
-
const
|
|
1974
|
+
const sShellHash = oResolvedHashFragment.sFixedShellHash || this._getCurrentLocationHash();
|
|
2163
1975
|
const oRecentEntry = {
|
|
2164
1976
|
title: oMetadata.title,
|
|
2165
1977
|
appType: AppType.APP, // default app type the shell adds is 'Application'
|
|
2166
|
-
url: sAppPart ?
|
|
1978
|
+
url: sAppPart ? sShellHash + sAppPart : sShellHash
|
|
2167
1979
|
};
|
|
2168
1980
|
|
|
2169
|
-
const
|
|
2170
|
-
const oParsed = oURLParsingService.parseShellHash(sFixedShellHash);
|
|
1981
|
+
const oParsed = UrlParsing.parseShellHash(sShellHash);
|
|
2171
1982
|
if (oParsed) {
|
|
2172
1983
|
|
|
2173
1984
|
// This is the key that determines whether an existing activity should be updated or added.
|
|
@@ -2181,16 +1992,16 @@ sap.ui.define([
|
|
|
2181
1992
|
|
|
2182
1993
|
// Perhaps this could be further fixed by hashing a target mapping on the client before returning the resolution
|
|
2183
1994
|
// result, and using the hash as the id.
|
|
2184
|
-
oRecentEntry.appId = `#${
|
|
1995
|
+
oRecentEntry.appId = `#${UrlParsing.constructShellHash({
|
|
2185
1996
|
semanticObject: oParsed.semanticObject,
|
|
2186
1997
|
action: oParsed.action
|
|
2187
1998
|
})}`;
|
|
2188
1999
|
} else {
|
|
2189
|
-
oRecentEntry.appId =
|
|
2000
|
+
oRecentEntry.appId = sShellHash;
|
|
2190
2001
|
}
|
|
2191
2002
|
|
|
2192
2003
|
// The recent activity for searches is done in a different way, see this._logSearchActivity
|
|
2193
|
-
if (
|
|
2004
|
+
if (sShellHash && sShellHash.indexOf("#Action-search") === -1 && sShellHash.indexOf("#Shell-startIntent") === -1) {
|
|
2194
2005
|
await ushellUtils.awaitTimeout(1500);
|
|
2195
2006
|
await this._logRecentActivity(oRecentEntry);
|
|
2196
2007
|
return;
|
|
@@ -2207,12 +2018,11 @@ sap.ui.define([
|
|
|
2207
2018
|
*/
|
|
2208
2019
|
_notifyUITracer: function (oResolvedHashFragment) {
|
|
2209
2020
|
try {
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
}
|
|
2021
|
+
const sApplicationId =
|
|
2022
|
+
oResolvedHashFragment.reservedParameters?.["sap-fiori-id"]?.[0] ||
|
|
2023
|
+
oResolvedHashFragment.reservedParameters?.["sap-ui-app-id-hint"]?.[0] ||
|
|
2024
|
+
oResolvedHashFragment.ui5ComponentName;
|
|
2025
|
+
|
|
2216
2026
|
EventHub.emit("UITracer.trace", {
|
|
2217
2027
|
reason: "NavigateApp",
|
|
2218
2028
|
source: "Intent",
|
|
@@ -2252,19 +2062,6 @@ sap.ui.define([
|
|
|
2252
2062
|
}
|
|
2253
2063
|
},
|
|
2254
2064
|
|
|
2255
|
-
readNavigationEnd: function () {
|
|
2256
|
-
const oAccessibilityHelperLoadingComplete = document.getElementById("sapUshellLoadingAccessibilityHelper-loadingComplete");
|
|
2257
|
-
|
|
2258
|
-
if (oAccessibilityHelperLoadingComplete) {
|
|
2259
|
-
oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "polite");
|
|
2260
|
-
oAccessibilityHelperLoadingComplete.innerHTML = ushellResources.i18n.getText("loadingComplete");
|
|
2261
|
-
window.setTimeout(() => {
|
|
2262
|
-
oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "off");
|
|
2263
|
-
oAccessibilityHelperLoadingComplete.innerHTML = "";
|
|
2264
|
-
}, 0);
|
|
2265
|
-
}
|
|
2266
|
-
},
|
|
2267
|
-
|
|
2268
2065
|
_loadCoreExtNonUI5: function (oAppTarget) {
|
|
2269
2066
|
if (oAppTarget && oAppTarget.applicationType !== "SAPUI5") {
|
|
2270
2067
|
this._loadCoreExt();
|
|
@@ -2329,7 +2126,6 @@ sap.ui.define([
|
|
|
2329
2126
|
|
|
2330
2127
|
// Triggers loading of CoreExt via EventHub
|
|
2331
2128
|
_loadCoreExt: async function () {
|
|
2332
|
-
Measurement.end("FLP:Container.InitLoading");
|
|
2333
2129
|
// Trigger oEventHub.once("loadCoreResourcesComplement") in case homepage is first rendered.
|
|
2334
2130
|
// Usually this is done with resolveHashFragment, but without passing from that path we should trigger it actively.
|
|
2335
2131
|
await Container.getServiceAsync("Ui5ComponentLoader");
|
|
@@ -2490,7 +2286,7 @@ sap.ui.define([
|
|
|
2490
2286
|
_navBack: function () {
|
|
2491
2287
|
// set meAria as closed when navigating back
|
|
2492
2288
|
this.setUserActionsMenuSelected(false);
|
|
2493
|
-
|
|
2289
|
+
RelatedServices.navigateBack();
|
|
2494
2290
|
},
|
|
2495
2291
|
|
|
2496
2292
|
_updateUserPrefModel: function (entryObject, bGrouped) {
|
|
@@ -2586,10 +2382,16 @@ sap.ui.define([
|
|
|
2586
2382
|
EventHub.emit("showNotifications", bSelected);
|
|
2587
2383
|
},
|
|
2588
2384
|
|
|
2589
|
-
|
|
2590
|
-
const
|
|
2591
|
-
const
|
|
2592
|
-
|
|
2385
|
+
_isFLPIntent: function (sHash) {
|
|
2386
|
+
const sBasicHash = UrlParsing.getBasicHash(sHash);
|
|
2387
|
+
const aFLPIntents = [
|
|
2388
|
+
"Shell-home",
|
|
2389
|
+
"Shell-appfinder",
|
|
2390
|
+
"Launchpad-openFLPPage",
|
|
2391
|
+
"Launchpad-openWorkPage"
|
|
2392
|
+
];
|
|
2393
|
+
|
|
2394
|
+
return aFLPIntents.some((sIntent) => sBasicHash === sIntent);
|
|
2593
2395
|
}
|
|
2594
2396
|
});
|
|
2595
2397
|
});
|