From 8c258d75a62930a742f643840ee0be1bda641e23 Mon Sep 17 00:00:00 2001 From: "razvan.tomegea" Date: Mon, 16 Dec 2024 21:40:02 +0200 Subject: [PATCH] Fixed cross window page reload on internal logout] --- CHANGELOG.md | 2 ++ src/utils/logout.ts | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d455efcb..a11c9fd8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- [Fixed cross window page reload on internal logout](https://github.com/multiversx/mx-sdk-dapp/pull/1350) + ## [[v3.1.4](https://github.com/multiversx/mx-sdk-dapp/pull/1349)] - 2024-12-16 - [Fixed logout doesn't work when `shouldBroadcastLogoutAcrossTabs` is `false`](https://github.com/multiversx/mx-sdk-dapp/pull/1348) diff --git a/src/utils/logout.ts b/src/utils/logout.ts index c633b5f8d..7c6a0d1e4 100644 --- a/src/utils/logout.ts +++ b/src/utils/logout.ts @@ -1,3 +1,4 @@ +import { safeWindow } from 'lib/sdkDappUtils'; import { CrossWindowProvider } from 'lib/sdkWebWalletCrossWindowProvider'; import { getAccountProvider, getProviderType } from 'providers'; import { logoutAction } from 'reduxStore/commonActions'; @@ -70,13 +71,17 @@ export async function logout( const url = addOriginToLocationPath(callbackUrl); const location = getWindowLocation(); - const callbackPathname = new URL(decodeURIComponent(url)).pathname; + const { pathname: callbackPathname, origin: callbackOrigin } = new URL( + decodeURIComponent(url) + ); // Prevent page redirect if the logout callbackURL is equal to the current URL // or if is wallet provider + // or if we are in a child tab (redirects via window.assign cause automatic tab close) if ( matchPath(location.pathname, callbackPathname) || - (isWalletProvider && isProviderInitialised) + (isWalletProvider && isProviderInitialised) || + (safeWindow?.opener && callbackOrigin === safeWindow?.origin) ) { preventRedirects(); }