From 00c04b0c40e5f48019dba5cbf5c5cb4e30c25081 Mon Sep 17 00:00:00 2001 From: Theophile Sandoz Date: Thu, 22 Feb 2024 11:13:42 +0100 Subject: [PATCH] Fix wallet disconnection --- packages/ui/src/accounts/model/walletConnect.ts | 9 ++++----- .../ui/src/accounts/providers/accounts/useWallets.ts | 5 +++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/ui/src/accounts/model/walletConnect.ts b/packages/ui/src/accounts/model/walletConnect.ts index 8b0e3727a0..7c8b10755e 100644 --- a/packages/ui/src/accounts/model/walletConnect.ts +++ b/packages/ui/src/accounts/model/walletConnect.ts @@ -113,16 +113,15 @@ export class WalletConnect extends BaseDotsamaWallet { } protected _handleDisconnection(provider: Provider): void { - const appDisconnectHandler = () => { + const appDisconnectHandler = async () => { if (!this._provider?.session) return - reset() - - // `client.disconnect` doesn't work (it keeps the connection opened). - provider.client.disconnect({ + await provider.client.disconnect({ topic: this._provider.session.topic, reason: { code: -1, message: 'Disconnected by client!' }, }) + + reset() } const disconnectSubscription = this._disconnection$.subscribe(appDisconnectHandler) diff --git a/packages/ui/src/accounts/providers/accounts/useWallets.ts b/packages/ui/src/accounts/providers/accounts/useWallets.ts index 47984c19ed..b03edec394 100644 --- a/packages/ui/src/accounts/providers/accounts/useWallets.ts +++ b/packages/ui/src/accounts/providers/accounts/useWallets.ts @@ -84,8 +84,9 @@ const useSelectedWallet = (allWallets: Wallet[]) => { const [recentWallet, setRecentWallet] = useLocalStorage('recentWallet') const [walletState, setWalletState] = useState() - const setWallet = useCallback(async (wallet: Wallet | undefined) => { + const setWallet = useCallback(async (wallet: Wallet | undefined): Promise => { if (!wallet) { + WalletDisconnection$.next() _setWallet(undefined) setWalletState(undefined) setRecentWallet(undefined) @@ -98,7 +99,7 @@ const useSelectedWallet = (allWallets: Wallet[]) => { _setWallet(wallet) setWalletState('READY') setRecentWallet(wallet.extensionName) - return () => WalletDisconnection$.next() + return } catch (error) { const message: string = error?.message?.toLowerCase() if (message.includes('not allowed to interact') || message.includes('rejected')) {