Browse Source

Allow Disconnect of MWA (#960)

* can disconnect

* add back setting unloading to flase

* default to mwa if no other adapters around

* always disconect

* preserve old logic, but only if adapters with standard wallet adapters is empty

* need to flip the boolean

* remove MWA checks outright

* auto select mobile wallet adapter if no other
Alexander Fung 1 year ago
parent
commit
d8632b44ea
1 changed files with 8 additions and 9 deletions
  1. 8 9
      packages/core/react/src/WalletProvider.tsx

+ 8 - 9
packages/core/react/src/WalletProvider.tsx

@@ -76,13 +76,14 @@ export function WalletProvider({
         }
         return [mobileWalletAdapter, ...adaptersWithStandardAdapters];
     }, [adaptersWithStandardAdapters, mobileWalletAdapter]);
-    const [walletName, setWalletName] = useLocalStorage<WalletName | null>(
-        localStorageKey,
-        getIsMobile(adaptersWithStandardAdapters) ? SolanaMobileWalletAdapterWalletName : null
-    );
+    const [walletName, setWalletName] = useLocalStorage<WalletName | null>(localStorageKey, null);
     const adapter = useMemo(
-        () => adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? null,
-        [adaptersWithMobileWalletAdapter, walletName]
+        () =>
+            adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ??
+            (adaptersWithMobileWalletAdapter.length === 1 && adaptersWithMobileWalletAdapter[0] === mobileWalletAdapter
+                ? mobileWalletAdapter
+                : null),
+        [adaptersWithMobileWalletAdapter, walletName, mobileWalletAdapter]
     );
     const changeWallet = useCallback(
         (nextWalletName: WalletName<string> | null) => {
@@ -105,8 +106,6 @@ 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);
@@ -150,7 +149,7 @@ export function WalletProvider({
         };
     }, [adaptersWithStandardAdapters, walletName]);
     const handleConnectError = useCallback(() => {
-        if (adapter && adapter.name !== SolanaMobileWalletAdapterWalletName) {
+        if (adapter) {
             // If any error happens while connecting, unset the adapter.
             changeWallet(null);
         }