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 @@