From 3cdb221680d60d86ac60f4e8f98faea5d2d6475e Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Thu, 25 Apr 2024 15:18:38 -0400 Subject: [PATCH 1/7] can disconnect --- packages/core/react/src/WalletProvider.tsx | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index be50c5d7f..de627364e 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -76,10 +76,7 @@ export function WalletProvider({ } return [mobileWalletAdapter, ...adaptersWithStandardAdapters]; }, [adaptersWithStandardAdapters, mobileWalletAdapter]); - const [walletName, setWalletName] = useLocalStorage( - localStorageKey, - getIsMobile(adaptersWithStandardAdapters) ? SolanaMobileWalletAdapterWalletName : null - ); + const [walletName, setWalletName] = useLocalStorage(localStorageKey, null); const adapter = useMemo( () => adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? null, [adaptersWithMobileWalletAdapter, walletName] @@ -105,8 +102,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); @@ -130,10 +125,6 @@ export function WalletProvider({ }, [autoConnect, adapter]); const isUnloadingRef = useRef(false); useEffect(() => { - if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) { - isUnloadingRef.current = false; - return; - } function handleBeforeUnload() { isUnloadingRef.current = true; } @@ -150,7 +141,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); } From 4ea7236b32f877074f71b618f648972d709f1c61 Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Fri, 26 Apr 2024 00:33:02 -0400 Subject: [PATCH 2/7] add back setting unloading to flase --- packages/core/react/src/WalletProvider.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index de627364e..7d4723ef7 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -125,6 +125,10 @@ export function WalletProvider({ }, [autoConnect, adapter]); const isUnloadingRef = useRef(false); useEffect(() => { + if (walletName === SolanaMobileWalletAdapterWalletName && getIsMobile(adaptersWithStandardAdapters)) { + isUnloadingRef.current = false; + return; + } function handleBeforeUnload() { isUnloadingRef.current = true; } From f61090cd16bcecec1c44941ffaef72cd7a27b5ca Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Fri, 26 Apr 2024 14:33:04 -0400 Subject: [PATCH 3/7] default to mwa if no other adapters around --- packages/core/react/src/WalletProvider.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 7d4723ef7..1424756e8 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -76,7 +76,12 @@ export function WalletProvider({ } return [mobileWalletAdapter, ...adaptersWithStandardAdapters]; }, [adaptersWithStandardAdapters, mobileWalletAdapter]); - const [walletName, setWalletName] = useLocalStorage(localStorageKey, null); + const [walletName, setWalletName] = useLocalStorage( + localStorageKey, + adaptersWithStandardAdapters.length === 0 && getIsMobile(adaptersWithStandardAdapters) + ? SolanaMobileWalletAdapterWalletName + : null + ); const adapter = useMemo( () => adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? null, [adaptersWithMobileWalletAdapter, walletName] From 5642ba73e49150d854ee6312b9fecd278ba38c8f Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Fri, 26 Apr 2024 16:12:15 -0400 Subject: [PATCH 4/7] always disconect --- packages/core/react/src/WalletProvider.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 1424756e8..58885de94 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -89,14 +89,7 @@ export function WalletProvider({ const changeWallet = useCallback( (nextWalletName: WalletName | null) => { if (walletName === nextWalletName) return; - if ( - adapter && - // Selecting a wallet other than the mobile wallet adapter is not - // sufficient reason to call `disconnect` on the mobile wallet adapter. - // Calling `disconnect` on the mobile wallet adapter causes the entire - // authorization store to be wiped. - adapter.name !== SolanaMobileWalletAdapterWalletName - ) { + if (adapter) { adapter.disconnect(); } setWalletName(nextWalletName); From c72209fe7ad8e5d1497b4a0579b477f5b8fa6d4d Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Thu, 9 May 2024 13:46:25 -0400 Subject: [PATCH 5/7] preserve old logic, but only if adapters with standard wallet adapters is empty --- packages/core/react/src/WalletProvider.tsx | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index 58885de94..a835aa7d2 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -89,7 +89,14 @@ export function WalletProvider({ const changeWallet = useCallback( (nextWalletName: WalletName | null) => { if (walletName === nextWalletName) return; - if (adapter) { + if ( + adapter && + // Selecting a wallet other than the mobile wallet adapter is not + // sufficient reason to call `disconnect` on the mobile wallet adapter. + // Calling `disconnect` on the mobile wallet adapter causes the entire + // authorization store to be wiped. + adapter.name !== SolanaMobileWalletAdapterWalletName + ) { adapter.disconnect(); } setWalletName(nextWalletName); @@ -100,6 +107,13 @@ 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 && + adaptersWithStandardAdapters.length === 0 && + getIsMobile(adaptersWithStandardAdapters) + ) + return; setWalletName(null); } adapter.on('disconnect', handleDisconnect); @@ -143,11 +157,15 @@ export function WalletProvider({ }; }, [adaptersWithStandardAdapters, walletName]); const handleConnectError = useCallback(() => { - if (adapter) { + if ( + adapter && + adapter.name !== SolanaMobileWalletAdapterWalletName && + adaptersWithStandardAdapters.length === 0 + ) { // If any error happens while connecting, unset the adapter. changeWallet(null); } - }, [adapter, changeWallet]); + }, [adapter, changeWallet, adaptersWithStandardAdapters]); const selectWallet = useCallback( (walletName: WalletName | null) => { hasUserSelectedAWallet.current = true; From 1651cbdd73d3b1e7ed68c7baf3b9cf9b83138613 Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Thu, 9 May 2024 13:54:31 -0400 Subject: [PATCH 6/7] need to flip the boolean --- packages/core/react/src/WalletProvider.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index a835aa7d2..ecf7914cc 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -159,8 +159,7 @@ export function WalletProvider({ const handleConnectError = useCallback(() => { if ( adapter && - adapter.name !== SolanaMobileWalletAdapterWalletName && - adaptersWithStandardAdapters.length === 0 + (adapter.name !== SolanaMobileWalletAdapterWalletName || adaptersWithStandardAdapters.length !== 0) ) { // If any error happens while connecting, unset the adapter. changeWallet(null); From af496bdc08fe3032037916c36550962cea991c54 Mon Sep 17 00:00:00 2001 From: Alex Fung Date: Tue, 21 May 2024 12:37:23 -0400 Subject: [PATCH 7/7] remove MWA checks outright --- packages/core/react/src/WalletProvider.tsx | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/packages/core/react/src/WalletProvider.tsx b/packages/core/react/src/WalletProvider.tsx index ecf7914cc..7d4723ef7 100644 --- a/packages/core/react/src/WalletProvider.tsx +++ b/packages/core/react/src/WalletProvider.tsx @@ -76,12 +76,7 @@ export function WalletProvider({ } return [mobileWalletAdapter, ...adaptersWithStandardAdapters]; }, [adaptersWithStandardAdapters, mobileWalletAdapter]); - const [walletName, setWalletName] = useLocalStorage( - localStorageKey, - adaptersWithStandardAdapters.length === 0 && getIsMobile(adaptersWithStandardAdapters) - ? SolanaMobileWalletAdapterWalletName - : null - ); + const [walletName, setWalletName] = useLocalStorage(localStorageKey, null); const adapter = useMemo( () => adaptersWithMobileWalletAdapter.find((a) => a.name === walletName) ?? null, [adaptersWithMobileWalletAdapter, walletName] @@ -107,13 +102,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 && - adaptersWithStandardAdapters.length === 0 && - getIsMobile(adaptersWithStandardAdapters) - ) - return; setWalletName(null); } adapter.on('disconnect', handleDisconnect); @@ -157,14 +145,11 @@ export function WalletProvider({ }; }, [adaptersWithStandardAdapters, walletName]); const handleConnectError = useCallback(() => { - if ( - adapter && - (adapter.name !== SolanaMobileWalletAdapterWalletName || adaptersWithStandardAdapters.length !== 0) - ) { + if (adapter) { // If any error happens while connecting, unset the adapter. changeWallet(null); } - }, [adapter, changeWallet, adaptersWithStandardAdapters]); + }, [adapter, changeWallet]); const selectWallet = useCallback( (walletName: WalletName | null) => { hasUserSelectedAWallet.current = true;