@sapui5/sap.ushell 1.133.0 → 1.134.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 +3 -2
- package/src/main/js/sap/ushell/AppInfoParameters.js +18 -4
- package/src/main/js/sap/ushell/ApplicationType/UrlPostProcessing.js +217 -0
- package/src/main/js/sap/ushell/ApplicationType/guiResolution.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/systemAlias.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/ui5Resolution.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/urlResolution.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +14 -7
- package/src/main/js/sap/ushell/ApplicationType/utils.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/wcfResolution.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +1 -1
- package/src/main/js/sap/ushell/ApplicationType.js +1 -1
- package/src/main/js/sap/ushell/CanvasShapesManager.js +1 -1
- package/src/main/js/sap/ushell/Config/utils.js +1 -1
- package/src/main/js/sap/ushell/Config.js +1 -1
- package/src/main/js/sap/ushell/Container.js +1 -1
- package/src/main/js/sap/ushell/EventHub.js +1 -1
- package/src/main/js/sap/ushell/Fiori20Adapter.js +2 -2
- package/src/main/js/sap/ushell/Fiori20AdapterTest.js +2 -2
- package/src/main/js/sap/ushell/Layout.js +1 -1
- package/src/main/js/sap/ushell/NWBCInterface.js +11 -5
- package/src/main/js/sap/ushell/SessionHandler.js +139 -97
- package/src/main/js/sap/ushell/System.js +1 -1
- package/src/main/js/sap/ushell/TechnicalParameters.js +2 -2
- package/src/main/js/sap/ushell/UI5ComponentType.js +1 -1
- package/src/main/js/sap/ushell/UIActions.js +1 -1
- package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +2 -2
- package/src/main/js/sap/ushell/URLTemplateProcessor.js +2 -2
- package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +2 -2
- package/src/main/js/sap/ushell/Ui5ServiceFactory.js +2 -2
- package/src/main/js/sap/ushell/User.js +43 -11
- package/src/main/js/sap/ushell/UserActivityLog.js +1 -1
- package/src/main/js/sap/ushell/adapters/AppVariantPersonalizationAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +22 -6
- package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/MenuAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.controller.js +251 -0
- package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.view.xml +69 -0
- package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegionEntry.js +67 -0
- package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/_Personalization/internals.js +1 -1
- package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +2 -2
- package/src/main/js/sap/ushell/adapters/cdm/v3/utilsCdm.js +1 -1
- package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +6 -1
- package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/MenuAdapter.js +1 -1
- package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +2 -2
- package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +2 -2
- package/src/main/js/sap/ushell/api/BootstrapObserver.js +1 -1
- package/src/main/js/sap/ushell/api/Copilot.js +1 -1
- package/src/main/js/sap/ushell/api/Inbox.js +1 -1
- package/src/main/js/sap/ushell/api/NewExperience/CustomOverflowListItem.js +1 -1
- package/src/main/js/sap/ushell/api/NewExperience.js +1 -1
- package/src/main/js/sap/ushell/api/RTA.js +1 -1
- package/src/main/js/sap/ushell/api/S4MyHome.js +1 -1
- package/src/main/js/sap/ushell/api/SAPBusinessClient.js +129 -0
- package/src/main/js/sap/ushell/api/common/ComponentInstantiation.js +1 -1
- package/src/main/js/sap/ushell/api/workpage/Designtime.js +1 -1
- package/src/main/js/sap/ushell/api/workpage/Runtime.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/neo/AppInfoService.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/neo/AppRuntimeNeo.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/neo/ProxyAppUtils.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/AppCommunicationMgr.js +24 -5
- package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntimeContext.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntimeService.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/BusyIndicator.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/SessionHandlerAgent.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/libsPreload.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/performance/FesrEnhancer.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/AppLifeCycleUtils.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/BaseRTAPluginStatus.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/CheckConditions.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/Renderer.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/baseRta/Trigger.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaAgent/Component.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/rtaShell/Component.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/plugins/scriptAgent/Component.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/AccessKeysAgent.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/Renderer.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycleAgent.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/UserDefaultParameters.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/ContainerAdapter.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/EmptyAdapter.js +1 -1
- package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +2 -2
- package/src/main/js/sap/ushell/appRuntime/ui5/ui/UIProxy.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/EventProcessor.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/FLPLoader.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/FLPScheduler.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/LoadingConfiguration.json +4 -0
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/StepConfiguration.json +33 -1
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +2 -2
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +2 -2
- package/src/main/js/sap/ushell/bootstrap/SchedulingAgent.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def-dev.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def-loader.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm/cdm-def.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm/cdm.boot.task.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm/cdm.constants.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/cdm.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.boot.path.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.boot.script.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.boot.task.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5.extractLibs.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +2 -2
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5language.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5theme.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.configure.ushell.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.constants.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +58 -25
- package/src/main/js/sap/ushell/bootstrap/common/common.debug.mode.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.load.bootstrapExtension.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.load.core-min.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.load.launchpad.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.load.model.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.load.script.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.override.registermodulepath.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.read.metatags.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.read.ui5theme.from.config.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.read.ushell.config.from.url.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/common/common.util.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/sandbox2/sandbox.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/sandbox2/sandboxBootTask.js +1 -1
- package/src/main/js/sap/ushell/bootstrap/sandbox2.js +2 -2
- package/src/main/js/sap/ushell/bootstrap/ui5loader-config.js +1 -1
- package/src/main/js/sap/ushell/components/CatalogsManager.js +1 -1
- package/src/main/js/sap/ushell/components/ComponentKeysHandler.js +1 -1
- package/src/main/js/sap/ushell/components/DestroyHelper.js +1 -1
- package/src/main/js/sap/ushell/components/GroupsHelper.js +1 -1
- package/src/main/js/sap/ushell/components/HomepageManager.js +1 -1
- package/src/main/js/sap/ushell/components/MessagingHelper.js +1 -1
- package/src/main/js/sap/ushell/components/SharedComponentUtils.js +1 -1
- package/src/main/js/sap/ushell/components/_HomepageManager/DashboardLoadingManager.js +1 -1
- package/src/main/js/sap/ushell/components/_HomepageManager/PagingManager.js +1 -1
- package/src/main/js/sap/ushell/components/_HomepageManager/PersistentPageOperationAdapter.js +1 -1
- package/src/main/js/sap/ushell/components/_HomepageManager/TransientPageOperationAdapter.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/AppFinder.controller.js +11 -3
- package/src/main/js/sap/ushell/components/appfinder/AppFinderView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/Catalog.controller.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/CatalogView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/Component.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/EasyAccess.controller.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/EasyAccessView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/GroupListPopover.controller.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/GroupListPopoverView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/HierarchyApps.controller.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/HierarchyAppsView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/HierarchyFolders.controller.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/HierarchyFoldersView.js +1 -1
- package/src/main/js/sap/ushell/components/appfinder/VisualizationOrganizerHelper.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 +707 -916
- package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainer.js +272 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerCache.js +229 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerRenderer.js +35 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/IframeApplicationContainer.js +372 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/IframeApplicationContainerRenderer.js +296 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/KeepAliveApps.js +68 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/AppruntimeHandler.js +120 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/ExtensionItems.js +143 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/LifecycleHandler.js +618 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/MessageBrokerHandler.js +64 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/NWBCHandler.js +83 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager/ServiceHandler.js +1503 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessageManager.js +638 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/PostMessagePluginInterface.js +152 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +21 -50
- package/src/main/js/sap/ushell/components/applicationIntegration/UI5ApplicationContainer.js +168 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/UI5ApplicationContainerRenderer.js +41 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +30 -679
- package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +13 -390
- package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxesCache.js +8 -249
- package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +9 -2365
- package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPIInterface.js +10 -127
- package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageUtils.js +10 -177
- package/src/main/js/sap/ushell/components/applicationIntegration/application/WebGUIStatefulHandler.js +10 -74
- package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +21 -12
- package/src/main/js/sap/ushell/components/applicationIntegration/contracts/EmbeddedUI5Handler.js +176 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/contracts/StatefulContainerV1Handler.js +91 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/contracts/StatefulContainerV2Handler.js +175 -0
- package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +13 -74
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/AppLifeCycle.js +1926 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/Storage.js +62 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/Application.js +709 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler.js +406 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxesCache.js +263 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPI.js +2382 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPIInterface.js +143 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageUtils.js +192 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/WebGUIStatefulHandler.js +90 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/configuration/AppMeta.js +193 -0
- package/src/main/js/sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices.js +91 -0
- package/src/main/js/sap/ushell/components/cards/Card.controller.js +1 -1
- package/src/main/js/sap/ushell/components/cards/Configuration.controller.js +1 -1
- package/src/main/js/sap/ushell/components/cards/ManifestPropertyHelper.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/Component.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/Main.controller.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Component.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Config.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/cards/searchresultwidget/Extension.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/AdvancedFormatters.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/Edition.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/EditionAdvanced.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/EditionStandard.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/appendStyleVars.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Category.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Highlighter.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/Paginator.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/All.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Application.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Event.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/People.js +1 -1
- package/src/main/js/sap/ushell/components/cepsearchresult/app/util/controls/categories/Workpage.js +1 -1
- package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +38 -22
- package/src/main/js/sap/ushell/components/container/IframePOSTUtils.js +5 -1
- package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinder/Component.js +14 -5
- package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/model/GraphQLListBinding.js +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/model/GraphQLModel.js +1 -1
- package/src/main/js/sap/ushell/components/contentFinder/model/formatter.js +32 -8
- package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +6 -2
- package/src/main/js/sap/ushell/components/contentFinder/view/VisualizationsNoDataIllustratedMessage.fragment.xml +6 -3
- package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +2 -2
- package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +54 -14
- package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources.properties +6 -0
- package/src/main/js/sap/ushell/components/factsheet/Component.js +2 -2
- package/src/main/js/sap/ushell/components/factsheet/annotation/Mapping.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/controls/PictureTile.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/controls/PictureTileRenderer.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewer.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewerItem.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/controls/PictureViewerRenderer.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/factory/ThingInspector.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/tools/ODataUrlTemplating.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/views/ThingViewer.controller.js +1 -1
- package/src/main/js/sap/ushell/components/factsheet/views/ThingViewer.view.js +1 -1
- package/src/main/js/sap/ushell/components/homeApp/error/Component.js +1 -1
- package/src/main/js/sap/ushell/components/homeApp/error/HomeAppError.controller.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/ActionMode.js +2 -2
- package/src/main/js/sap/ushell/components/homepage/Component.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/DashboardContent.controller.js +1 -1
- package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +2 -2
- package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +2 -2
- package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +2 -2
- package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/pages/ActionMode.js +2 -2
- package/src/main/js/sap/ushell/components/pages/Component.js +2 -2
- package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +2 -2
- package/src/main/js/sap/ushell/components/pages/StateManager.js +1 -1
- package/src/main/js/sap/ushell/components/pages/controller/ImportDialog.controller.js +1 -1
- package/src/main/js/sap/ushell/components/pages/controller/MyHome.controller.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/controller/PagesAndSpaceId.js +1 -1
- package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/runtimeSwitcher/Component.js +1 -1
- package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +2 -2
- package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/controls/FloatingContainer.js +1 -1
- package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/MenuBar/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +1 -2
- package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/Component.js +39 -4
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +30 -63
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenuButton.controller.js +118 -0
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.view.xml +64 -17
- package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuButton.view.xml +24 -0
- package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +2 -2
- package/src/main/js/sap/ushell/components/shell/Notifications/Notifications.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/PostLoadingHeaderEnhancement/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +2 -2
- package/src/main/js/sap/ushell/components/shell/Search/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Search/ESearch.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 +2 -2
- package/src/main/js/sap/ushell/components/shell/SearchCEP/ProvidersExecuter.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchCEP.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +2 -2
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +2 -2
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +2 -2
- package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +2 -2
- package/src/main/js/sap/ushell/components/shell/Settings/Component.js +19 -16
- package/src/main/js/sap/ushell/components/shell/Settings/ContentWrapper.fragment.xml +3 -2
- package/src/main/js/sap/ushell/components/shell/Settings/ErrorMessageHelper.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/UserSettings.controller.js +44 -17
- package/src/main/js/sap/ushell/components/shell/Settings/appearance/Appearance.controller.js +29 -24
- package/src/main/js/sap/ushell/components/shell/Settings/appearance/AppearanceEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/homepage/HomepageEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/notifications/NotificationsEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/notifications/NotificationsSetting.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/search/Search.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/search/SearchEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/spaces/SpacesEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/spaces/SpacesSetting.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userAccount/UserAccountEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userAccount/UserAccountSelector.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userActivities/UserActivitiesEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userActivities/UserActivitiesSetting.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/Component.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/UserDefaultsForm.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/ExtendedValueDialog.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userDefaults/controller/UserDefaultsSetting.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +1 -1
- package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/UserLanguageRegionEntry.js +1 -1
- package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +95 -215
- package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +77 -178
- package/src/main/js/sap/ushell/components/shell/SideNavigation/css/style.css +3 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/Popover.fragment.xml +1 -1
- package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +8 -1
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AllSpaces.js +52 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AppFinder.js +48 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Favorites.js +222 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericFixedNavigationListProvider.js +142 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericNavigationListProvider.js +186 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/MyHome.js +73 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/NavigationHelper.js +79 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/RecentActivity.js +141 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Spaces.js +288 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/SpacesNavigationListProvider.js +79 -0
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +15 -6
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ar.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_bg.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ca.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cnr.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cs.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cy.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_da.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_de.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_el.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_GB.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_US_saprigi.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es_MX.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_et.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fi.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr_CA.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hi.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hr.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hu.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_id.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_it.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_iw.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ja.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_kk.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ko.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lt.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lv.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_mk.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ms.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_nl.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_no.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pl.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt_PT.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ro.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ru.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sh.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sk.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sl.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sr.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sv.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_th.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_tr.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_uk.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_vi.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_CN.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_TW.properties +10 -2
- package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +37 -28
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +2 -2
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.controller.js +142 -15
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenu.fragment.xml +33 -0
- package/src/main/js/sap/ushell/components/shell/UserActionsMenu/UserActionsMenuPopover.fragment.xml +25 -8
- package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +2 -2
- package/src/main/js/sap/ushell/components/tiles/action/ActionTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/action/Configuration.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncher/Component.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncher/Configuration.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncher/StaticTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/Component.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/Configuration.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/DynamicTile.controller.js +1 -3
- package/src/main/js/sap/ushell/components/tiles/applauncherdynamic/DynamicTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/Component.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/StaticTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncher/StaticTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/Component.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/cdm/applauncherdynamic/DynamicTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/generic.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorArea/AreaChartTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorArea/AreaChartTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDual/DualTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDual/DualTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualComparison/DualComparison.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualComparison/DualComparison.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualContribution/DualContribution.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualContribution/DualContribution.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualDeviation/DualDeviation.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualDeviation/DualDeviation.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualTrend/DualTrend.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorDualTrend/DualTrend.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorHarveyBall/HarveyBallTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorHarveyBall/HarveyBallTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/cache.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/indicatorTileHelper.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/oData4Analytics.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorTileUtils/smartBusinessUtil.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorcomparison/ComparisonTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorcomparison/ComparisonTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorcontribution/ContributionTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatorcontribution/ContributionTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatordeviation/DeviationTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatordeviation/DeviationTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatornumeric/NumericTile.controller.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/indicatornumeric/NumericTile.view.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/sbtilecontent.js +1 -1
- package/src/main/js/sap/ushell/components/tiles/utils.js +1 -1
- package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.layout.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnRenderer.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRenderer.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +2 -2
- package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRowRenderer.js +1 -1
- package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
- package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +2 -2
- package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +2 -2
- package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
- package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +2 -2
- package/src/main/js/sap/ushell/functionBindPrototype.js +1 -1
- package/src/main/js/sap/ushell/iconfonts.js +1 -1
- package/src/main/js/sap/ushell/library.js +68 -2
- package/src/main/js/sap/ushell/navigationMode.js +2 -2
- package/src/main/js/sap/ushell/override.js +1 -1
- package/src/main/js/sap/ushell/performance/FesrEnhancer.js +1 -1
- package/src/main/js/sap/ushell/performance/ShellAnalytics.js +2 -2
- package/src/main/js/sap/ushell/performance/StatisticalRecord.js +2 -2
- package/src/main/js/sap/ushell/plugins/BaseRTAPlugin.js +1 -1
- package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +2 -2
- package/src/main/js/sap/ushell/plugins/appwarmup/ShellUIService.js +1 -1
- package/src/main/js/sap/ushell/plugins/ghostapp/Component.js +1 -1
- package/src/main/js/sap/ushell/plugins/ghostapp/FakeModel.js +1 -1
- package/src/main/js/sap/ushell/plugins/rta/Component.js +1 -1
- package/src/main/js/sap/ushell/plugins/rta-personalize/Component.js +1 -1
- package/src/main/js/sap/ushell/renderer/AccessKeysHandler.js +1 -1
- package/src/main/js/sap/ushell/renderer/History.js +1 -1
- package/src/main/js/sap/ushell/renderer/LogonFrameProvider.js +1 -1
- package/src/main/js/sap/ushell/renderer/Renderer.js +3 -3
- package/src/main/js/sap/ushell/renderer/Shell.controller.js +327 -140
- package/src/main/js/sap/ushell/renderer/Shell.view.js +1 -1
- package/src/main/js/sap/ushell/renderer/ShellLayout.js +10 -2
- package/src/main/js/sap/ushell/renderer/allMyApps/AllMyApps.controller.js +1 -1
- package/src/main/js/sap/ushell/renderer/allMyApps/AllMyAppsManager.js +1 -1
- package/src/main/js/sap/ushell/renderer/resources/resources.properties +18 -0
- package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +5 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +51 -45
- package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +12 -6
- package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +11 -5
- package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +10 -4
- package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +11 -5
- package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +9 -3
- package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +9 -3
- package/src/main/js/sap/ushell/renderer/search/searchComponent/Component.js +1 -1
- package/src/main/js/sap/ushell/renderer/search/searchComponent/controller/CEPSearchApp.controller.js +1 -1
- package/src/main/js/sap/ushell/renderer/search/searchComponent/controller/SearchApp.controller.js +1 -1
- package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
- package/src/main/js/sap/ushell/renderer/search/searchComponent/view/CEPSearchApp.view.js +1 -1
- package/src/main/js/sap/ushell/renderer/search/searchComponent/view/SearchApp.view.js +1 -1
- package/src/main/js/sap/ushell/renderer/search/util.js +1 -1
- package/src/main/js/sap/ushell/renderer/shellHeader/ShellHeader.controller.js +13 -7
- package/src/main/js/sap/ushell/renderer/utils.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/History.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/LogonFrameProvider.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/Renderer.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/RendererExtensions.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/Shell.controller.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +1 -1
- package/src/main/js/sap/ushell/renderers/fiori2/allMyApps/AllMyAppsManager.js +1 -1
- package/src/main/js/sap/ushell/resources.js +1 -1
- package/src/main/js/sap/ushell/services/AllMyApps.js +1 -1
- package/src/main/js/sap/ushell/services/AppConfiguration.js +1 -1
- package/src/main/js/sap/ushell/services/AppLifeCycle.js +4 -3
- package/src/main/js/sap/ushell/services/AppState.js +2 -2
- package/src/main/js/sap/ushell/services/AppType.js +1 -1
- package/src/main/js/sap/ushell/services/Bookmark.js +2 -2
- package/src/main/js/sap/ushell/services/BookmarkV2.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/ParameterMapping.js +1 -1
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +2 -2
- package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +2 -2
- package/src/main/js/sap/ushell/services/CommonDataModel/PersonalizationProcessor.js +1 -1
- package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +2 -2
- package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +2 -2
- package/src/main/js/sap/ushell/services/CommonDataModel.js +2 -13
- package/src/main/js/sap/ushell/services/Configuration.js +2 -2
- package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +2 -2
- package/src/main/js/sap/ushell/services/Container.js +1 -1
- package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +2 -2
- package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +2 -2
- package/src/main/js/sap/ushell/services/DarkModeSupport.js +2 -2
- package/src/main/js/sap/ushell/services/EndUserFeedback.js +1 -1
- package/src/main/js/sap/ushell/services/Extension/Item.js +2 -2
- package/src/main/js/sap/ushell/services/Extension.js +2 -2
- package/src/main/js/sap/ushell/services/FlpLaunchPage.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +2 -2
- package/src/main/js/sap/ushell/services/FrameBoundExtension/UserSettingsEntry.js +63 -0
- package/src/main/js/sap/ushell/services/FrameBoundExtension.js +14 -10
- package/src/main/js/sap/ushell/services/LaunchPage.js +2 -2
- package/src/main/js/sap/ushell/services/Menu.js +2 -2
- package/src/main/js/sap/ushell/services/Message.js +2 -2
- package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +269 -143
- package/src/main/js/sap/ushell/services/MessageBroker.js +2 -2
- package/src/main/js/sap/ushell/services/MessageInternal.js +2 -2
- package/src/main/js/sap/ushell/services/NavTargetResolution.js +1 -1
- package/src/main/js/sap/ushell/services/NavTargetResolutionInternal.js +1 -1
- package/src/main/js/sap/ushell/services/Navigation/compatibility.js +2 -2
- package/src/main/js/sap/ushell/services/Navigation/utils.js +2 -2
- package/src/main/js/sap/ushell/services/Navigation.js +6 -6
- package/src/main/js/sap/ushell/services/NavigationDataProvider.js +2 -2
- package/src/main/js/sap/ushell/services/Notifications.js +1 -1
- package/src/main/js/sap/ushell/services/NotificationsV2.js +1 -1
- package/src/main/js/sap/ushell/services/PageBuilding.js +2 -2
- package/src/main/js/sap/ushell/services/PagePersistence.js +2 -2
- package/src/main/js/sap/ushell/services/PageReferencing.js +2 -2
- package/src/main/js/sap/ushell/services/Pages.js +2 -2
- package/src/main/js/sap/ushell/services/Personalization.js +2 -2
- package/src/main/js/sap/ushell/services/PersonalizationV2/ContextContainer.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/Personalizer.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/TransientPersonalizer.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/Variant.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/VariantSet.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/VariantSetAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/WindowAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/WindowAdapterContainer.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/constants.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/constants.private.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2/utils.js +1 -1
- package/src/main/js/sap/ushell/services/PersonalizationV2.js +2 -2
- package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +2 -2
- package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +2 -2
- package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +2 -2
- package/src/main/js/sap/ushell/services/PluginManager/SimpleExpression.js +2 -2
- package/src/main/js/sap/ushell/services/PluginManager.js +22 -9
- package/src/main/js/sap/ushell/services/ReferenceResolver.js +2 -2
- package/src/main/js/sap/ushell/services/Search.js +2 -2
- package/src/main/js/sap/ushell/services/SearchCEP.js +2 -2
- package/src/main/js/sap/ushell/services/SearchableContent.js +2 -2
- package/src/main/js/sap/ushell/services/ShellNavigation.js +2 -2
- package/src/main/js/sap/ushell/services/ShellNavigationHashChanger.js +1 -1
- package/src/main/js/sap/ushell/services/ShellNavigationInternal.js +1 -1
- package/src/main/js/sap/ushell/services/SmartNavigation.js +2 -2
- package/src/main/js/sap/ushell/services/SpaceContent.js +2 -2
- package/src/main/js/sap/ushell/services/SupportTicket.js +1 -1
- package/src/main/js/sap/ushell/services/UITracer.js +2 -2
- package/src/main/js/sap/ushell/services/URLParsing.js +1 -1
- package/src/main/js/sap/ushell/services/URLShortening.js +2 -2
- package/src/main/js/sap/ushell/services/URLTemplate.js +2 -2
- package/src/main/js/sap/ushell/services/Ui5ComponentHandle.js +11 -1
- package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +2 -2
- package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +2 -2
- package/src/main/js/sap/ushell/services/UsageAnalytics.js +1 -1
- package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +2 -2
- package/src/main/js/sap/ushell/services/UserDefaultParameters.js +2 -2
- package/src/main/js/sap/ushell/services/UserInfo.js +2 -2
- package/src/main/js/sap/ushell/services/UserRecents/RecentActivity.js +1 -1
- package/src/main/js/sap/ushell/services/UserRecents/RecentAppsUsage.js +1 -1
- package/src/main/js/sap/ushell/services/UserRecents/RecentsList.js +1 -1
- package/src/main/js/sap/ushell/services/UserRecents/UserRecentsBase.js +1 -1
- package/src/main/js/sap/ushell/services/UserRecents.js +2 -2
- package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +2 -2
- package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +2 -2
- package/src/main/js/sap/ushell/services/_AppState/AppStatePersistencyMethod.js +1 -1
- package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +2 -2
- package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +2 -2
- package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +2 -2
- package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +2 -2
- package/src/main/js/sap/ushell/services/_Personalization/ContextContainer.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainer.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariant.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/PersonalizationContainerVariantSet.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/Personalizer.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/TransientPersonalizer.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/Variant.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/VariantSet.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/VariantSetAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/WindowAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/WindowAdapterContainer.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/constants.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/constants.private.js +1 -1
- package/src/main/js/sap/ushell/services/_Personalization/utils.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/AppState.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/AppStatePersistencyMethod.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/AppStatePersistencySettings.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/LimitedBuffer.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/Sequentializer.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/SequentializingAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/appstate/WindowAdapter.js +1 -1
- package/src/main/js/sap/ushell/services/personalization/VariantSetAdapter.js +1 -1
- package/src/main/js/sap/ushell/state/BackNavigation.js +91 -0
- package/src/main/js/sap/ushell/state/BaseState.js +1 -1
- package/src/main/js/sap/ushell/state/BindingHelper.js +18 -15
- package/src/main/js/sap/ushell/state/ControlManager.js +1 -1
- package/src/main/js/sap/ushell/state/CurrentState.js +1 -1
- package/src/main/js/sap/ushell/state/KeepAlive.js +1 -1
- package/src/main/js/sap/ushell/state/ShellModel.js +1 -1
- package/src/main/js/sap/ushell/state/StateManager/LaunchpadState.js +1 -1
- package/src/main/js/sap/ushell/state/StateManager/Operation.js +1 -1
- package/src/main/js/sap/ushell/state/StateManager/ShellMode.js +1 -1
- package/src/main/js/sap/ushell/state/StateManager.js +1 -1
- package/src/main/js/sap/ushell/state/StateRules.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/DefaultStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/FloatingActionsStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/FloatingContainerStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/HeadEndItemsStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/HeadItemsStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/SidePaneStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/SubHeaderStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory/UserActionsStrategy.js +1 -1
- package/src/main/js/sap/ushell/state/StrategyFactory.js +1 -1
- package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +2 -2
- package/src/main/js/sap/ushell/themes/base/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_hcb/HistoryScreen.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_hcb/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_hcw/HistoryScreen.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_hcw/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_belize_plus/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_bluecrystal/HistoryScreen.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_bluecrystal/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_fiori_3/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_fiori_3_dark/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_fiori_3_hcb/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_fiori_3_hcw/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_hcb/HistoryScreen.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_horizon/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_horizon_dark/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_horizon_hcb/library.source.less +1 -1
- package/src/main/js/sap/ushell/themes/sap_horizon_hcw/library.source.less +1 -1
- package/src/main/js/sap/ushell/thirdparty/Icons.js +191 -0
- package/src/main/js/sap/ushell/thirdparty/UserMenu.js +1809 -0
- package/src/main/js/sap/ushell/thirdparty/UserMenuAccount.js +104 -0
- package/src/main/js/sap/ushell/thirdparty/UserMenuItem.js +420 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons.js +2508 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/SAP-icons2.js +2508 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ar.js +7139 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ar_EG.js +7139 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ar_SA.js +7138 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/bg.js +6031 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ca.js +6133 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/cnr.js +6219 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/cs.js +6759 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/da.js +5977 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/de.js +6098 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/de_AT.js +6099 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/de_CH.js +6097 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/el.js +5882 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/el_CY.js +5882 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en.js +6094 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_AU.js +6134 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_GB.js +6125 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_HK.js +6136 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_IE.js +6125 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_IN.js +6132 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_NZ.js +6125 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_PG.js +6126 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_SG.js +6132 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/en_ZA.js +6126 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es.js +6153 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_AR.js +6156 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_BO.js +6155 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_CL.js +6048 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_CO.js +6048 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_MX.js +6157 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_PE.js +5939 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_UY.js +5941 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/es_VE.js +5940 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/et.js +6077 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fa.js +6002 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fi.js +6245 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fr.js +6047 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_BE.js +6047 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_CA.js +6041 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_CH.js +6065 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/fr_LU.js +6047 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/he.js +6593 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/hi.js +5911 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/hr.js +6246 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/hu.js +5995 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/id.js +5783 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/it.js +6036 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/it_CH.js +6036 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ja.js +5942 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/kk.js +5989 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ko.js +5823 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/lt.js +6628 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/lv.js +6164 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi2.js +656 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi3.js +542 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in2.js +266 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in3.js +143 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW.js +182 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW2.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW3.js +515 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/mk.js +6095 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ms.js +5617 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/nb.js +6085 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/nl.js +6252 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/nl_BE.js +6252 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css10.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css11.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css12.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css13.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css14.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css15.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css16.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css17.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css18.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css19.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css2.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css20.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css21.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css22.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css23.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css24.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css3.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css4.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css5.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css6.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css7.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css8.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css9.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/pl.js +6639 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/pt.js +6165 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/pt_PT.js +6230 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ro.js +6250 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ru.js +6553 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/ru_UA.js +6553 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/sk.js +6482 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/sl.js +6494 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/sr.js +6291 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/sr_Latn.js +6278 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/sv.js +6126 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/th.js +5928 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/tr.js +6146 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/uk.js +6504 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/vi.js +5720 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_CN.js +5770 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_HK.js +5779 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_SG.js +5779 -0
- package/src/main/js/sap/ushell/thirdparty/_dynamics/zh_TW.js +5846 -0
- package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css25.js +7177 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/ListItem.js +81 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/ListItemBase.js +44 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/MenuItem.js +119 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-base.js +212 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenu.js +4 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenuAccount.js +4 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/UserMenuItem.js +4 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenu.js +99 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuAccount.js +75 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuItem.js +39 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori.js +347 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-icons/AllIcons.js +26 -0
- package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents.js +650 -0
- package/src/main/js/sap/ushell/thirdparty/webcomponents-base.js +4279 -0
- package/src/main/js/sap/ushell/thirdparty/webcomponents-base2.js +7 -0
- package/src/main/js/sap/ushell/thirdparty/webcomponents-fiori.js +146 -0
- package/src/main/js/sap/ushell/thirdparty/webcomponents.js +381 -0
- package/src/main/js/sap/ushell/ui/AppContainer.js +22 -8
- package/src/main/js/sap/ushell/ui/AppContainerRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/ContentNodeSelector.js +1 -1
- package/src/main/js/sap/ushell/ui/ContentNodeSelectorRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/ContentNodeTreeItem.js +1 -1
- package/src/main/js/sap/ushell/ui/CustomGroupHeaderListItem.js +1 -1
- package/src/main/js/sap/ushell/ui/CustomGroupHeaderListItemRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/QuickAccess.js +1 -1
- package/src/main/js/sap/ushell/ui/ShellHeader.js +56 -40
- package/src/main/js/sap/ushell/ui/ShellHeaderRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/AppBox.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/AppBoxInternal.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/AppBoxInternalRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/AppBoxRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/PinButton.js +1 -1
- package/src/main/js/sap/ushell/ui/appfinder/PinButtonRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/bookmark/SaveOnPage.controller.js +1 -1
- package/src/main/js/sap/ushell/ui/cards/FrequentActivitiesExtension.js +1 -1
- package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +2 -2
- package/src/main/js/sap/ushell/ui/footerbar/AboutButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/AddBookmarkButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/ContactSupportButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/ContactSupportDialog.controller.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/JamDiscussButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/JamShareButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/LogoutButton.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.controller.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.view.js +1 -1
- package/src/main/js/sap/ushell/ui/footerbar/SendAsEmailButton.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/AccessibilityCustomData.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/ActionItem.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/AnchorItem.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/AnchorItemRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBar.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/AnchorNavigationBarRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/CatalogEntryContainer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/CatalogsContainer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/DashboardGroupsContainerRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +2 -2
- package/src/main/js/sap/ushell/ui/launchpad/FailedTileDialog.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/GroupHeaderActions.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/GroupListItem.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/GroupListItemRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/LinkTileWrapper.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/LinkTileWrapperRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/LoadingDialog.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/LoadingDialogRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/Page.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/PageRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/PlusTile.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/PlusTileRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/Section.js +2 -2
- package/src/main/js/sap/ushell/ui/launchpad/SectionRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/Tile.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileContainer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileContainerRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileContainerUtils.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileState.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileStateInternal.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileStateInternalRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/TileStateRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/ViewPortState.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstance.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceAbap.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceBase.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceCdm.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceLaunchPage.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceLink.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/VizInstanceRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +2 -2
- package/src/main/js/sap/ushell/ui/launchpad/section/CompactAreaRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ContentRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/NavigationMiniTile.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/OverflowListItem.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ShellFloatingAction.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ShellFloatingActionRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ShellFloatingActions.js +1 -9
- package/src/main/js/sap/ushell/ui/shell/ShellHeadItem.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ShellNavigationMenu.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/SidePane.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/SubHeader.js +8 -51
- package/src/main/js/sap/ushell/ui/shell/SysInfoBar.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/SysInfoBarRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ToolArea.js +1 -1
- package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +2 -2
- package/src/main/js/sap/ushell/ui/tile/DynamicTile.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/DynamicTileRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/ImageTile.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/ImageTileRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/StaticTile.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/StaticTileRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/TileBase.js +1 -1
- package/src/main/js/sap/ushell/ui/tile/TileBaseRenderer.js +1 -1
- package/src/main/js/sap/ushell/ui/utils.js +2 -2
- package/src/main/js/sap/ushell/ui5service/ShellUIService.js +1 -1
- package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +2 -2
- package/src/main/js/sap/ushell/ui5service/UserStatus.js +2 -2
- package/src/main/js/sap/ushell/utils/AppType.js +1 -1
- package/src/main/js/sap/ushell/utils/Deferred.js +1 -1
- package/src/main/js/sap/ushell/utils/DynamicTileRequest.js +1 -1
- package/src/main/js/sap/ushell/utils/HttpClient.js +1 -1
- package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +17 -1
- package/src/main/js/sap/ushell/utils/UriParameters.js +1 -1
- package/src/main/js/sap/ushell/utils/UrlParsing.js +1 -1
- package/src/main/js/sap/ushell/utils/UrlShortening.js +2 -2
- package/src/main/js/sap/ushell/utils/WindowUtils.js +1 -1
- package/src/main/js/sap/ushell/utils/chipsUtils.js +1 -1
- package/src/main/js/sap/ushell/utils/objectOperations.js +1 -1
- package/src/main/js/sap/ushell/utils/tilecard/TileCard.js +1 -1
- package/src/main/js/sap/ushell/utils/tilecard/TileCardExtension.js +1 -1
- package/src/main/js/sap/ushell/utils/type.js +1 -1
- package/src/main/js/sap/ushell/utils/utilsCdm.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/DestinationResolver.js +1 -1
- package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +2 -2
- package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +3 -3
- package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +3 -3
- package/src/main/js/sap/ushell/utils.js +9 -1
- package/src/test/js/sap/ushell/bootstrap/sandbox.js +2 -2
- package/ui5.yaml +20 -1
|
@@ -0,0 +1,1926 @@
|
|
|
1
|
+
// Copyright (c) 2009-2025 SAP SE, All Rights Reserved
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @fileOverview handle all the resources for the different applications.
|
|
5
|
+
* @version 1.134.1
|
|
6
|
+
*/
|
|
7
|
+
sap.ui.define([
|
|
8
|
+
"sap/ui/Device",
|
|
9
|
+
"sap/ui/core/Element",
|
|
10
|
+
"sap/ui/core/EventBus",
|
|
11
|
+
"sap/ushell/components/applicationIntegrationOld/Storage",
|
|
12
|
+
"sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler",
|
|
13
|
+
"sap/ushell/components/applicationIntegrationOld/application/Application",
|
|
14
|
+
"sap/ushell/components/applicationIntegrationOld/application/PostMessageUtils",
|
|
15
|
+
"sap/ushell/components/applicationIntegrationOld/application/WebGUIStatefulHandler",
|
|
16
|
+
"sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices",
|
|
17
|
+
"sap/ushell/components/applicationIntegrationOld/configuration/AppMeta",
|
|
18
|
+
"sap/ushell/services/AppConfiguration",
|
|
19
|
+
"sap/ushell/utils",
|
|
20
|
+
"sap/ushell/Config",
|
|
21
|
+
"sap/ushell/ApplicationType",
|
|
22
|
+
"sap/base/util/deepExtend",
|
|
23
|
+
"sap/ushell/utils/UriParameters",
|
|
24
|
+
"sap/base/Log",
|
|
25
|
+
"sap/ushell/EventHub",
|
|
26
|
+
"sap/ushell/utils/UrlParsing",
|
|
27
|
+
"sap/ui/thirdparty/hasher",
|
|
28
|
+
"sap/ushell/services/MessageBroker/MessageBrokerEngine",
|
|
29
|
+
"sap/ushell/renderer/utils",
|
|
30
|
+
"sap/m/library",
|
|
31
|
+
"sap/ushell/AppInfoParameters",
|
|
32
|
+
"sap/ushell/Container",
|
|
33
|
+
"sap/ushell/resources",
|
|
34
|
+
"sap/ushell/state/ShellModel",
|
|
35
|
+
"sap/ushell/state/StateManager",
|
|
36
|
+
"sap/ushell/state/KeepAlive",
|
|
37
|
+
"sap/ushell/ui5service/ShellUIServiceFactory",
|
|
38
|
+
"sap/ui/core/service/ServiceFactoryRegistry",
|
|
39
|
+
"sap/base/util/ObjectPath"
|
|
40
|
+
], (
|
|
41
|
+
Device,
|
|
42
|
+
Element,
|
|
43
|
+
EventBus,
|
|
44
|
+
Storage,
|
|
45
|
+
BlueBoxHandler,
|
|
46
|
+
Application,
|
|
47
|
+
PostMessageUtils,
|
|
48
|
+
WebGUIStatefulHandler,
|
|
49
|
+
RelatedServices,
|
|
50
|
+
AppMeta,
|
|
51
|
+
AppConfiguration,
|
|
52
|
+
ushellUtils,
|
|
53
|
+
Config,
|
|
54
|
+
ApplicationType,
|
|
55
|
+
deepExtend,
|
|
56
|
+
UriParameters,
|
|
57
|
+
Log,
|
|
58
|
+
EventHub,
|
|
59
|
+
UrlParsing,
|
|
60
|
+
hasher,
|
|
61
|
+
MessageBrokerEngine,
|
|
62
|
+
RendererUtils,
|
|
63
|
+
mobileLibrary,
|
|
64
|
+
AppInfoParameters,
|
|
65
|
+
Container,
|
|
66
|
+
ushellResources,
|
|
67
|
+
ShellModel,
|
|
68
|
+
StateManager,
|
|
69
|
+
KeepAlive,
|
|
70
|
+
ShellUIServiceFactory,
|
|
71
|
+
ServiceFactoryRegistry,
|
|
72
|
+
ObjectPath
|
|
73
|
+
) => {
|
|
74
|
+
"use strict";
|
|
75
|
+
|
|
76
|
+
if (!Config.last("/core/navigation/enableAppLifeCycleFallback")) {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// shortcut for sap.ushell.state.StateManager.ShellMode
|
|
81
|
+
const ShellMode = StateManager.ShellMode;
|
|
82
|
+
|
|
83
|
+
// shortcut for sap.ushell.state.StateManager.LaunchpadState
|
|
84
|
+
const LaunchpadState = StateManager.LaunchpadState;
|
|
85
|
+
|
|
86
|
+
// shortcut for sap.ushell.state.StateManager.Operation
|
|
87
|
+
const Operation = StateManager.Operation;
|
|
88
|
+
|
|
89
|
+
// shortcut for sap.m.URLHelper
|
|
90
|
+
const URLHelper = mobileLibrary.URLHelper;
|
|
91
|
+
|
|
92
|
+
// todo: [FLPCOREANDUX-10024] cleanup
|
|
93
|
+
// const CACHED_APP_TYPES = ["URL"];
|
|
94
|
+
|
|
95
|
+
const KEEP_ALIVE_MODES = {
|
|
96
|
+
FULL: "true",
|
|
97
|
+
RESTRICTED: "restricted",
|
|
98
|
+
FALSE: "false"
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
function AppLifeCycle () {
|
|
102
|
+
//Dangling controls is a queue of requests to change shell elements attributes, requested by the application in the process of createContent before the actual application state was apply.
|
|
103
|
+
let bDisableHomeAppCache = false;
|
|
104
|
+
let bEnableRouterRetrigger = true;
|
|
105
|
+
let oCurrentApplication = {};
|
|
106
|
+
const oComponentCreatedPromises = {};
|
|
107
|
+
let oGlobalShellUIService,
|
|
108
|
+
fnOldTriggerEmail,
|
|
109
|
+
oViewPortContainer;
|
|
110
|
+
|
|
111
|
+
//connect FLP to the message broker
|
|
112
|
+
if (window.QUnit === undefined) {
|
|
113
|
+
MessageBrokerEngine.connect("FLP");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @returns {object} Returns the RelatedServices API.
|
|
118
|
+
*/
|
|
119
|
+
this.service = function () {
|
|
120
|
+
return RelatedServices;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Sets the componentCreated promise for a given appId if it does not exist yet.
|
|
125
|
+
* Returns the promise along with the resolve and reject functions.
|
|
126
|
+
* @private
|
|
127
|
+
* @since 1.125.0
|
|
128
|
+
* @param {string} sStorageAppId The id of the created application.
|
|
129
|
+
* @returns {{
|
|
130
|
+
* promise: Promise,
|
|
131
|
+
* resolve: function,
|
|
132
|
+
* reject: function
|
|
133
|
+
* }} An object containing the promise and the resolve and reject functions.
|
|
134
|
+
*/
|
|
135
|
+
this._setComponentCreatedPromise = function (sStorageAppId) {
|
|
136
|
+
if (!oComponentCreatedPromises[sStorageAppId]) {
|
|
137
|
+
oComponentCreatedPromises[sStorageAppId] = {};
|
|
138
|
+
oComponentCreatedPromises[sStorageAppId].promise = new Promise((resolve, reject) => {
|
|
139
|
+
oComponentCreatedPromises[sStorageAppId].resolve = resolve;
|
|
140
|
+
oComponentCreatedPromises[sStorageAppId].reject = reject;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return oComponentCreatedPromises[sStorageAppId];
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Resolves the componentCreated promise for the given appId. If the promise does not yet exist, it is created.
|
|
149
|
+
* @param {string} sStorageAppId The id of the created application.
|
|
150
|
+
* @private
|
|
151
|
+
* @since 1.125.0
|
|
152
|
+
*/
|
|
153
|
+
this._resolveComponentCreatedPromise = function (sStorageAppId) {
|
|
154
|
+
if (!sStorageAppId) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this._setComponentCreatedPromise(sStorageAppId).resolve();
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Returns the componentCreated promise for the given appId. If the promise does not yet exist, it is created.
|
|
162
|
+
* @param {string} sStorageAppId The id of the created application.
|
|
163
|
+
* @returns {Promise | undefined} The componentCreated promise for the given appId or undefined if no appId is given.
|
|
164
|
+
* @private
|
|
165
|
+
* @since 1.125.0
|
|
166
|
+
*/
|
|
167
|
+
this._getComponentCreatedPromise = function (sStorageAppId) {
|
|
168
|
+
if (!sStorageAppId) { return; }
|
|
169
|
+
return this._setComponentCreatedPromise(sStorageAppId).promise;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @param {string} sId Id of the control might end with "-component"
|
|
174
|
+
* @returns {string} Returns the normalized appId
|
|
175
|
+
*/
|
|
176
|
+
this._normalizeAppId = function (sId) {
|
|
177
|
+
const sCmp = "-component";
|
|
178
|
+
const isCmp = sId.endsWith(sCmp);
|
|
179
|
+
|
|
180
|
+
if (isCmp) {
|
|
181
|
+
return sId.substring(0, sId.length - sCmp.length);
|
|
182
|
+
}
|
|
183
|
+
return sId;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* @param {object} oEvent
|
|
188
|
+
* @param {string} sChannel
|
|
189
|
+
* @param {object} oData
|
|
190
|
+
*/
|
|
191
|
+
this._onComponentCreated = function (oEvent, sChannel, oData) {
|
|
192
|
+
const oApp = oData.component;
|
|
193
|
+
const sStorageAppId = this._normalizeAppId(oApp.getId());
|
|
194
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
195
|
+
|
|
196
|
+
if (oStorageEntry) {
|
|
197
|
+
oStorageEntry.app = oApp;
|
|
198
|
+
Application.active(oStorageEntry.app);
|
|
199
|
+
|
|
200
|
+
} else {
|
|
201
|
+
oCurrentApplication.app = oApp;
|
|
202
|
+
|
|
203
|
+
if (oApp.active) {
|
|
204
|
+
oApp.active();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
this._resolveComponentCreatedPromise(sStorageAppId);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @param {object} oEvent
|
|
213
|
+
* @param {string} sChannel
|
|
214
|
+
* @param {object} oData
|
|
215
|
+
*/
|
|
216
|
+
this._onGetMe = function (oEvent, sChannel, oData) {
|
|
217
|
+
oData.AppLifeCycle = this;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @param {string} sStorageAppId
|
|
222
|
+
*/
|
|
223
|
+
this._store = function (sStorageAppId) {
|
|
224
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
225
|
+
|
|
226
|
+
if (oStorageEntry) {
|
|
227
|
+
Application.store(oStorageEntry);
|
|
228
|
+
oStorageEntry.stateStored = true;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @param {string} sStorageAppId
|
|
234
|
+
* @param {object} oApplicationContainer
|
|
235
|
+
* @param {boolean} bHardDestroy
|
|
236
|
+
* @returns {Promise} Resolves when the app is destroyed.
|
|
237
|
+
*/
|
|
238
|
+
this._destroyApplication = async function (sStorageAppId, oApplicationContainer, bHardDestroy) {
|
|
239
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
240
|
+
|
|
241
|
+
if (!sStorageAppId || !oApplicationContainer) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// todo: [FLPCOREANDUX-10024] instead we should check for keepAlive property
|
|
246
|
+
// ignore stateful destroy when hard destroy is requested
|
|
247
|
+
if (oStorageEntry && !bHardDestroy) { // keep alive
|
|
248
|
+
Storage.removeById(sStorageAppId);
|
|
249
|
+
|
|
250
|
+
// Stateful - appruntime (v1, v2 keepAlive is not stateful)
|
|
251
|
+
if (BlueBoxHandler.isStatefulContainer(oStorageEntry.container)) {
|
|
252
|
+
await BlueBoxHandler.statefulDestroyApp(oStorageEntry.container, sStorageAppId);
|
|
253
|
+
|
|
254
|
+
// Return v1, v2 keepAlive to pool
|
|
255
|
+
} else if (oStorageEntry.container.getIsKeepAlive() && BlueBoxHandler.isReusableContainer(oStorageEntry.container)) {
|
|
256
|
+
BlueBoxHandler.returnUnusedKeepAliveContainer(oStorageEntry.container);
|
|
257
|
+
await this._handleExitStateful(oStorageEntry.container, false);
|
|
258
|
+
|
|
259
|
+
// embedded keep alive
|
|
260
|
+
} else {
|
|
261
|
+
this._removeApplicationContainerFromViewPort(sStorageAppId);
|
|
262
|
+
BlueBoxHandler.deleteBlueBoxByContainer(oStorageEntry.container);
|
|
263
|
+
oStorageEntry.container.destroy();
|
|
264
|
+
}
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (bHardDestroy) {
|
|
269
|
+
Storage.removeByContainer(oApplicationContainer);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
this._removeApplicationContainerFromViewPort(sStorageAppId);
|
|
273
|
+
/**
|
|
274
|
+
* If the application running in an iframe registered for "before close" event,
|
|
275
|
+
* we first post it a message to prepare for closing (usually, the app will close
|
|
276
|
+
* its session or release locks held on the server), and only when the iframe send a response
|
|
277
|
+
* back that it finished processing the event, we will continue to destroy the app (iframe).
|
|
278
|
+
* If the app in the iframe did not register to the event, we destroy the app immediately exactly
|
|
279
|
+
* as it was done before.
|
|
280
|
+
* Note that even if the response from the iframe is not successful, we still destroy the app
|
|
281
|
+
* because the second app that we navigated to was already created so we can not stop
|
|
282
|
+
* the actual navigation (this is the same behaviour that we had before).
|
|
283
|
+
* This mechanism was added to solve the change made in Chrome to disallow Sync XHR on
|
|
284
|
+
* browser close.
|
|
285
|
+
*/
|
|
286
|
+
try {
|
|
287
|
+
const oThenable = oApplicationContainer.sendBeforeAppCloseEvent();
|
|
288
|
+
await ushellUtils.promisify(oThenable);
|
|
289
|
+
} catch (sError) {
|
|
290
|
+
Log.error(
|
|
291
|
+
"FLP got a failed response from the iframe for the 'sap.ushell.services.CrossApplicationNavigation.beforeAppCloseEvent' message sent",
|
|
292
|
+
sError,
|
|
293
|
+
"sap.ushell.components.applicationIntegration.AppLifeCycle.js"
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (oStorageEntry) {
|
|
298
|
+
KeepAlive.destroy(oStorageEntry);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
BlueBoxHandler.deleteBlueBoxByContainer(oApplicationContainer);
|
|
302
|
+
Application.destroy(oApplicationContainer);
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* @param {string} sStorageAppId
|
|
307
|
+
*/
|
|
308
|
+
this._restore = function (sStorageAppId) {
|
|
309
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
310
|
+
|
|
311
|
+
if (oStorageEntry?.stateStored) {
|
|
312
|
+
// 1) Extensions
|
|
313
|
+
RelatedServices.restore(oStorageEntry.service);
|
|
314
|
+
AppMeta.restore(oStorageEntry.meta);
|
|
315
|
+
// 2) Extension API
|
|
316
|
+
ShellUIServiceFactory.restore(oStorageEntry);
|
|
317
|
+
// 3) Application
|
|
318
|
+
Application.restore(oStorageEntry);
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* @param {object} oApplicationContainer
|
|
324
|
+
* @param {boolean} bNavigationToFlpComponent
|
|
325
|
+
* @param {boolean} [bForceCloseApp]
|
|
326
|
+
* @returns {Promise} Resolves when the app is closed.
|
|
327
|
+
*/
|
|
328
|
+
this._handleExitStateful = function (oApplicationContainer, bNavigationToFlpComponent, bForceCloseApp) {
|
|
329
|
+
const sActualAppFromId = oApplicationContainer.getCurrentAppId();
|
|
330
|
+
|
|
331
|
+
if (Storage.get(sActualAppFromId)) {
|
|
332
|
+
const bDestroyApp = bForceCloseApp || (RelatedServices.isBackNavigation() && !bNavigationToFlpComponent);
|
|
333
|
+
if (bDestroyApp) {
|
|
334
|
+
EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
|
|
335
|
+
Storage.removeById(sActualAppFromId);
|
|
336
|
+
return BlueBoxHandler.statefulDestroyApp(oApplicationContainer);
|
|
337
|
+
}
|
|
338
|
+
// in this case the store of the currently running application, so we do not need to pass the sCacheId
|
|
339
|
+
EventBus.getInstance().publish("sap.ushell", "appClosed", oApplicationContainer);
|
|
340
|
+
return BlueBoxHandler.statefulStoreKeepAliveApp(oApplicationContainer, sActualAppFromId);
|
|
341
|
+
}
|
|
342
|
+
// in this case the destroy of the currently running application, so we do not need to pass the sCacheId
|
|
343
|
+
return BlueBoxHandler.statefulDestroyApp(oApplicationContainer);
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* @param {object} oOldApplicationContainer
|
|
348
|
+
* @param {boolean} bNavigationToFlpComponent
|
|
349
|
+
* @param {boolean} bFromAfterNavigate
|
|
350
|
+
* @returns {Promise} Resolves when the app is closed.
|
|
351
|
+
*/
|
|
352
|
+
this._handleExitApplication = async function (oOldApplicationContainer, bNavigationToFlpComponent, bFromAfterNavigate) {
|
|
353
|
+
if (!oOldApplicationContainer) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
const sOldStorageAppId = oOldApplicationContainer.getCurrentAppId();
|
|
358
|
+
|
|
359
|
+
if (!sOldStorageAppId) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// todo: [FLPCOREANDUX-10024] should not be necessary; the destroy should be callable multiple times w/o issues
|
|
364
|
+
// if called from onAfterNavigate, do nothing if oOldApplicationContainer is stateful container, because
|
|
365
|
+
// application was already closed at the beginning of 'handleCreateApplicationContainer'
|
|
366
|
+
if (!bNavigationToFlpComponent
|
|
367
|
+
&& bFromAfterNavigate
|
|
368
|
+
&& (
|
|
369
|
+
BlueBoxHandler.isStatefulContainer(oOldApplicationContainer)
|
|
370
|
+
|| BlueBoxHandler.isStatefulContainerInKeepAlivePool(oOldApplicationContainer)
|
|
371
|
+
)
|
|
372
|
+
) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const oOldStorageEntry = Storage.get(sOldStorageAppId);
|
|
377
|
+
// STATEFUL
|
|
378
|
+
if (BlueBoxHandler.isStatefulContainer(oOldApplicationContainer)) {
|
|
379
|
+
await this._handleExitStateful(oOldApplicationContainer, bNavigationToFlpComponent);
|
|
380
|
+
|
|
381
|
+
//STATELESS
|
|
382
|
+
} else if (oOldStorageEntry) {
|
|
383
|
+
// Back Navigation Case
|
|
384
|
+
if (RelatedServices.isBackNavigation() && !bNavigationToFlpComponent) {
|
|
385
|
+
//check if the Iframe needs to be cached instead of destroy
|
|
386
|
+
if (oOldApplicationContainer.getIsKeepAlive() && BlueBoxHandler.isReusableContainer(oOldApplicationContainer)) {
|
|
387
|
+
BlueBoxHandler.returnUnusedKeepAliveContainer(oOldApplicationContainer);
|
|
388
|
+
await this._handleExitStateful(oOldApplicationContainer, bNavigationToFlpComponent);
|
|
389
|
+
|
|
390
|
+
} else {
|
|
391
|
+
await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Forward Navigation Cases
|
|
395
|
+
} else if (oOldApplicationContainer.getApplicationType() === "UI5") {
|
|
396
|
+
// Wait until navigation's source app has been started completely, so that a later back navigation finds a proper app that
|
|
397
|
+
// can be re-enabled (keep-alive scenario)
|
|
398
|
+
await this._getComponentCreatedPromise(sOldStorageAppId);
|
|
399
|
+
this._store(sOldStorageAppId);
|
|
400
|
+
} else {
|
|
401
|
+
this._store(sOldStorageAppId);
|
|
402
|
+
}
|
|
403
|
+
EventBus.getInstance().publish("sap.ushell", "appClosed", oOldApplicationContainer);
|
|
404
|
+
|
|
405
|
+
// LEGACY STATEFUL (WebGUI)
|
|
406
|
+
} else if (oOldApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
|
|
407
|
+
if (bNavigationToFlpComponent) {
|
|
408
|
+
await PostMessageUtils.postMessageToIframeApp(oOldApplicationContainer, "sap.gui", "triggerCloseSessionImmediately");
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// THE REST...
|
|
412
|
+
} else {
|
|
413
|
+
//destroy the application and its resources
|
|
414
|
+
await this._destroyApplication(sOldStorageAppId, oOldApplicationContainer);
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* @param {function(): boolean} fnFilterApps The filter function
|
|
420
|
+
* @returns {Promise} Resolves when all keep alive apps are closed.
|
|
421
|
+
*/
|
|
422
|
+
this._closeKeepAliveApps = function (fnFilterApps) {
|
|
423
|
+
try {
|
|
424
|
+
const aKeepAliveRestrictedApps = [];
|
|
425
|
+
|
|
426
|
+
Storage.forEach((oStorageEntry) => {
|
|
427
|
+
if (fnFilterApps(oStorageEntry)) {
|
|
428
|
+
aKeepAliveRestrictedApps.push(oStorageEntry);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
const aClosePromises = aKeepAliveRestrictedApps.map((oRestrictedApp) => {
|
|
432
|
+
//check if it needs to be cached instead of destroy
|
|
433
|
+
const bCanHandleKeepAlive = BlueBoxHandler.isStatefulContainerSupportingKeepAlive(oRestrictedApp.container);
|
|
434
|
+
const bIsKeepAlive = oRestrictedApp.container.getIsKeepAlive();
|
|
435
|
+
const bIsReusable = BlueBoxHandler.isReusableContainer(oRestrictedApp.container);
|
|
436
|
+
|
|
437
|
+
if (!bCanHandleKeepAlive && bIsKeepAlive && bIsReusable) {
|
|
438
|
+
BlueBoxHandler.returnUnusedKeepAliveContainer(oRestrictedApp.container);
|
|
439
|
+
// todo: [FLPCOREANDUX-10024] what is the actual difference between destroyApplication and handleExitStateful?
|
|
440
|
+
return this._handleExitStateful(oRestrictedApp.container, true, true);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return this._destroyApplication(oRestrictedApp.appId, oRestrictedApp.container);
|
|
444
|
+
});
|
|
445
|
+
|
|
446
|
+
return Promise.all(aClosePromises);
|
|
447
|
+
} catch (e) {
|
|
448
|
+
Log.error("closeKeepAliveApps call failed", e);
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* @param {string} sFromId
|
|
454
|
+
* @param {object} oFrom
|
|
455
|
+
*/
|
|
456
|
+
this.onBeforeNavigate = function (sFromId, oFrom) {
|
|
457
|
+
if (sFromId && oFrom && oFrom.isA("sap.ushell.components.container.ApplicationContainer")) {
|
|
458
|
+
const sStorageAppId = sFromId;
|
|
459
|
+
const oApplicationContainer = oFrom;
|
|
460
|
+
|
|
461
|
+
const bHasIframe = !!oApplicationContainer._getIFrame(); // todo: [FLPCOREANDUX-10024] is this really required?
|
|
462
|
+
const bIsSupportedType = oApplicationContainer.getStatefulType() > BlueBoxHandler.STATEFUL_TYPES.NOT_SUPPORTED;
|
|
463
|
+
|
|
464
|
+
const bCached = !!Storage.get(sStorageAppId);
|
|
465
|
+
const bSessionHandlingSupported = bHasIframe && bIsSupportedType;
|
|
466
|
+
|
|
467
|
+
if (bCached || bSessionHandlingSupported) {
|
|
468
|
+
PostMessageUtils.postMessageToIframeApp(oApplicationContainer, "sap.ushell.sessionHandler", "beforeApplicationHide", {}, false);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* @param {string} sFromId
|
|
476
|
+
* @param {object} oFrom
|
|
477
|
+
* @param {string} sToId
|
|
478
|
+
* @param {object} oTo
|
|
479
|
+
*/
|
|
480
|
+
this.onAfterNavigate = async function (sFromId, oFrom, sToId, oTo) { //call lifecycle interface "setInitialConfiguration"
|
|
481
|
+
if (!sToId) {
|
|
482
|
+
sToId = "";
|
|
483
|
+
}
|
|
484
|
+
if (!sFromId) {
|
|
485
|
+
sFromId = "";
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const aFlpComponentIds = [
|
|
489
|
+
"Shell-appfinder-component",
|
|
490
|
+
"Shell-home-component",
|
|
491
|
+
"pages-component-container",
|
|
492
|
+
"homeApp-component-container",
|
|
493
|
+
"workPageRuntime-component-container",
|
|
494
|
+
"runtimeSwitcher-component-container"
|
|
495
|
+
];
|
|
496
|
+
|
|
497
|
+
const bNavigationToFlpComponent = aFlpComponentIds.some((sFlpComponentId) => sToId.includes(sFlpComponentId));
|
|
498
|
+
|
|
499
|
+
if (sToId && oTo) {
|
|
500
|
+
// ==== Navigation from [any] to app ====
|
|
501
|
+
if (oTo.isA("sap.ushell.components.container.ApplicationContainer")) {
|
|
502
|
+
const sStorageAppId = sToId;
|
|
503
|
+
const oApplicationContainer = oTo;
|
|
504
|
+
|
|
505
|
+
// this code must be at the beginning of the function to allow it to be processed once in
|
|
506
|
+
// a cycle of opening an app
|
|
507
|
+
if (oApplicationContainer.getIframeReusedForApp()) {
|
|
508
|
+
oApplicationContainer.setProperty("iframeReusedForApp", false, true);
|
|
509
|
+
PostMessageUtils.postMessageToIframeApp(oApplicationContainer, "sap.ushell.sessionHandler", "afterApplicationShow", {}, false);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
if (Storage.get(sStorageAppId)) {
|
|
513
|
+
this._restore(sStorageAppId);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// ==== Navigation from [any] to renderer managed component ====
|
|
517
|
+
} else {
|
|
518
|
+
if (bNavigationToFlpComponent) {
|
|
519
|
+
await this._closeKeepAliveApps((oStorageEntry) => oStorageEntry.keepAliveMode === KEEP_ALIVE_MODES.RESTRICTED);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
Application.setActiveAppContainer(undefined);
|
|
523
|
+
|
|
524
|
+
// Clear custom About Dialog parameters
|
|
525
|
+
AppInfoParameters.flush();
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (sFromId && oFrom) {
|
|
530
|
+
// ==== Navigation from app to [any] ====
|
|
531
|
+
if (oFrom.isA("sap.ushell.components.container.ApplicationContainer")) {
|
|
532
|
+
const oApplicationContainer = oFrom;
|
|
533
|
+
|
|
534
|
+
await this._handleExitApplication(oApplicationContainer, bNavigationToFlpComponent, true);
|
|
535
|
+
|
|
536
|
+
// ==== Navigation from renderer managed component to [any] ====
|
|
537
|
+
} else {
|
|
538
|
+
//handle the case of appFinder
|
|
539
|
+
if (sToId.indexOf("Shell-appfinder-component") > 0) {
|
|
540
|
+
EventBus.getInstance().publish("sap.ushell", "appFinderAfterNavigate");
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (bDisableHomeAppCache) {
|
|
544
|
+
try {
|
|
545
|
+
this._removeApplicationContainerFromViewPort(sFromId);
|
|
546
|
+
oFrom.destroy();
|
|
547
|
+
} catch (oError) {
|
|
548
|
+
Log.error(`Error when trying to destroy the home component: '${sToId}'`, oError);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* @param {object} oOldResolvedHashFragment
|
|
557
|
+
* @param {object} oResolvedHashFragment
|
|
558
|
+
* @returns {Promise} Resolves when the after navigation was handled.
|
|
559
|
+
*/
|
|
560
|
+
// todo: [FLPCOREANDUX-10024] should be moved to onAfterNavigate
|
|
561
|
+
this.handleAfterNavigate = async function (oResolvedHashFragment, oOldResolvedHashFragment) {
|
|
562
|
+
if (!oOldResolvedHashFragment) {
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
const sAppFrameworkId = ObjectPath.get("appCapabilities.appFrameworkId", oOldResolvedHashFragment);
|
|
567
|
+
const bFromApplicationIsTR = ushellUtils.isTRApplicationType(oOldResolvedHashFragment.applicationType, sAppFrameworkId);
|
|
568
|
+
const bToApplicationIsTR = ushellUtils.isTRApplicationType(oResolvedHashFragment.applicationType);
|
|
569
|
+
|
|
570
|
+
if (bFromApplicationIsTR && !bToApplicationIsTR) {
|
|
571
|
+
const oPreviousStatefulContainer = BlueBoxHandler.getBlueBoxByUrl(oOldResolvedHashFragment.url);
|
|
572
|
+
if (oPreviousStatefulContainer && oPreviousStatefulContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
|
|
573
|
+
return WebGUIStatefulHandler.guiStatefulCloseCurrentApp(oPreviousStatefulContainer);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* @param {string} sStorageAppId
|
|
580
|
+
* @param {object} oApplicationContainer
|
|
581
|
+
* @param {object} oResolvedHashFragment
|
|
582
|
+
* @param {string} oParsedShellHash
|
|
583
|
+
* @param {string} sKeepAliveMode
|
|
584
|
+
* @returns {boolean} Returns true if the app was stored
|
|
585
|
+
*/
|
|
586
|
+
this._storeApp = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
|
|
587
|
+
if (Storage.get(sStorageAppId)) {
|
|
588
|
+
return false;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
oApplicationContainer.setProperty("isKeepAlive", true, true);
|
|
592
|
+
|
|
593
|
+
Storage.set(sStorageAppId, {
|
|
594
|
+
service: {},
|
|
595
|
+
shellHash: `#${UrlParsing.constructShellHash(oParsedShellHash)}`,
|
|
596
|
+
appId: sStorageAppId,
|
|
597
|
+
stt: "loading",
|
|
598
|
+
currentState: null, // current state is stored before close see: sap/ushell/state/CurrentState
|
|
599
|
+
controlManager: null, // control manager state is stored before close see: sap/ushell/state/ControlManager
|
|
600
|
+
container: oApplicationContainer,
|
|
601
|
+
meta: AppConfiguration.getMetadata(oResolvedHashFragment),
|
|
602
|
+
app: undefined,
|
|
603
|
+
keepAliveMode: sKeepAliveMode,
|
|
604
|
+
appTarget: oResolvedHashFragment,
|
|
605
|
+
ui5ComponentName: oResolvedHashFragment.ui5ComponentName,
|
|
606
|
+
enableRouterRetrigger: bEnableRouterRetrigger,
|
|
607
|
+
stateStored: false
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
return true;
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Stores the state of the current application
|
|
615
|
+
* - back navigation
|
|
616
|
+
* - title, hierarchy, relatedApps
|
|
617
|
+
* - currentState, controlManager
|
|
618
|
+
* @returns {Promise} Resolves when the store is done.
|
|
619
|
+
*
|
|
620
|
+
* @since 1.128.0
|
|
621
|
+
* @private
|
|
622
|
+
*/
|
|
623
|
+
this.storeAppExtensions = async function () {
|
|
624
|
+
const oCurrentApp = this.getCurrentApplication();
|
|
625
|
+
if (!oCurrentApp) {
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
const sStorageAppId = oCurrentApp.appId;
|
|
629
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
630
|
+
|
|
631
|
+
if (!oStorageEntry) {
|
|
632
|
+
// do not store for non-keep-alive apps
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
if (oStorageEntry.container.getApplicationType() === "UI5") {
|
|
637
|
+
await this._getComponentCreatedPromise(sStorageAppId);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// back navigation
|
|
641
|
+
RelatedServices.store(oStorageEntry.service);
|
|
642
|
+
// currentState, controlManager
|
|
643
|
+
KeepAlive.store(oStorageEntry);
|
|
644
|
+
// About Dialog
|
|
645
|
+
AppInfoParameters.store(oStorageEntry);
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* @param {string} sStorageAppId
|
|
650
|
+
* @param {object} oResolvedHashFragment
|
|
651
|
+
* @param {object} oParsedShellHash
|
|
652
|
+
* @returns {string} Returns the keep alive mode.
|
|
653
|
+
*/
|
|
654
|
+
this._calculateKeepAliveMode = function (sStorageAppId, oResolvedHashFragment, oParsedShellHash) {
|
|
655
|
+
//generic intent currently can never be keep alive
|
|
656
|
+
if (sStorageAppId === "application-Shell-startIntent") {
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Global override in query parameters
|
|
661
|
+
let sKeepAlive = new URLSearchParams(window.location.search).get("sap-keep-alive");
|
|
662
|
+
if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
|
|
663
|
+
return sKeepAlive;
|
|
664
|
+
} else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
// App override in intent parameters
|
|
669
|
+
sKeepAlive = oParsedShellHash.params?.["sap-keep-alive"];
|
|
670
|
+
if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
|
|
671
|
+
return sKeepAlive;
|
|
672
|
+
} else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// Magic override in resolved hash fragment
|
|
677
|
+
if (oResolvedHashFragment.url) {
|
|
678
|
+
sKeepAlive = UriParameters.fromURL(oResolvedHashFragment.url).get("sap-keep-alive");
|
|
679
|
+
if (sKeepAlive === KEEP_ALIVE_MODES.FULL || sKeepAlive === KEEP_ALIVE_MODES.RESTRICTED) {
|
|
680
|
+
return sKeepAlive;
|
|
681
|
+
} else if (sKeepAlive === KEEP_ALIVE_MODES.FALSE) {
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// if the app is a root intent, it should be kept alive (e.g. workzone advanced)
|
|
687
|
+
// can be overridden by the above checks
|
|
688
|
+
const sShellHash = UrlParsing.constructShellHash(oParsedShellHash);
|
|
689
|
+
if (sShellHash && ushellUtils.isRootIntent(sShellHash)) {
|
|
690
|
+
return KEEP_ALIVE_MODES.FULL;
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
|
|
694
|
+
/**
|
|
695
|
+
* @param {object} oResolvedHashFragment
|
|
696
|
+
* @returns {string} Returns the application type.
|
|
697
|
+
*/
|
|
698
|
+
this._calculateAppType = function (oResolvedHashFragment) {
|
|
699
|
+
if (oResolvedHashFragment.applicationType === "URL" && oResolvedHashFragment.additionalInformation?.startsWith?.("SAPUI5.Component=")) {
|
|
700
|
+
return "SAPUI5";
|
|
701
|
+
}
|
|
702
|
+
return oResolvedHashFragment.applicationType;
|
|
703
|
+
};
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* @param {object} oData
|
|
707
|
+
* @returns {Promise} Resolves when the app is reloaded.
|
|
708
|
+
*/
|
|
709
|
+
this._reloadCurrentApp = async function (oData) {
|
|
710
|
+
const oTmpAppContainer = BlueBoxHandler.getBlueBoxById(oData.sAppContainerId);
|
|
711
|
+
if (oTmpAppContainer) {
|
|
712
|
+
// todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
|
|
713
|
+
const sTmpUrl = oTmpAppContainer.getUrl();
|
|
714
|
+
BlueBoxHandler.removeCapabilities(oTmpAppContainer);
|
|
715
|
+
Storage.removeByContainer(oTmpAppContainer);
|
|
716
|
+
await this._destroyApplication(oData.sAppContainerId, oTmpAppContainer);
|
|
717
|
+
BlueBoxHandler.deleteBlueBoxByUrl(sTmpUrl);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
const ShellNavigationInternal = await Container.getServiceAsync("ShellNavigationInternal");
|
|
721
|
+
try {
|
|
722
|
+
ShellNavigationInternal.hashChanger.treatHashChanged(oData.sCurrentHash);
|
|
723
|
+
} catch (error) {
|
|
724
|
+
Log.error("Error when trying to re-load the current displayed application", error, "sap.ushell.services.AppLifeCycle");
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* Opens an application in an application container and sets it as the current application.
|
|
730
|
+
*
|
|
731
|
+
* @param {string} sAppId the id of the application.
|
|
732
|
+
* @param {object} oResolvedHashFragment the resolved hash fragment.
|
|
733
|
+
* @param {object} oParsedShellHash the parsed shell hash.
|
|
734
|
+
*/
|
|
735
|
+
this._openApp = async function (sAppId, oResolvedHashFragment, oParsedShellHash) {
|
|
736
|
+
// format appId, the is the storage identifier
|
|
737
|
+
const sStorageAppId = `application-${sAppId}`;
|
|
738
|
+
|
|
739
|
+
// this case will handle the stateful containers flow.
|
|
740
|
+
let oApplicationContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
|
|
741
|
+
|
|
742
|
+
const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
|
|
743
|
+
const bShouldBeCached = !!sKeepAliveMode;
|
|
744
|
+
|
|
745
|
+
if (BlueBoxHandler.isStatefulContainer(oApplicationContainer)) {
|
|
746
|
+
this._openAppInStatefulContainer(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bShouldBeCached);
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
if (bShouldBeCached) {
|
|
751
|
+
await this._openAppAndCacheIt(sStorageAppId, sAppId, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
if (oResolvedHashFragment.applicationType === "TR" || oResolvedHashFragment.appCapabilities?.appFrameworkId === "GUI") {
|
|
756
|
+
await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
|
|
757
|
+
|
|
758
|
+
if (!oApplicationContainer || oApplicationContainer.getStatefulType() !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
|
|
759
|
+
oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
} else {
|
|
763
|
+
const aSpecialApplicationTypes = [
|
|
764
|
+
"URL",
|
|
765
|
+
"TR",
|
|
766
|
+
"NWBC",
|
|
767
|
+
"WDA"
|
|
768
|
+
];
|
|
769
|
+
|
|
770
|
+
if (!oApplicationContainer || aSpecialApplicationTypes.includes(oResolvedHashFragment.applicationType)) {
|
|
771
|
+
await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
if (oApplicationContainer) {
|
|
775
|
+
const oApplicationContainerFromViewPort = this._getApplicationContainerFromViewPort(sAppId);
|
|
776
|
+
|
|
777
|
+
if (oApplicationContainerFromViewPort) {
|
|
778
|
+
this._removeApplicationContainerFromViewPort(oApplicationContainerFromViewPort.getId());
|
|
779
|
+
oApplicationContainerFromViewPort.destroy();
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
// create application that is not persisted and not cashed
|
|
787
|
+
oCurrentApplication = {
|
|
788
|
+
appId: sStorageAppId,
|
|
789
|
+
stt: "loading",
|
|
790
|
+
container: oApplicationContainer,
|
|
791
|
+
meta: AppConfiguration.getMetadata(oResolvedHashFragment),
|
|
792
|
+
app: undefined
|
|
793
|
+
};
|
|
794
|
+
};
|
|
795
|
+
|
|
796
|
+
/**
|
|
797
|
+
* Open an application in a stateful container that already exists.
|
|
798
|
+
*
|
|
799
|
+
* @param {string} sStorageAppId the storage id of the application.
|
|
800
|
+
* @param {sap.ushell.components.container.ApplicationContainer} oApplicationContainer the stateful application container.
|
|
801
|
+
* @param {object} oResolvedHashFragment the resolved hash fragment.
|
|
802
|
+
* @param {object} oParsedShellHash the parsed shell hash.
|
|
803
|
+
* @param {string} sKeepAliveMode the keep alive mode.
|
|
804
|
+
* @param {boolean} bShouldBeCached whether the application container should be cached in the storage.
|
|
805
|
+
*/
|
|
806
|
+
this._openAppInStatefulContainer = function (sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bShouldBeCached) {
|
|
807
|
+
if (bShouldBeCached) {
|
|
808
|
+
//this is the case where we have a stateful container and keep alive
|
|
809
|
+
//is cached application
|
|
810
|
+
let oStorageEntry = Storage.get(sStorageAppId);
|
|
811
|
+
if (!oStorageEntry) {
|
|
812
|
+
this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
|
|
813
|
+
oStorageEntry = Storage.get(sStorageAppId);
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
oCurrentApplication = oStorageEntry;
|
|
817
|
+
} else {
|
|
818
|
+
// create application that is not persisted and not cashed
|
|
819
|
+
oCurrentApplication = {
|
|
820
|
+
appId: sStorageAppId,
|
|
821
|
+
stt: "loading",
|
|
822
|
+
container: oApplicationContainer,
|
|
823
|
+
meta: AppConfiguration.getMetadata(oResolvedHashFragment),
|
|
824
|
+
app: undefined
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Fetches an existing application container from storage or creates this application container and sets it in to the storage.
|
|
831
|
+
*
|
|
832
|
+
* @param {string} sStorageAppId the storage id of the application.
|
|
833
|
+
* @param {string} sAppId the id of the application.
|
|
834
|
+
* @param {object} oResolvedHashFragment the resolved hash fragment.
|
|
835
|
+
* @param {object} oParsedShellHash the parsed shell hash.
|
|
836
|
+
* @param {string} sKeepAliveMode the keep alive mode.
|
|
837
|
+
*/
|
|
838
|
+
this._openAppAndCacheIt = async function (sStorageAppId, sAppId, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode) {
|
|
839
|
+
// is cached application
|
|
840
|
+
let oStorageEntry = Storage.get(sStorageAppId);
|
|
841
|
+
if (!oStorageEntry) {
|
|
842
|
+
let oApplicationContainer = BlueBoxHandler.findFreeContainerForNewKeepAliveApp(oResolvedHashFragment);
|
|
843
|
+
|
|
844
|
+
if (!oApplicationContainer) {
|
|
845
|
+
await this._deleteSameIdAppContainer(sStorageAppId, sAppId);
|
|
846
|
+
oApplicationContainer = Application.createApplicationContainer(sStorageAppId, oResolvedHashFragment);
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
|
|
850
|
+
oStorageEntry = Storage.get(sStorageAppId);
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
oCurrentApplication = oStorageEntry;
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* There might be two apps with the same Semantic object + Action, from two different servers,
|
|
858
|
+
* so we will need to destroy the first application to avoid duplicate id.
|
|
859
|
+
*
|
|
860
|
+
* The current stateful container mechanism does not support it.
|
|
861
|
+
* Until it is supported, we delete here the blue box and then create the new one.
|
|
862
|
+
* In future BLI, we plan to change the id of the container to be more unique.
|
|
863
|
+
*
|
|
864
|
+
* @param {string} sStorageAppId the storage app id.
|
|
865
|
+
* @param {string} sAppId the app id.
|
|
866
|
+
*/
|
|
867
|
+
this._deleteSameIdAppContainer = async function (sStorageAppId, sAppId) {
|
|
868
|
+
const oTmpAppContainer = BlueBoxHandler.getBlueBoxById(sStorageAppId) || this._getApplicationContainerFromViewPort(sAppId);
|
|
869
|
+
if (oTmpAppContainer) {
|
|
870
|
+
// todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
|
|
871
|
+
const sTmpUrl = oTmpAppContainer.getUrl();
|
|
872
|
+
BlueBoxHandler.removeCapabilities(oTmpAppContainer);
|
|
873
|
+
await this._destroyApplication(sStorageAppId, oTmpAppContainer, true);
|
|
874
|
+
BlueBoxHandler.deleteBlueBoxByUrl(sTmpUrl);
|
|
875
|
+
}
|
|
876
|
+
};
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* Any event one wishes to subscribe to during the AppLifeCycle.init() call should be added here.
|
|
880
|
+
* Events will only be added the first time AppLifeCycle.init() is called.
|
|
881
|
+
*/
|
|
882
|
+
this._addEvents = (function () {
|
|
883
|
+
let hasBeenCalled = false;
|
|
884
|
+
return function () {
|
|
885
|
+
if (!hasBeenCalled) {
|
|
886
|
+
hasBeenCalled = true;
|
|
887
|
+
|
|
888
|
+
// Subscribe to events.
|
|
889
|
+
EventHub.on("disableKeepAliveRestoreRouterRetrigger").do((oData) => {
|
|
890
|
+
const sAppId = `${oData.intent.semanticObject}-${oData.intent.action}`;
|
|
891
|
+
const sStorageAppId = `application-${sAppId}`;
|
|
892
|
+
|
|
893
|
+
bEnableRouterRetrigger = oData.disable;
|
|
894
|
+
|
|
895
|
+
if (Storage.get(sStorageAppId)) {
|
|
896
|
+
Storage.get(sStorageAppId).enableRouterRetrigger = oData.disable;
|
|
897
|
+
}
|
|
898
|
+
});
|
|
899
|
+
EventHub.on("setApplicationFullWidth").do((oData) => {
|
|
900
|
+
this._setApplicationFullWidth(oData.bValue);
|
|
901
|
+
});
|
|
902
|
+
|
|
903
|
+
EventHub.on("reloadCurrentApp").do((oData) => {
|
|
904
|
+
this._reloadCurrentApp(oData);
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
};
|
|
908
|
+
}());
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* @param {object} oInViewPortContainer
|
|
912
|
+
* @param {boolean} bInDisableHomeAppCache
|
|
913
|
+
*/
|
|
914
|
+
this.init = function (oInViewPortContainer, bInDisableHomeAppCache) {
|
|
915
|
+
if (Container && Config.last("/core/shell/enablePersistantAppstateWhenSharing")) {
|
|
916
|
+
Container.getServiceAsync("AppState").then((oAppStateService) => {
|
|
917
|
+
fnOldTriggerEmail = URLHelper.triggerEmail.bind(URLHelper);
|
|
918
|
+
URLHelper.triggerEmail = function (sTo, sSubject, sBody, sCc, sBcc) {
|
|
919
|
+
const sFLPUrl = document.URL;
|
|
920
|
+
oAppStateService.setAppStateToPublic(sFLPUrl)
|
|
921
|
+
.done((sNewURL, sXStateKey, sIStateKey, sXStateKeyNew, sIStateKeyNew) => {
|
|
922
|
+
sSubject = sSubject && sXStateKey && sXStateKeyNew && sSubject.includes(sXStateKey) ? sSubject.replace(sXStateKey, sXStateKeyNew) : sSubject;
|
|
923
|
+
sSubject = sSubject && sIStateKey && sIStateKeyNew && sSubject.includes(sIStateKey) ? sSubject.replace(sIStateKey, sIStateKeyNew) : sSubject;
|
|
924
|
+
sBody = sBody && sXStateKey && sXStateKeyNew && sBody.includes(sXStateKey) ? sBody.replace(sXStateKey, sXStateKeyNew) : sBody;
|
|
925
|
+
sBody = sBody && sIStateKey && sIStateKeyNew && sBody.includes(sIStateKey) ? sBody.replace(sIStateKey, sIStateKeyNew) : sBody;
|
|
926
|
+
fnOldTriggerEmail(sTo, sSubject, sBody, sCc, sBcc);
|
|
927
|
+
})
|
|
928
|
+
.fail((sTo, sSubject, sBody, sCc, sBcc) => {
|
|
929
|
+
fnOldTriggerEmail(sTo, sSubject, sBody, sCc, sBcc);
|
|
930
|
+
});
|
|
931
|
+
};
|
|
932
|
+
});
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
ShellUIServiceFactory.init().then(() => {
|
|
936
|
+
ServiceFactoryRegistry.register(
|
|
937
|
+
"sap.ushell.ui5service.ShellUIService",
|
|
938
|
+
ShellUIServiceFactory
|
|
939
|
+
);
|
|
940
|
+
});
|
|
941
|
+
this._createGlobalShellUIService();
|
|
942
|
+
|
|
943
|
+
oViewPortContainer = oInViewPortContainer;
|
|
944
|
+
bDisableHomeAppCache = bInDisableHomeAppCache;
|
|
945
|
+
|
|
946
|
+
BlueBoxHandler.init();
|
|
947
|
+
Application.init(BlueBoxHandler, PostMessageUtils);
|
|
948
|
+
PostMessageUtils.init(Application, BlueBoxHandler);
|
|
949
|
+
|
|
950
|
+
//setup & register communication
|
|
951
|
+
this.registerShellCommunicationHandler({
|
|
952
|
+
"sap.ushell.services.AppLifeCycle": {
|
|
953
|
+
oRequestCalls: {
|
|
954
|
+
create: {
|
|
955
|
+
isActiveOnly: true,
|
|
956
|
+
distributionType: ["URL"]
|
|
957
|
+
},
|
|
958
|
+
destroy: {
|
|
959
|
+
isActiveOnly: true,
|
|
960
|
+
distributionType: ["URL"]
|
|
961
|
+
},
|
|
962
|
+
store: {
|
|
963
|
+
isActiveOnly: true,
|
|
964
|
+
distributionType: ["URL"]
|
|
965
|
+
},
|
|
966
|
+
restore: {
|
|
967
|
+
isActiveOnly: true,
|
|
968
|
+
distributionType: ["URL"]
|
|
969
|
+
}
|
|
970
|
+
},
|
|
971
|
+
oServiceCalls: {
|
|
972
|
+
subscribe: {
|
|
973
|
+
executeServiceCallFn: async function (oServiceParams) {
|
|
974
|
+
const { oContainer: oApplicationContainer } = oServiceParams;
|
|
975
|
+
const aNewCapabilities = oServiceParams.oMessageData.body;
|
|
976
|
+
if (!Array.isArray(aNewCapabilities)) {
|
|
977
|
+
Log.error("subscribe service call failed: capabilities must be an array");
|
|
978
|
+
return {};
|
|
979
|
+
}
|
|
980
|
+
oApplicationContainer.addBlueBoxCapabilities(aNewCapabilities);
|
|
981
|
+
return {};
|
|
982
|
+
}
|
|
983
|
+
},
|
|
984
|
+
setup: {
|
|
985
|
+
executeServiceCallFn: async function (oServiceParams) {
|
|
986
|
+
const oSetup = oServiceParams?.oMessageData?.body;
|
|
987
|
+
const { oContainer: oApplicationContainer } = oServiceParams;
|
|
988
|
+
|
|
989
|
+
const aNewCapabilities = [];
|
|
990
|
+
if (oSetup) {
|
|
991
|
+
const bIsSAPLegacyApplicationType = ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId());
|
|
992
|
+
// appruntime supports statefulContainer + keepAlive
|
|
993
|
+
const bIgnoreStateful = oApplicationContainer.getIsKeepAlive() && bIsSAPLegacyApplicationType;
|
|
994
|
+
|
|
995
|
+
if (oSetup.isStateful) {
|
|
996
|
+
if (bIgnoreStateful) {
|
|
997
|
+
// todo: [FLPCOREANDUX-10024] why not NOT_SUPPORTED instead?
|
|
998
|
+
oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.FLP_V2_KEEP_ALIVE, true);
|
|
999
|
+
} else {
|
|
1000
|
+
aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "create" });
|
|
1001
|
+
aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "destroy" });
|
|
1002
|
+
oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.FLP_V2, true);
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
if (oSetup.isIframeValid) {
|
|
1006
|
+
aNewCapabilities.push({ action: "iframeIsValid", service: "sap.ushell.appRuntime" });
|
|
1007
|
+
}
|
|
1008
|
+
if (oSetup.session?.bLogoutSupport) {
|
|
1009
|
+
aNewCapabilities.push({ action: "logout", service: "sap.ushell.sessionHandler" });
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
// todo: [FLPCOREANDUX-10024] this is a workaround
|
|
1013
|
+
const bIsAppruntime = ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId());
|
|
1014
|
+
if (bIsAppruntime) {
|
|
1015
|
+
aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "store" });
|
|
1016
|
+
aNewCapabilities.push({ service: "sap.ushell.services.AppLifeCycle", action: "restore" });
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
oApplicationContainer.addBlueBoxCapabilities(aNewCapabilities);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
"sap.gui": {
|
|
1026
|
+
oServiceCalls: {
|
|
1027
|
+
loadFinished: {
|
|
1028
|
+
executeServiceCallFn: async function (oServiceParams) {
|
|
1029
|
+
const { oContainer: oApplicationContainer } = oServiceParams;
|
|
1030
|
+
|
|
1031
|
+
if (!oApplicationContainer.getIsKeepAlive()) {
|
|
1032
|
+
oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.GUI_V1, true);
|
|
1033
|
+
oCurrentApplication = {
|
|
1034
|
+
appId: oApplicationContainer.getId(),
|
|
1035
|
+
stt: "loading",
|
|
1036
|
+
container: oApplicationContainer,
|
|
1037
|
+
meta: undefined,
|
|
1038
|
+
app: undefined
|
|
1039
|
+
};
|
|
1040
|
+
} else {
|
|
1041
|
+
oApplicationContainer.setProperty("statefulType", BlueBoxHandler.STATEFUL_TYPES.GUI_V1_KEEP_ALIVE, true);
|
|
1042
|
+
}
|
|
1043
|
+
return {};
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
|
|
1049
|
+
});
|
|
1050
|
+
|
|
1051
|
+
//TODO add unsubscribe
|
|
1052
|
+
EventBus.getInstance().subscribe("sap.ushell", "appComponentLoaded", this._onComponentCreated, this);
|
|
1053
|
+
EventBus.getInstance().subscribe("sap.ushell", "getAppLifeCycle", this._onGetMe, this);
|
|
1054
|
+
|
|
1055
|
+
this._addEvents();
|
|
1056
|
+
};
|
|
1057
|
+
|
|
1058
|
+
/**
|
|
1059
|
+
* @param {object} oShellNavigationInternal
|
|
1060
|
+
*/
|
|
1061
|
+
this.registerHandleHashChange = function (oShellNavigationInternal) {
|
|
1062
|
+
oShellNavigationInternal.hashChanger.attachEvent("hashChanged", (oHashChange) => {
|
|
1063
|
+
//FIX for internal incident #1980317281 - In general, hash structure in FLP is splitted into 3 parts:
|
|
1064
|
+
//A - application identification & B - Application parameters & C - Internal application area
|
|
1065
|
+
// Now, when an IFrame changes its hash, it sends PostMessage up to the FLP. The FLP does 2 things: Change its URL
|
|
1066
|
+
// and send a PostMessage back to the IFrame. This fix, initiated in the PostMessageAPI.js, blocks only
|
|
1067
|
+
// the message back to the IFrame.
|
|
1068
|
+
if (hasher.disableBlueBoxHashChangeTrigger) {
|
|
1069
|
+
return;
|
|
1070
|
+
}
|
|
1071
|
+
if (oHashChange.mParameters && oShellNavigationInternal.hashChanger.isInnerAppNavigation(oHashChange.mParameters.newHash, oHashChange.mParameters.oldHash)) {
|
|
1072
|
+
PostMessageUtils.postMessageToMultipleIframes("sap.ushell.appRuntime", "innerAppRouteChange", {
|
|
1073
|
+
oHash: oHashChange.mParameters
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
PostMessageUtils.postMessageToMultipleIframes("sap.ushell.appRuntime", "hashChange", {
|
|
1078
|
+
sHash: oHashChange.mParameters.fullHash
|
|
1079
|
+
});
|
|
1080
|
+
});
|
|
1081
|
+
};
|
|
1082
|
+
|
|
1083
|
+
/**
|
|
1084
|
+
* @param {object} oApplicationContainer
|
|
1085
|
+
*/
|
|
1086
|
+
this._addApplicationContainerToViewPort = function (oApplicationContainer) {
|
|
1087
|
+
oViewPortContainer.addCenterViewPort(oApplicationContainer);
|
|
1088
|
+
};
|
|
1089
|
+
|
|
1090
|
+
/**
|
|
1091
|
+
* @param {string} sId
|
|
1092
|
+
*/
|
|
1093
|
+
this._removeApplicationContainerFromViewPort = function (sId) {
|
|
1094
|
+
const oBlueBox = BlueBoxHandler.getBlueBoxById(sId);
|
|
1095
|
+
const bIsStateful = BlueBoxHandler.isStatefulContainer(oBlueBox);
|
|
1096
|
+
|
|
1097
|
+
if (!bIsStateful) {
|
|
1098
|
+
oViewPortContainer.removeCenterViewPort(sId, true);
|
|
1099
|
+
}
|
|
1100
|
+
};
|
|
1101
|
+
|
|
1102
|
+
/**
|
|
1103
|
+
* @param {string} sAppId
|
|
1104
|
+
* @returns {object} Returns the control.
|
|
1105
|
+
*/
|
|
1106
|
+
this._getApplicationContainerFromViewPort = function (sAppId) {
|
|
1107
|
+
if (!oViewPortContainer) {
|
|
1108
|
+
return;
|
|
1109
|
+
}
|
|
1110
|
+
return oViewPortContainer.getViewPortControl("centerViewPort", `application-${sAppId}`)
|
|
1111
|
+
|| oViewPortContainer.getViewPortControl("centerViewPort", `applicationShellPage-${sAppId}`);
|
|
1112
|
+
};
|
|
1113
|
+
|
|
1114
|
+
/**
|
|
1115
|
+
* @returns {object} Returns the view port container.
|
|
1116
|
+
*/
|
|
1117
|
+
this._getViewPortContainer = function () {
|
|
1118
|
+
return oViewPortContainer;
|
|
1119
|
+
};
|
|
1120
|
+
|
|
1121
|
+
/**
|
|
1122
|
+
* @param {string} sId
|
|
1123
|
+
*/
|
|
1124
|
+
this._navTo = function (sId) {
|
|
1125
|
+
oViewPortContainer.navTo("centerViewPort", sId, "show");
|
|
1126
|
+
};
|
|
1127
|
+
|
|
1128
|
+
/**
|
|
1129
|
+
* @returns {object} Returns the current application.
|
|
1130
|
+
*/
|
|
1131
|
+
this.getCurrentApplication = function () {
|
|
1132
|
+
return oCurrentApplication;
|
|
1133
|
+
};
|
|
1134
|
+
|
|
1135
|
+
/**
|
|
1136
|
+
*/
|
|
1137
|
+
this.unsetCurrentApplication = function () {
|
|
1138
|
+
oCurrentApplication = {};
|
|
1139
|
+
};
|
|
1140
|
+
|
|
1141
|
+
/**
|
|
1142
|
+
* @param {boolean} bIsFull
|
|
1143
|
+
*/
|
|
1144
|
+
this._setApplicationFullWidth = function (bIsFull) {
|
|
1145
|
+
const oCurrent = this.getCurrentApplication();
|
|
1146
|
+
|
|
1147
|
+
//validate that we have a valid applicationContainer
|
|
1148
|
+
if (oCurrent.container) {
|
|
1149
|
+
oCurrent.container.toggleStyleClass("sapUShellApplicationContainerLimitedWidth", !bIsFull);
|
|
1150
|
+
}
|
|
1151
|
+
};
|
|
1152
|
+
|
|
1153
|
+
/**
|
|
1154
|
+
* Returns the global ShellUIService instance.
|
|
1155
|
+
* @returns {object} The global ShellUIService instance
|
|
1156
|
+
*/
|
|
1157
|
+
this.getShellUIService = function () {
|
|
1158
|
+
return oGlobalShellUIService;
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
*/
|
|
1163
|
+
this.resetGlobalShellUIService = function () {
|
|
1164
|
+
if (oGlobalShellUIService) {
|
|
1165
|
+
oGlobalShellUIService.resetService();
|
|
1166
|
+
}
|
|
1167
|
+
};
|
|
1168
|
+
|
|
1169
|
+
/**
|
|
1170
|
+
* Creates the ShellUIService instance of the AppLifeCycle in application integration if not already created.
|
|
1171
|
+
*
|
|
1172
|
+
* @returns {Promise} A promise that resolves when the ShellUIService instance is created
|
|
1173
|
+
*
|
|
1174
|
+
* @since 1.127.0
|
|
1175
|
+
* @private
|
|
1176
|
+
*/
|
|
1177
|
+
this._createGlobalShellUIService = async function () {
|
|
1178
|
+
oGlobalShellUIService = await ShellUIServiceFactory.createInstanceInternal();
|
|
1179
|
+
};
|
|
1180
|
+
|
|
1181
|
+
/**
|
|
1182
|
+
* In the FLP, only one container at a time can be active. If we have
|
|
1183
|
+
* multiple ApplicationContainers, they may still be active in the
|
|
1184
|
+
* background, and still be able to send/receive postMessages (e.g.,
|
|
1185
|
+
* change the title while the user is on the FLP home).
|
|
1186
|
+
*
|
|
1187
|
+
* Also, we distinguish between visible containers and active
|
|
1188
|
+
* containers. As it is desirable that when a container is being opened
|
|
1189
|
+
* it starts setting the FLP title for example. It results in better
|
|
1190
|
+
* perceived performance.
|
|
1191
|
+
*
|
|
1192
|
+
* This method sets only one container as active and de-activates all
|
|
1193
|
+
* other application containers around.
|
|
1194
|
+
*
|
|
1195
|
+
* @param {object} oTargetApplicationContainer
|
|
1196
|
+
* The application container to activate. Pass <code>null</code> in
|
|
1197
|
+
* case no application container must be activated.
|
|
1198
|
+
*
|
|
1199
|
+
* @private
|
|
1200
|
+
*/
|
|
1201
|
+
this._activeContainer = function (oTargetApplicationContainer) {
|
|
1202
|
+
BlueBoxHandler.forEach((oApplicationContainer) => {
|
|
1203
|
+
if (oApplicationContainer && oApplicationContainer !== oTargetApplicationContainer) {
|
|
1204
|
+
try {
|
|
1205
|
+
Log.info(`Deactivating container ${oApplicationContainer.getId()}`);
|
|
1206
|
+
oApplicationContainer.setActive(false);
|
|
1207
|
+
} catch (e) {
|
|
1208
|
+
/* empty */
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
});
|
|
1212
|
+
|
|
1213
|
+
if (oTargetApplicationContainer) {
|
|
1214
|
+
Log.info(`Activating container "${oTargetApplicationContainer.getId()}"`);
|
|
1215
|
+
oTargetApplicationContainer.setActive(true);
|
|
1216
|
+
}
|
|
1217
|
+
};
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* @param {object} oApplicationContainer
|
|
1221
|
+
* @param {object} oApplication
|
|
1222
|
+
* @param {function} fnOnAfterRendering
|
|
1223
|
+
*/
|
|
1224
|
+
this._publishNavigationStateEvents = function (oApplicationContainer, oApplication, fnOnAfterRendering) {
|
|
1225
|
+
//after the app container is rendered, publish an event to notify
|
|
1226
|
+
//that an app was opened
|
|
1227
|
+
const sId = oApplicationContainer.getId ? oApplicationContainer.getId() : "";
|
|
1228
|
+
const appMetaData = AppConfiguration.getMetadata();
|
|
1229
|
+
const sIcon = appMetaData.icon;
|
|
1230
|
+
const sTitle = appMetaData.title;
|
|
1231
|
+
|
|
1232
|
+
//Attach an event handler which will be called onAfterRendering
|
|
1233
|
+
oApplicationContainer.addEventDelegate({ onAfterRendering: fnOnAfterRendering });
|
|
1234
|
+
|
|
1235
|
+
//after the app container exit, publish an event to notify
|
|
1236
|
+
//that an app was closed
|
|
1237
|
+
const that = this;
|
|
1238
|
+
const origExit = oApplicationContainer.exit;
|
|
1239
|
+
oApplicationContainer.exit = function () {
|
|
1240
|
+
if (origExit) {
|
|
1241
|
+
origExit.apply(this, arguments);
|
|
1242
|
+
}
|
|
1243
|
+
//apply the original density settings
|
|
1244
|
+
AppMeta._applyContentDensityByPriority();
|
|
1245
|
+
|
|
1246
|
+
//wrapped in setTimeout since "publish" is not async
|
|
1247
|
+
setTimeout(() => {
|
|
1248
|
+
// TODO: do not mutate an internal structure (in a Timeout!),
|
|
1249
|
+
// create a new object
|
|
1250
|
+
const oEventData = deepExtend({}, oApplication);
|
|
1251
|
+
delete oEventData.componentHandle;
|
|
1252
|
+
oEventData.appId = sId;
|
|
1253
|
+
oEventData.usageIcon = sIcon;
|
|
1254
|
+
oEventData.usageTitle = sTitle;
|
|
1255
|
+
EventBus.getInstance().publish("sap.ushell", "appClosed", oEventData);
|
|
1256
|
+
Log.info("app was closed");
|
|
1257
|
+
}, 0);
|
|
1258
|
+
|
|
1259
|
+
// the former code leaked an *internal* data structure, making it part of a public API
|
|
1260
|
+
// restrict hte public api to the minimal set of precise documented properties which can be retained under
|
|
1261
|
+
// under future evolutions
|
|
1262
|
+
const oPublicEventData = that._publicEventDataFromResolutionResult(oApplication);
|
|
1263
|
+
//publish the event externally
|
|
1264
|
+
RendererUtils.publishExternalEvent("appClosed", oPublicEventData);
|
|
1265
|
+
};
|
|
1266
|
+
};
|
|
1267
|
+
|
|
1268
|
+
/**
|
|
1269
|
+
* Creates a new object Expose a minimal set of values to public external stakeholders
|
|
1270
|
+
* only expose what you can guarantee under any evolution of the unified shell on all platforms
|
|
1271
|
+
* @param {object} oApplication an internal result of NavTargetResolutionInternal
|
|
1272
|
+
* @returns {object} an object exposing certain information to external stakeholders
|
|
1273
|
+
*/
|
|
1274
|
+
this._publicEventDataFromResolutionResult = function (oApplication) {
|
|
1275
|
+
const oPublicEventData = {};
|
|
1276
|
+
if (!oApplication) {
|
|
1277
|
+
return oApplication;
|
|
1278
|
+
}
|
|
1279
|
+
["applicationType", "ui5ComponentName", "url", "additionalInformation", "text"].forEach((sProp) => {
|
|
1280
|
+
oPublicEventData[sProp] = oApplication[sProp];
|
|
1281
|
+
});
|
|
1282
|
+
Object.freeze(oPublicEventData);
|
|
1283
|
+
return oPublicEventData;
|
|
1284
|
+
};
|
|
1285
|
+
|
|
1286
|
+
/**
|
|
1287
|
+
* @param {string} sAppId
|
|
1288
|
+
* @param {string} sShellHash
|
|
1289
|
+
* @param {boolean} bNavigationFromHome
|
|
1290
|
+
* @param {boolean} bNavigationWithInnerAppRoute
|
|
1291
|
+
* @returns {object}
|
|
1292
|
+
*/
|
|
1293
|
+
this._getInMemoryInstance = function (sAppId, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute) {
|
|
1294
|
+
const sStorageAppId = `application-${sAppId}`;
|
|
1295
|
+
const oAppEntry = Storage.get(sStorageAppId);
|
|
1296
|
+
|
|
1297
|
+
//remove application from cache if has different parameters
|
|
1298
|
+
if (oAppEntry) {
|
|
1299
|
+
//Special case - when we're navigating from homepage to an application with state, when keep-alive
|
|
1300
|
+
//is active. In this case, although keep alive is active we need to destroy the application
|
|
1301
|
+
//ans re-open it.
|
|
1302
|
+
const bNavigatingFromHomeWithInnerAppRoute = bNavigationFromHome && bNavigationWithInnerAppRoute;
|
|
1303
|
+
// todo: [FLPCOREANDUX-10024] Add logging
|
|
1304
|
+
|
|
1305
|
+
const bSameParameters = oAppEntry.shellHash === sShellHash;
|
|
1306
|
+
if (bSameParameters && !bNavigatingFromHomeWithInnerAppRoute) {
|
|
1307
|
+
return {
|
|
1308
|
+
destroyApplication: false,
|
|
1309
|
+
appId: oAppEntry.appId,
|
|
1310
|
+
container: oAppEntry.container
|
|
1311
|
+
};
|
|
1312
|
+
}
|
|
1313
|
+
return {
|
|
1314
|
+
destroyApplication: true,
|
|
1315
|
+
appId: oAppEntry.appId,
|
|
1316
|
+
container: oAppEntry.container
|
|
1317
|
+
};
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
return {
|
|
1321
|
+
destroyApplication: true,
|
|
1322
|
+
appId: undefined,
|
|
1323
|
+
container: undefined
|
|
1324
|
+
};
|
|
1325
|
+
};
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* @param {boolean} bNewlyCreatedApplicationContainer
|
|
1329
|
+
* @param {boolean} bShouldBeCached
|
|
1330
|
+
* @param {string} sStorageAppId
|
|
1331
|
+
* @param {object} oApplicationContainer
|
|
1332
|
+
* @param {object} oResolvedHashFragment
|
|
1333
|
+
* @param {string} oParsedShellHash
|
|
1334
|
+
* @param {string} sKeepAliveMode
|
|
1335
|
+
* @param {boolean} bNavigationInSameStatefulContainer
|
|
1336
|
+
* @param {boolean} bReturnedFromKeepAlivePoolFLPV2
|
|
1337
|
+
* @returns {Promise} Resolves when the stateful app was opened.
|
|
1338
|
+
*/ // eslint-disable-next-line max-len
|
|
1339
|
+
this._handleOpenStateful = async function (bNewlyCreatedApplicationContainer, bShouldBeCached, sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bNavigationInSameStatefulContainer, bReturnedFromKeepAlivePoolFLPV2) {
|
|
1340
|
+
oApplicationContainer.setProperty("iframeReusedForApp", true, true);
|
|
1341
|
+
try {
|
|
1342
|
+
if (Storage.get(sStorageAppId) && !bNewlyCreatedApplicationContainer && !bReturnedFromKeepAlivePoolFLPV2) {
|
|
1343
|
+
await BlueBoxHandler.statefulRestoreKeepAliveApp(oApplicationContainer, oResolvedHashFragment.url, sStorageAppId, oResolvedHashFragment, bNavigationInSameStatefulContainer);
|
|
1344
|
+
} else {
|
|
1345
|
+
const oResult = await BlueBoxHandler.statefulCreateApp(oApplicationContainer, oResolvedHashFragment.url, sStorageAppId, oResolvedHashFragment, bNavigationInSameStatefulContainer);
|
|
1346
|
+
if (oResult?.deletedKeepAliveId) {
|
|
1347
|
+
Storage.removeById(oResult.deletedKeepAliveId);
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
//creating a new application check if needs to be keep (for the keep alive), and if so store the application
|
|
1351
|
+
if (bShouldBeCached && !Storage.get(sStorageAppId)) {
|
|
1352
|
+
this._storeApp(sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode);
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
Application.setActiveAppContainer(oApplicationContainer);
|
|
1357
|
+
|
|
1358
|
+
Log.info("New application context opened successfully in an existing transaction UI session.");
|
|
1359
|
+
} catch (vError) {
|
|
1360
|
+
Log.error(vError?.message || vError);
|
|
1361
|
+
// do not bubble up the error
|
|
1362
|
+
}
|
|
1363
|
+
};
|
|
1364
|
+
|
|
1365
|
+
this._isFullWidth = function (oResolvedHashFragment) {
|
|
1366
|
+
let bFullWidth;
|
|
1367
|
+
const sAppType = this._calculateAppType(oResolvedHashFragment);
|
|
1368
|
+
const bDefaultFullWidth = ApplicationType.getDefaultFullWidthSetting(sAppType);
|
|
1369
|
+
|
|
1370
|
+
const bFullWidthCapability = oResolvedHashFragment.appCapabilities?.fullWidth;
|
|
1371
|
+
const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment);
|
|
1372
|
+
//Here there's a double check for the fullwidth - once as a type of boolean and one as a string.
|
|
1373
|
+
//This is because we found that developers configured this variable in the manifest also as a string,
|
|
1374
|
+
//so the checks of the oMetadata and the oResolvedHashFragment are to avoid regression with the use of this field.
|
|
1375
|
+
if (bDefaultFullWidth) {
|
|
1376
|
+
if (oResolvedHashFragment.fullWidth === false || oResolvedHashFragment.fullWidth === "false" ||
|
|
1377
|
+
oMetadata.fullWidth === false || oMetadata.fullWidth === "false" || bFullWidthCapability === false) {
|
|
1378
|
+
bFullWidth = false;
|
|
1379
|
+
}
|
|
1380
|
+
} else if (oResolvedHashFragment.fullWidth || oResolvedHashFragment.fullWidth === "true" ||
|
|
1381
|
+
oMetadata.fullWidth || oMetadata.fullWidth === "true") {
|
|
1382
|
+
bFullWidth = true;
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
if (bFullWidth === undefined) {
|
|
1386
|
+
bFullWidth = bDefaultFullWidth;
|
|
1387
|
+
}
|
|
1388
|
+
return bFullWidth;
|
|
1389
|
+
};
|
|
1390
|
+
|
|
1391
|
+
/**
|
|
1392
|
+
* formerly known as "handleControl"
|
|
1393
|
+
* @param {string} sAppId
|
|
1394
|
+
* @param {object} oParsedShellHash
|
|
1395
|
+
* @param {object} oResolvedHashFragment
|
|
1396
|
+
* @param {string} sOldShellHash
|
|
1397
|
+
* @param {boolean} bNavigationFromHome
|
|
1398
|
+
* @returns {Promise} Resolves when the control is handled
|
|
1399
|
+
*/
|
|
1400
|
+
this.handleCreateApplicationContainer = async function (sAppId, oParsedShellHash, oResolvedHashFragment, sOldShellHash, bNavigationFromHome) {
|
|
1401
|
+
let bReturnedFromKeepAlivePoolFLPV2 = false;
|
|
1402
|
+
let bReturnedFromKeepAlivePoolGuiV1 = false;
|
|
1403
|
+
const sStorageAppId = `application-${sAppId}`;
|
|
1404
|
+
let bNewlyCreatedApplicationContainer = false;
|
|
1405
|
+
let bNavigationInSameStatefulContainer = false;
|
|
1406
|
+
let oApplicationContainer,
|
|
1407
|
+
bReuseStatefulContainer,
|
|
1408
|
+
oTargetAppContainer,
|
|
1409
|
+
iLastValidTimeDelta,
|
|
1410
|
+
bKeptAliveApp,
|
|
1411
|
+
oCachedEntry;
|
|
1412
|
+
|
|
1413
|
+
//get the potential target stateful container and check if it's valid. if not, destroy it
|
|
1414
|
+
//before we try to create the new application
|
|
1415
|
+
oTargetAppContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
|
|
1416
|
+
// todo: [FLPCOREANDUX-10024] DELETES iframe
|
|
1417
|
+
if (BlueBoxHandler.isStatefulContainer(oTargetAppContainer)) {
|
|
1418
|
+
iLastValidTimeDelta = new Date().getTime() - oTargetAppContainer.getIsIframeValidTime().time;
|
|
1419
|
+
if ((BlueBoxHandler.isIframeIsValidSupported(oTargetAppContainer) && iLastValidTimeDelta >= 3500) ||
|
|
1420
|
+
oTargetAppContainer.getIsInvalidIframe()) {
|
|
1421
|
+
const sReason = oTargetAppContainer.getIsInvalidIframe() ? `iframe did not ping in the last '${iLastValidTimeDelta}' ms` : "iframe is in invalid state";
|
|
1422
|
+
Log.warning(
|
|
1423
|
+
`Destroying stateful container iframe due to unresponsiveness (${oTargetAppContainer.getId()})`,
|
|
1424
|
+
`reason: ${sReason}`,
|
|
1425
|
+
"sap.ushell.components.applicationIntegration.AppLifeCycle"
|
|
1426
|
+
);
|
|
1427
|
+
|
|
1428
|
+
// todo: [FLPCOREANDUX-10024] this destroy/remove can be simplified
|
|
1429
|
+
BlueBoxHandler.removeCapabilities(oTargetAppContainer);
|
|
1430
|
+
await this._destroyApplication(sStorageAppId, oTargetAppContainer);
|
|
1431
|
+
BlueBoxHandler.deleteBlueBoxByUrl(oResolvedHashFragment.url);
|
|
1432
|
+
oTargetAppContainer = undefined;
|
|
1433
|
+
//in this case we do not care about the old application intent as it is currently relevant only when
|
|
1434
|
+
//trying to open app in the same current stateful container
|
|
1435
|
+
sOldShellHash = undefined;
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
//we will close the application we are leaving when:
|
|
1440
|
+
// 1. the application is running in a stateful container
|
|
1441
|
+
// 2. this is a legacy keep alive app, and we navigate back (this in order to return the container to the pool
|
|
1442
|
+
// of containers to it can be used again for the upcoming opened app)
|
|
1443
|
+
// todo: [FLPCOREANDUX-10024] DELETES more iframe
|
|
1444
|
+
if (!bNavigationFromHome) {
|
|
1445
|
+
const oCurrentAppContainer = this.getCurrentApplication()?.container;
|
|
1446
|
+
bReuseStatefulContainer = BlueBoxHandler.isStatefulContainer(oCurrentAppContainer);
|
|
1447
|
+
// todo [FLPCOREANDUX-10024] why is id required here?
|
|
1448
|
+
const bSourceIsKeepAliveFromPool = oCurrentAppContainer && !!oCurrentAppContainer.getCurrentAppId() && BlueBoxHandler.isStatefulContainerInKeepAlivePool(oCurrentAppContainer);
|
|
1449
|
+
if (bReuseStatefulContainer || bSourceIsKeepAliveFromPool) {
|
|
1450
|
+
await this._handleExitApplication(oCurrentAppContainer, false, false);
|
|
1451
|
+
if (oCurrentAppContainer === oTargetAppContainer) {
|
|
1452
|
+
bNavigationInSameStatefulContainer = true;
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
//now, we can open the new application
|
|
1458
|
+
const sKeepAliveMode = this._calculateKeepAliveMode(sStorageAppId, oResolvedHashFragment, oParsedShellHash);
|
|
1459
|
+
const bShouldBeCached = !!sKeepAliveMode;
|
|
1460
|
+
|
|
1461
|
+
oApplicationContainer = BlueBoxHandler.getBlueBoxByUrl(oResolvedHashFragment.url);
|
|
1462
|
+
bReuseStatefulContainer = BlueBoxHandler.isStatefulContainer(oApplicationContainer);
|
|
1463
|
+
// todo: [FLPCOREANDUX-10024] GETTER of innerControl for keep alive / stateful
|
|
1464
|
+
if (!bReuseStatefulContainer) {
|
|
1465
|
+
// only clear oApplicationContainer in case it is not a navigation from an application to the same application
|
|
1466
|
+
if (oCurrentApplication && sStorageAppId !== oCurrentApplication.appId) {
|
|
1467
|
+
oApplicationContainer = undefined;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
oCachedEntry = Storage.get(sStorageAppId);
|
|
1471
|
+
oApplicationContainer = oCachedEntry?.container;
|
|
1472
|
+
|
|
1473
|
+
if (oApplicationContainer && bShouldBeCached) {
|
|
1474
|
+
bKeptAliveApp = true;
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
// todo: [FLPCOREANDUX-10024] CREATE / SETTER of currentApplication
|
|
1479
|
+
if (bReuseStatefulContainer) {
|
|
1480
|
+
if (!oApplicationContainer) {
|
|
1481
|
+
oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
|
|
1482
|
+
|
|
1483
|
+
// todo: [FLPCOREANDUX-10024] the following should be obsolete
|
|
1484
|
+
const oStorageEntry = Storage.get(oApplicationContainer.getId());
|
|
1485
|
+
if (oStorageEntry) {
|
|
1486
|
+
oCurrentApplication = oStorageEntry;
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
bNewlyCreatedApplicationContainer = true;
|
|
1490
|
+
}
|
|
1491
|
+
} else if (oApplicationContainer && !bShouldBeCached && BlueBoxHandler.getStatefulContainerType(oResolvedHashFragment.url, true) !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1) {
|
|
1492
|
+
//this case this controller can't be reused and we need it to be embed, so delete it.
|
|
1493
|
+
await this._destroyApplication(oApplicationContainer.getId(), oApplicationContainer);
|
|
1494
|
+
|
|
1495
|
+
// The immediately following method call internally calls
|
|
1496
|
+
// `this.oViewPortContainer.addCenterViewPort(oApplicationContainer)`
|
|
1497
|
+
// when Gui V1 Stateful Container is true, and in that case
|
|
1498
|
+
// `oApplicationContainer` will be the component control of an existing session.
|
|
1499
|
+
oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
|
|
1500
|
+
} else if (!oApplicationContainer) {
|
|
1501
|
+
// The immediately following method call internally calls
|
|
1502
|
+
// `this.oViewPortContainer.addCenterViewPort(oApplicationContainer)`
|
|
1503
|
+
// when Gui V1 Stateful Container is true, and in that case
|
|
1504
|
+
// `oApplicationContainer` will be the component control of an existing session.
|
|
1505
|
+
oApplicationContainer = await this._createApplicationContainer(sAppId, oParsedShellHash, oResolvedHashFragment);
|
|
1506
|
+
|
|
1507
|
+
//if we got an iframe from cache, simulate stateful container
|
|
1508
|
+
//open that should happen later here
|
|
1509
|
+
if (oApplicationContainer.getIsFetchedFromCache()) {
|
|
1510
|
+
if (oApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1_KEEP_ALIVE) {
|
|
1511
|
+
bReturnedFromKeepAlivePoolGuiV1 = true;
|
|
1512
|
+
} else {
|
|
1513
|
+
bReuseStatefulContainer = true;
|
|
1514
|
+
bReturnedFromKeepAlivePoolFLPV2 = true;
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
// todo: [FLPCOREANDUX-10024] rework empty applicationContainer case
|
|
1520
|
+
// fallback?
|
|
1521
|
+
|
|
1522
|
+
await ushellUtils.promisify(oApplicationContainer.getDeffedControlCreation());
|
|
1523
|
+
|
|
1524
|
+
//here, we simply show (turning to visible) the container of the new opened application in case it is not stateful container
|
|
1525
|
+
//and not old gui v1 stateful
|
|
1526
|
+
if (oApplicationContainer.getStatefulType() !== BlueBoxHandler.STATEFUL_TYPES.GUI_V1 && !bReuseStatefulContainer) {
|
|
1527
|
+
if (bKeptAliveApp) {
|
|
1528
|
+
EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
|
|
1529
|
+
}
|
|
1530
|
+
const oStorageEntry = Storage.get(oApplicationContainer.getId());
|
|
1531
|
+
if (oStorageEntry) {
|
|
1532
|
+
oCurrentApplication = oStorageEntry;
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
if (bKeptAliveApp) {
|
|
1536
|
+
EventBus.getInstance().publish("sap.ushell", "appOpened", oResolvedHashFragment);
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
// Assuming a previously existing TR container existed and is now
|
|
1541
|
+
// going to be reused, we prompt the container to load the new application context.
|
|
1542
|
+
|
|
1543
|
+
// SAP GUI is sending post messages for back navigation as soon the create application event is sent to the iframe,
|
|
1544
|
+
// so this makes sure the container is active before sending the event.
|
|
1545
|
+
// For WD applications, the application is active only after the application is created.
|
|
1546
|
+
// So it is not navigated twice.
|
|
1547
|
+
if (oApplicationContainer.getApplicationType() === ApplicationType.TR.type) {
|
|
1548
|
+
this._activeContainer(oApplicationContainer);
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
const oStorageEntry = Storage.get(sStorageAppId);
|
|
1552
|
+
if (oStorageEntry) {
|
|
1553
|
+
AppInfoParameters.restore(oStorageEntry);
|
|
1554
|
+
} else {
|
|
1555
|
+
AppInfoParameters.flush();
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
|
|
1559
|
+
//here, we create the application in case this is a stateful container (meaning, using the existing iframe)
|
|
1560
|
+
if (bReuseStatefulContainer) {
|
|
1561
|
+
//for scube - make sure the container is active before we open the app
|
|
1562
|
+
//to allow post messages form the iframe to flp that are sent
|
|
1563
|
+
//as part of the target resolution process
|
|
1564
|
+
if (oResolvedHashFragment.appCapabilities?.appFrameworkId === "UI5") {
|
|
1565
|
+
oApplicationContainer.setProperty("active", true, true);
|
|
1566
|
+
}
|
|
1567
|
+
// eslint-disable-next-line max-len
|
|
1568
|
+
await this._handleOpenStateful(bNewlyCreatedApplicationContainer, bShouldBeCached, sStorageAppId, oApplicationContainer, oResolvedHashFragment, oParsedShellHash, sKeepAliveMode, bNavigationInSameStatefulContainer, bReturnedFromKeepAlivePoolFLPV2);
|
|
1569
|
+
|
|
1570
|
+
} else if (oApplicationContainer.getStatefulType() === BlueBoxHandler.STATEFUL_TYPES.GUI_V1 || bReturnedFromKeepAlivePoolGuiV1) {
|
|
1571
|
+
//here, we create the application in case this is old gui v1 stateful
|
|
1572
|
+
await WebGUIStatefulHandler.guiStatefulCreateApp(this, oApplicationContainer, oResolvedHashFragment);
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
//for case of stateful container or gui v1 stateful, show the application view (make it visible)
|
|
1576
|
+
ushellUtils.setPerformanceMark("FLP -- centerViewPort");
|
|
1577
|
+
if (oApplicationContainer.getApplicationType() !== ApplicationType.TR.type) {
|
|
1578
|
+
// Activate container before showing it (start reacting to postMessage calls)
|
|
1579
|
+
this._activeContainer(oApplicationContainer);
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
/*
|
|
1583
|
+
* Workaround:
|
|
1584
|
+
* The oCurrentApplication object does not reflect the currently opened application.
|
|
1585
|
+
* This leads to store/restore calls on the wrong application.
|
|
1586
|
+
* Create application that is not persisted and not cashed as a fallback.
|
|
1587
|
+
*
|
|
1588
|
+
* This issue occurs for iframe applications reusing the iframe.
|
|
1589
|
+
*/
|
|
1590
|
+
if (oCurrentApplication.appId !== sStorageAppId) {
|
|
1591
|
+
oCurrentApplication = {
|
|
1592
|
+
appId: sStorageAppId,
|
|
1593
|
+
stt: "loading",
|
|
1594
|
+
container: oApplicationContainer,
|
|
1595
|
+
meta: AppConfiguration.getMetadata(oResolvedHashFragment),
|
|
1596
|
+
app: undefined
|
|
1597
|
+
};
|
|
1598
|
+
}
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
/**
|
|
1602
|
+
*/
|
|
1603
|
+
this.navToCurrentApp = function () {
|
|
1604
|
+
const oApplicationContainer = this.getCurrentApplication().container;
|
|
1605
|
+
// todo: [FLPCOREANDUX-10024] maybe switch to 'this.getCurrentApplication().appId' instead
|
|
1606
|
+
this._navTo(oApplicationContainer.getId());
|
|
1607
|
+
|
|
1608
|
+
// todo: [FLPCOREANDUX-10024]
|
|
1609
|
+
// - Move styles into control? or at least out of here
|
|
1610
|
+
// - Is this even needed? This doesn't seem to trigger the onAfterNavigate as indicated by the following comment.
|
|
1611
|
+
//Added this because in cases when navigating to the same id (can happen when stateful container, I need the on onAfterNavigate)
|
|
1612
|
+
//This must only be done after the _navTo as the ViewPortContainer's navTo function relies on the state of those classes.
|
|
1613
|
+
if (oApplicationContainer.hasStyleClass("sapUShellApplicationContainerShiftedIframe")) {
|
|
1614
|
+
oApplicationContainer.toggleStyleClass("sapUShellApplicationContainerIframeHidden", false);
|
|
1615
|
+
} else {
|
|
1616
|
+
oApplicationContainer.toggleStyleClass("hidden", false);
|
|
1617
|
+
}
|
|
1618
|
+
};
|
|
1619
|
+
|
|
1620
|
+
/**
|
|
1621
|
+
* New app was created and we now have to switch the state
|
|
1622
|
+
* @param {string} sLaunchpadState
|
|
1623
|
+
* @param {string} sAppId
|
|
1624
|
+
* @param {string} sAppType
|
|
1625
|
+
* @param {boolean} bIsExplaceNavigation
|
|
1626
|
+
*/
|
|
1627
|
+
this.switchViewState = function (sLaunchpadState, sAppId, sAppType, bIsExplaceNavigation) {
|
|
1628
|
+
// Store state before creating a new one
|
|
1629
|
+
const oFromStorageEntry = Storage.get(oCurrentApplication.appId);
|
|
1630
|
+
if (!oFromStorageEntry) {
|
|
1631
|
+
// We have to destroy managed queue BEFORE we're applying the pending changes
|
|
1632
|
+
StateManager.destroyManagedControls();
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
const sShellMode = StateManager.getShellMode();
|
|
1636
|
+
// GUI Applications need a back button to work properly
|
|
1637
|
+
const oShellModeOverrides = {
|
|
1638
|
+
TR: {
|
|
1639
|
+
headerless: ShellMode.Minimal
|
|
1640
|
+
}
|
|
1641
|
+
};
|
|
1642
|
+
|
|
1643
|
+
let sShellModeOverride;
|
|
1644
|
+
if (!bIsExplaceNavigation) {
|
|
1645
|
+
sShellModeOverride = oShellModeOverrides[sAppType]?.[sShellMode];
|
|
1646
|
+
}
|
|
1647
|
+
StateManager.switchState(sLaunchpadState, sShellModeOverride);
|
|
1648
|
+
|
|
1649
|
+
// Restore state if it already exists
|
|
1650
|
+
const sToStorageAppId = `application-${sAppId}`;
|
|
1651
|
+
const oToStorageEntry = Storage.get(sToStorageAppId);
|
|
1652
|
+
if (oToStorageEntry) {
|
|
1653
|
+
KeepAlive.restore(oToStorageEntry);
|
|
1654
|
+
} else {
|
|
1655
|
+
KeepAlive.flush();
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
//Process Dangling UI elements and continue.
|
|
1659
|
+
StateManager.applyStalledChanges();
|
|
1660
|
+
};
|
|
1661
|
+
|
|
1662
|
+
/**
|
|
1663
|
+
* @param {object} oCommunicationHandler
|
|
1664
|
+
*/
|
|
1665
|
+
this.registerShellCommunicationHandler = function (oCommunicationHandler) {
|
|
1666
|
+
Application.registerShellCommunicationHandler(oCommunicationHandler);
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1669
|
+
/**
|
|
1670
|
+
* @returns {boolean} Whether the floating container is docked.
|
|
1671
|
+
*/
|
|
1672
|
+
this._isFloatingContainerDocked = function () {
|
|
1673
|
+
const bDocked = ShellModel.getModel().getProperty("/floatingContainer/state").includes("docked");
|
|
1674
|
+
const bVisible = ShellModel.getModel().getProperty("/floatingContainer/visible");
|
|
1675
|
+
return bDocked && bVisible;
|
|
1676
|
+
};
|
|
1677
|
+
|
|
1678
|
+
/**
|
|
1679
|
+
*/
|
|
1680
|
+
this._sendFocusBackToShell = function () {
|
|
1681
|
+
if (!Device.system.desktop) {
|
|
1682
|
+
return;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
sap.ui.require(["sap/ushell/renderer/AccessKeysHandler"], (AccessKeysHandler) => {
|
|
1686
|
+
const sCurrentLaunchpadState = StateManager.getLaunchpadState();
|
|
1687
|
+
const bDefaultShellMode = StateManager.getShellMode() === ShellMode.Default;
|
|
1688
|
+
const oShellAppTitle = Element.getElementById("shellAppTitle");
|
|
1689
|
+
|
|
1690
|
+
if (oShellAppTitle && sCurrentLaunchpadState === LaunchpadState.App && bDefaultShellMode) {
|
|
1691
|
+
const oShellAppTitleDomRef = oShellAppTitle.getFocusDomRef();
|
|
1692
|
+
if (oShellAppTitleDomRef) {
|
|
1693
|
+
AccessKeysHandler.sendFocusBackToShell(oShellAppTitleDomRef.getAttribute("id"));
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
});
|
|
1697
|
+
};
|
|
1698
|
+
|
|
1699
|
+
/**
|
|
1700
|
+
* @param {object} oResolvedHashFragment
|
|
1701
|
+
*/
|
|
1702
|
+
this._announceAppOpening = function (oResolvedHashFragment) {
|
|
1703
|
+
//Screen reader: "Loading Complete"
|
|
1704
|
+
window.setTimeout(() => {
|
|
1705
|
+
window.setTimeout(() => {
|
|
1706
|
+
const oAccessibilityHelperLoadingComplete = document.getElementById("sapUshellLoadingAccessibilityHelper-loadingComplete");
|
|
1707
|
+
|
|
1708
|
+
if (oAccessibilityHelperLoadingComplete) {
|
|
1709
|
+
oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "polite");
|
|
1710
|
+
oAccessibilityHelperLoadingComplete.innerHTML = ushellResources.i18n.getText("loadingComplete");
|
|
1711
|
+
window.setTimeout(() => {
|
|
1712
|
+
oAccessibilityHelperLoadingComplete.setAttribute("aria-live", "off");
|
|
1713
|
+
oAccessibilityHelperLoadingComplete.innerHTML = "";
|
|
1714
|
+
}, 0);
|
|
1715
|
+
}
|
|
1716
|
+
}, 600);
|
|
1717
|
+
|
|
1718
|
+
EventBus.getInstance().publish("launchpad", "appOpening", oResolvedHashFragment);
|
|
1719
|
+
Log.info("app is being opened");
|
|
1720
|
+
}, 0);
|
|
1721
|
+
};
|
|
1722
|
+
|
|
1723
|
+
/**
|
|
1724
|
+
* @param {string} sAppId
|
|
1725
|
+
* @param {object} oParsedShellHash
|
|
1726
|
+
* @param {object} oResolvedHashFragment
|
|
1727
|
+
* @param {string} sShellHash
|
|
1728
|
+
* @returns {object} The app container.
|
|
1729
|
+
*/
|
|
1730
|
+
this._createApplicationContainer = async function (sAppId, oParsedShellHash, oResolvedHashFragment) {
|
|
1731
|
+
const oMetadata = AppConfiguration.getMetadata(oResolvedHashFragment, oResolvedHashFragment?.sFixedShellHash);
|
|
1732
|
+
const bFullWidth = this._isFullWidth(oResolvedHashFragment);
|
|
1733
|
+
|
|
1734
|
+
/*
|
|
1735
|
+
* The external navigation mode in the resolution result is calculated
|
|
1736
|
+
* statically, and indicates a future state. It currently answers the
|
|
1737
|
+
* question: "is the application going to be opened explace?".
|
|
1738
|
+
*
|
|
1739
|
+
* The target navigation mode, instead, answers the question: "was
|
|
1740
|
+
* the application opened explace?".
|
|
1741
|
+
*
|
|
1742
|
+
* We need to have this logic, because embedded applications do not
|
|
1743
|
+
* check the coldstart condition.
|
|
1744
|
+
*/
|
|
1745
|
+
oResolvedHashFragment.targetNavigationMode = ushellUtils.isColdStart() ? "explace" : "inplace";
|
|
1746
|
+
oResolvedHashFragment.shellUIService = oGlobalShellUIService.getInterface();
|
|
1747
|
+
|
|
1748
|
+
// send focus back to shell for new ApplicationContainers
|
|
1749
|
+
this._sendFocusBackToShell();
|
|
1750
|
+
|
|
1751
|
+
this._announceAppOpening(oResolvedHashFragment);
|
|
1752
|
+
|
|
1753
|
+
await this._openApp(sAppId, oResolvedHashFragment, oParsedShellHash);
|
|
1754
|
+
const oApplicationContainer = oCurrentApplication.container;
|
|
1755
|
+
|
|
1756
|
+
const bContainerFromCachePool = oApplicationContainer.getIsFetchedFromCache();
|
|
1757
|
+
|
|
1758
|
+
if (!bContainerFromCachePool) {
|
|
1759
|
+
this._publishNavigationStateEvents(oApplicationContainer, oResolvedHashFragment, this.onAppAfterRendering.bind(this, oResolvedHashFragment));
|
|
1760
|
+
|
|
1761
|
+
if (ushellUtils.isSAPLegacyApplicationType(oApplicationContainer.getApplicationType(), oApplicationContainer.getFrameworkId())) {
|
|
1762
|
+
oApplicationContainer.addStyleClass("sapUShellApplicationContainerShiftedIframe");
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
if (!bFullWidth) {
|
|
1766
|
+
oApplicationContainer.addStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
// todo: [FLPCOREANDUX-10024] clarify whether this should be reactive instead of one time only
|
|
1770
|
+
// todo: [FLPCOREANDUX-10024] move this block to ShellController
|
|
1771
|
+
if (this._isFloatingContainerDocked() && window.matchMedia("(min-width: 106.4rem)").matches) {
|
|
1772
|
+
oApplicationContainer.addStyleClass("sapUShellDockingContainer");
|
|
1773
|
+
oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1774
|
+
} else if (this._isFloatingContainerDocked()) {
|
|
1775
|
+
oApplicationContainer.removeStyleClass("sapUShellApplicationContainerLimitedWidth");
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
oApplicationContainer.toggleStyleClass("sapUshellDefaultBackground", !oMetadata.hideLightBackground);
|
|
1779
|
+
|
|
1780
|
+
AppMeta._applyContentDensityByPriority();
|
|
1781
|
+
|
|
1782
|
+
// Add inner control for next request
|
|
1783
|
+
this._addApplicationContainerToViewPort(oApplicationContainer);
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
ushellUtils.setPerformanceMark("FLP - addAppContainer");
|
|
1787
|
+
|
|
1788
|
+
return oApplicationContainer;
|
|
1789
|
+
};
|
|
1790
|
+
|
|
1791
|
+
/**
|
|
1792
|
+
* @param {string} sShellHash
|
|
1793
|
+
* @param {object} oResolvedHashFragment
|
|
1794
|
+
* @param {boolean} bNavigationFromHome
|
|
1795
|
+
* @param {boolean} bNavigationWithInnerAppRoute
|
|
1796
|
+
*/
|
|
1797
|
+
this.handleBeforeCreateApp = async function (sShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
|
|
1798
|
+
const sIntent = UrlParsing.getBasicHash(sShellHash);
|
|
1799
|
+
const bComponentLoaded = !!oResolvedHashFragment?.componentHandle;
|
|
1800
|
+
// for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
|
|
1801
|
+
// NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
|
|
1802
|
+
const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
|
|
1803
|
+
|
|
1804
|
+
// handle special case when navigating from home to an application with state, when keep-alive is active
|
|
1805
|
+
const oInMemoryApplicationInstance = this._getInMemoryInstance(sIntent, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute);
|
|
1806
|
+
|
|
1807
|
+
if (!oInMemoryApplicationInstance.destroyApplication) {
|
|
1808
|
+
// no destroy required
|
|
1809
|
+
|
|
1810
|
+
} else if (bComponentLoaded || !sTargetUi5ComponentName) { // non UI5 Application
|
|
1811
|
+
if ((
|
|
1812
|
+
oResolvedHashFragment.applicationType === "URL"
|
|
1813
|
+
|| ushellUtils.isSAPLegacyApplicationType(oResolvedHashFragment.applicationType)
|
|
1814
|
+
)
|
|
1815
|
+
&& oInMemoryApplicationInstance.destroyApplication
|
|
1816
|
+
&& oInMemoryApplicationInstance.appId
|
|
1817
|
+
) {
|
|
1818
|
+
await this._destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
} else { // UI5 Application
|
|
1822
|
+
await this._destroyApplication(oInMemoryApplicationInstance.appId, oInMemoryApplicationInstance.container);
|
|
1823
|
+
const oApplicationContainer = this._getApplicationContainerFromViewPort(sIntent);
|
|
1824
|
+
|
|
1825
|
+
if (oApplicationContainer) {
|
|
1826
|
+
this._removeApplicationContainerFromViewPort(oApplicationContainer.getId());
|
|
1827
|
+
oApplicationContainer.destroy();
|
|
1828
|
+
}
|
|
1829
|
+
|
|
1830
|
+
// close all keep alive apps with the same component name
|
|
1831
|
+
await this._closeKeepAliveApps((oStorageEntry) => oStorageEntry.ui5ComponentName === oResolvedHashFragment.ui5ComponentName);
|
|
1832
|
+
}
|
|
1833
|
+
};
|
|
1834
|
+
|
|
1835
|
+
/**
|
|
1836
|
+
* @param {string} sShellHash
|
|
1837
|
+
* @param {object} oParsedShellHash
|
|
1838
|
+
* @param {object} oResolvedHashFragment
|
|
1839
|
+
* @param {boolean} bNavigationFromHome
|
|
1840
|
+
* @param {boolean} bNavigationWithInnerAppRoute
|
|
1841
|
+
*/
|
|
1842
|
+
this.handleCreateApp = async function (sShellHash, oParsedShellHash, oResolvedHashFragment, bNavigationFromHome, bNavigationWithInnerAppRoute) {
|
|
1843
|
+
const sIntent = UrlParsing.getBasicHash(sShellHash);
|
|
1844
|
+
const bComponentLoaded = !!oResolvedHashFragment?.componentHandle;
|
|
1845
|
+
// for SAPUI5 apps, the application type is still "URL" due to backwards compatibility, but the
|
|
1846
|
+
// NavTargetResolutionInternal service already extracts the component name, so this can directly be used as indicator
|
|
1847
|
+
const sTargetUi5ComponentName = oResolvedHashFragment?.ui5ComponentName;
|
|
1848
|
+
const bIsUI5App = !!sTargetUi5ComponentName;
|
|
1849
|
+
const oInMemoryApplicationInstance = this._getInMemoryInstance(sIntent, sShellHash, bNavigationFromHome, bNavigationWithInnerAppRoute);
|
|
1850
|
+
|
|
1851
|
+
// todo: [FLPCOREANDUX-10024] checking on the destroyApplication flag is odd at this point
|
|
1852
|
+
if (bIsUI5App && !bComponentLoaded && oInMemoryApplicationInstance.destroyApplication) { // UI5 Application
|
|
1853
|
+
AppConfiguration.setApplicationInInitMode();
|
|
1854
|
+
|
|
1855
|
+
/*
|
|
1856
|
+
* normal application:
|
|
1857
|
+
* fire the _prior.newUI5ComponentInstantion event before creating the new component instance, so that
|
|
1858
|
+
* the ApplicationContainer can stop the router of the current app (avoid inner-app hash change notifications)
|
|
1859
|
+
* NOTE: this dependency to the ApplicationContainer is not nice, but we need a fast fix now; we should refactor
|
|
1860
|
+
* the ApplicationContainer code, because most of the logic has to be done by the shell controller;
|
|
1861
|
+
* maybe rather introduce a utility module
|
|
1862
|
+
*/
|
|
1863
|
+
EventBus.getInstance().publish("ApplicationContainer", "_prior.newUI5ComponentInstantion",
|
|
1864
|
+
{ name: sTargetUi5ComponentName }
|
|
1865
|
+
);
|
|
1866
|
+
|
|
1867
|
+
// load ui5 component via shell service; core-ext-light will be loaded as part of the asyncHints
|
|
1868
|
+
await Container.getServiceAsync("Ui5ComponentLoader");
|
|
1869
|
+
|
|
1870
|
+
/*
|
|
1871
|
+
* FIXME: It would be better to call a function that simply
|
|
1872
|
+
* and intentionally loads the dependencies of the UI5
|
|
1873
|
+
* application, rather than creating a component and expecting
|
|
1874
|
+
* the dependencies to be loaded as a side effect.
|
|
1875
|
+
* Moreover, the comment reads "load ui5 component via shell service"
|
|
1876
|
+
* however that is 'not needed' since the loaded component
|
|
1877
|
+
* is not used. We should evaluate the possible performance
|
|
1878
|
+
* hit taken due to this implicit means to an end.
|
|
1879
|
+
*/
|
|
1880
|
+
|
|
1881
|
+
/*
|
|
1882
|
+
* return value is unused.
|
|
1883
|
+
* This is because oResolvedHashFragment contains the component handle already.
|
|
1884
|
+
* See the preceding note in AppLifeCycle.createComponent.
|
|
1885
|
+
*/
|
|
1886
|
+
await Application.createComponent(oResolvedHashFragment, oParsedShellHash);
|
|
1887
|
+
}
|
|
1888
|
+
};
|
|
1889
|
+
|
|
1890
|
+
/**
|
|
1891
|
+
*
|
|
1892
|
+
* @param {sap.ui.core.Component} oApplication
|
|
1893
|
+
*/
|
|
1894
|
+
this.onAppAfterRendering = function (oApplication) {
|
|
1895
|
+
// wrapped in setTimeout since "publish" is not async
|
|
1896
|
+
window.setTimeout(() => {
|
|
1897
|
+
EventBus.getInstance().publish("sap.ushell", "appOpened", oApplication);
|
|
1898
|
+
Log.info("app was opened");
|
|
1899
|
+
}, 0);
|
|
1900
|
+
|
|
1901
|
+
// publish the event externally
|
|
1902
|
+
// TODO: cloned, frozen object!
|
|
1903
|
+
const oAppOpenedEventData = this._publicEventDataFromResolutionResult(oApplication);
|
|
1904
|
+
|
|
1905
|
+
// Event is emitted internally (EventHub) _and_ externally (for compatibility reasons)
|
|
1906
|
+
EventHub.emit("AppRendered", oAppOpenedEventData, true);
|
|
1907
|
+
RendererUtils.publishExternalEvent("appOpened", oAppOpenedEventData);
|
|
1908
|
+
ushellUtils.setPerformanceMark("FLP.appOpened");
|
|
1909
|
+
|
|
1910
|
+
const sIcon = AppMeta.getAppIcon();
|
|
1911
|
+
StateManager.updateCurrentState("application.icon", Operation.Set, sIcon);
|
|
1912
|
+
};
|
|
1913
|
+
|
|
1914
|
+
/**
|
|
1915
|
+
* Only for testing
|
|
1916
|
+
* @param {sap.ui.core.Control} oNewViewPortContainer
|
|
1917
|
+
*
|
|
1918
|
+
* @private
|
|
1919
|
+
*/
|
|
1920
|
+
this.setViewPortContainer = function (oNewViewPortContainer) {
|
|
1921
|
+
oViewPortContainer = oNewViewPortContainer;
|
|
1922
|
+
};
|
|
1923
|
+
}
|
|
1924
|
+
|
|
1925
|
+
return new AppLifeCycle();
|
|
1926
|
+
}, /* bExport= */ true);
|