diff --git a/.changeset/large-seas-play.md b/.changeset/large-seas-play.md deleted file mode 100644 index 9b612f07a..000000000 --- a/.changeset/large-seas-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@solana/wallet-adapter-react': patch ---- - -Update MWA default selection behavior diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 83905c1ad..be50c5d7f 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -76,14 +76,13 @@ export function WalletProvider({ } return [mobileWalletAdapter, ...adaptersWithStandardAdapters]; }, [adaptersWithStandardAdapters, mobileWalletAdapter]); - const [walletName, setWalletName] = useLocalStorage(localStorageKey, null); + const [walletName, setWalletName] = useLocalStorage( + localStorageKey, + getIsMobile(adaptersWithStandardAdapters) ? SolanaMobileWalletAdapterWalletName : null + ); const adapter = useMemo( - () => - adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? - (adaptersWithMobileWalletAdapter.length === 1 && adaptersWithMobileWalletAdapter[0] === mobileWalletAdapter - ? mobileWalletAdapter - : null), - [adaptersWithMobileWalletAdapter, walletName, mobileWalletAdapter] + () => adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? null, + [adaptersWithMobileWalletAdapter, walletName] ); const changeWallet = useCallback( (nextWalletName: WalletName | null) => { @@ -106,6 +105,8 @@ export function WalletProvider({ if (!adapter) return; function handleDisconnect() { if (isUnloadingRef.current) return; + // Leave the adapter selected in the event of a disconnection. + if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) return; setWalletName(null); } adapter.on('disconnect', handleDisconnect); @@ -149,7 +150,7 @@ export function WalletProvider({ }; }, [adaptersWithStandardAdapters, walletName]); const handleConnectError = useCallback(() => { - if (adapter) { + if (adapter && adapter.name !== SolanaMobileWalletAdapterWalletName) { // If any error happens while connecting, unset the adapter. changeWallet(null); }