diff --git a/core/src/Alerts.svelte b/core/src/Alerts.svelte index 7ada7eafb3..4d108a628b 100644 --- a/core/src/Alerts.svelte +++ b/core/src/Alerts.svelte @@ -92,7 +92,7 @@ }, }; handleNavigation(data); - }); + }, () => {}); } else if (link.dismissKey) { dispatch('alertDismiss', { id: alertId, diff --git a/core/src/App.svelte b/core/src/App.svelte index eb7795afeb..288275c920 100644 --- a/core/src/App.svelte +++ b/core/src/App.svelte @@ -245,18 +245,26 @@ return paths.includes(removeQueryParams(routePath)); }; + /** + * Clears the dirty state when dirty state promise resolves and dirty state is not needed anymore + * @param source used for drawers/modals/split view wc and iframe when source is needed to differentiate which mf is affected + */ + const clearDirtyState = (source) => { + if (unsavedChanges && unsavedChanges.dirtySet) { + if (source) { + unsavedChanges.dirtySet.delete(source); + } else { + unsavedChanges.dirtySet.clear(); + } + } + }; + const getUnsavedChangesModalPromise = (source) => { return new Promise((resolve, reject) => { if (shouldShowUnsavedChangesModal(source)) { showUnsavedChangesModal().then( () => { - if (unsavedChanges && unsavedChanges.dirtySet) { - if (source) { - unsavedChanges.dirtySet.delete(source); - } else { - unsavedChanges.dirtySet.clear(); - } - } + clearDirtyState(); resolve(); }, () => { @@ -502,23 +510,26 @@ const handleNavClick = (event) => { const node = event.detail.node; - getUnsavedChangesModalPromise().then(() => { - closeLeftNav(); - if (node.openNodeInModal) { - const route = RoutingHelpers.buildRoute(node, `/${node.pathSegment}`); - openViewInModal( - route, - node.openNodeInModal === true ? {} : node.openNodeInModal - ); - } else if (node.drawer) { - const route = RoutingHelpers.buildRoute(node, `/${node.pathSegment}`); - node.drawer.isDrawer = true; - openViewInDrawer(route, node.drawer); - } else { - getComponentWrapper().set({ isNavigationSyncEnabled: true }); - Routing.handleRouteClick(node, getComponentWrapper()); - } - }); + getUnsavedChangesModalPromise().then( + () => { + closeLeftNav(); + if (node.openNodeInModal) { + const route = RoutingHelpers.buildRoute(node, `/${node.pathSegment}`); + openViewInModal( + route, + node.openNodeInModal === true ? {} : node.openNodeInModal + ); + } else if (node.drawer) { + const route = RoutingHelpers.buildRoute(node, `/${node.pathSegment}`); + node.drawer.isDrawer = true; + openViewInDrawer(route, node.drawer); + } else { + getComponentWrapper().set({ isNavigationSyncEnabled: true }); + Routing.handleRouteClick(node, getComponentWrapper()); + } + }, + () => {} + ); }; const onResizeTabNav = () => { @@ -1002,7 +1013,8 @@ () => { resetModalData(index, isClosedInternal); rp && rp.doResolve(goBackContext); - } + }, + () => {} ); } else if (targetModal && targetModal.modalWC) { resetModalData(index, isClosedInternal); @@ -1089,13 +1101,19 @@ ) { try { if (drawerIframe) { - getUnsavedChangesModalPromise(drawerIframe.contentWindow).then(() => { - resetMicrofrontendDrawerData(); - }); + getUnsavedChangesModalPromise(drawerIframe.contentWindow).then( + () => { + resetMicrofrontendDrawerData(); + }, + () => {} + ); } else if (drawerWC) { - getUnsavedChangesModalPromise().then(() => { - resetMicrofrontendDrawerData(); - }); + getUnsavedChangesModalPromise().then( + () => { + resetMicrofrontendDrawerData(); + }, + () => {} + ); } IframeHelpers.getCurrentMicrofrontendIframe().removeAttribute('style'); } catch (e) { @@ -1571,21 +1589,24 @@ } else { // go back: context from the view if (preservedViews && preservedViews.length > 0) { - getUnsavedChangesModalPromise().then(() => { - // remove current active iframe and data - Iframe.setActiveIframeToPrevious(node); - const previousActiveIframeData = preservedViews.pop(); - // set new active iframe and preservedViews - config.iframe = Iframe.getActiveIframe(node); - isNavigateBack = true; - preservedViews = preservedViews; - goBackContext = _goBackContext; - // TODO: check if getNavigationPath or history pop to update hash / path - handleNavigation( - { params: { link: previousActiveIframeData.path } }, - config - ); - }); + getUnsavedChangesModalPromise().then( + () => { + // remove current active iframe and data + Iframe.setActiveIframeToPrevious(node); + const previousActiveIframeData = preservedViews.pop(); + // set new active iframe and preservedViews + config.iframe = Iframe.getActiveIframe(node); + isNavigateBack = true; + preservedViews = preservedViews; + goBackContext = _goBackContext; + // TODO: check if getNavigationPath or history pop to update hash / path + handleNavigation( + { params: { link: previousActiveIframeData.path } }, + config + ); + }, + () => {} + ); } else { if (_goBackContext) { console.warn( diff --git a/core/src/Authorization.svelte b/core/src/Authorization.svelte index e12a34446e..b82429f099 100644 --- a/core/src/Authorization.svelte +++ b/core/src/Authorization.svelte @@ -154,7 +154,7 @@ } else { Routing.navigateToLink(item); } - }); + }, () => {}); dispatch('toggleDropdownState'); } @@ -169,7 +169,7 @@ } else { console.error('No IDP provider or profile.customLogoutFn is defined.'); } - }); + }, () => {}); } export function onUserSettingsClick() { @@ -246,7 +246,7 @@ tabindex="0" class="fd-list__link" data-testid="luigi-topnav-profile-item" - on:click={(event) => { + on:click={event => { NavigationHelpers.handleNavAnchorClickedWithoutMetaKey(event); }} href={addNavHrefForAnchor ? getRouteLink(profileItem) : undefined} @@ -277,7 +277,7 @@ role="listitem" class="fd-list__item fd-list__item--link lui-anchor-node" on:click|preventDefault={onUserSettingsClick} - on:keyup={(event) => handleKeyUp(event)} + on:keyup={event => handleKeyUp(event)} > {}); dispatch('toggleDropdownState'); } @@ -168,7 +168,7 @@ } else { console.error('No IDP provider or profile.customLogoutFn is defined.'); } - }); + }, () => {}); } export function onUserSettingsClick() { @@ -214,7 +214,7 @@ class="fd-menu__link" data-testid="luigi-topnav-profile-item" href={addNavHrefForAnchor ? getRouteLink(profileItem) : undefined} - on:click={(event) => { + on:click={event => { NavigationHelpers.handleNavAnchorClickedWithoutMetaKey(event); }} > @@ -242,7 +242,7 @@ tabindex="-1" class="fd-menu__item lui-anchor-node" on:click|preventDefault={onUserSettingsClick} - on:keyup={(event) => handleKeyUp(event)} + on:keyup={event => handleKeyUp(event)} data-testid={getTestId(profileNav.settings)} > {}); closeSubNav(); } @@ -121,7 +121,7 @@ > { + on:click={event => { NavigationHelpers.handleNavAnchorClickedWithoutMetaKey(event); }} class="fd-menu__link" diff --git a/core/src/navigation/ContextSwitcher.svelte b/core/src/navigation/ContextSwitcher.svelte index 93dcc1762e..20c14dd12b 100644 --- a/core/src/navigation/ContextSwitcher.svelte +++ b/core/src/navigation/ContextSwitcher.svelte @@ -212,29 +212,35 @@ } export function goToPath(path) { - getUnsavedChangesModalPromise().then(() => { - Routing.navigateTo(path); - }); + getUnsavedChangesModalPromise().then( + () => { + Routing.navigateTo(path); + }, + () => {} + ); } export function goToOption(event) { let option = event.detail.option; let selectedOption = event.detail.selectedOption; - getUnsavedChangesModalPromise().then(() => { - if (preserveSubPathOnSwitch && selectedOption) { - Routing.navigateTo( - ContextSwitcherHelpers.getNodePathFromCurrentPath( - option, - selectedOption - ) - ); - } else { - Routing.navigateTo(option.link); - } - if (isMobile) { - dispatch('toggleDropdownState'); - } - }); + getUnsavedChangesModalPromise().then( + () => { + if (preserveSubPathOnSwitch && selectedOption) { + Routing.navigateTo( + ContextSwitcherHelpers.getNodePathFromCurrentPath( + option, + selectedOption + ) + ); + } else { + Routing.navigateTo(option.link); + } + if (isMobile) { + dispatch('toggleDropdownState'); + } + }, + () => {} + ); } export function toggleDropdownState() { diff --git a/core/src/navigation/LogoTitle.svelte b/core/src/navigation/LogoTitle.svelte index 95ef034840..306e66e9ea 100644 --- a/core/src/navigation/LogoTitle.svelte +++ b/core/src/navigation/LogoTitle.svelte @@ -1,8 +1,17 @@