@@ -5,12 +5,12 @@ import type {
5
5
InitOptions ,
6
6
OnboardAPI ,
7
7
ConnectOptions ,
8
+ DisconnectOptions ,
8
9
WalletState ,
9
10
ConnectedChain
10
11
} from '@web3-onboard/core'
11
12
12
13
import { Chain } from '@web3-onboard/common'
13
- import { DisconnectOptions } from '@web3-onboard/core/dist/types'
14
14
15
15
export let web3Onboard : OnboardAPI | null = null
16
16
@@ -29,27 +29,39 @@ export const useConnectWallet = (): [
29
29
const [ wallet , setConnectedWallet ] = useState < WalletState | null > ( null )
30
30
const [ connecting , setConnecting ] = useState ( false )
31
31
32
+ useEffect ( ( ) => {
33
+ const subscription = ( web3Onboard as OnboardAPI ) . state
34
+ . select ( 'wallets' )
35
+ . subscribe ( wallets => {
36
+ if ( ! wallet ) return
37
+
38
+ const updatedWallet = wallets . find (
39
+ ( { label } ) => label === wallet . label
40
+ )
41
+
42
+ updatedWallet && setConnectedWallet ( updatedWallet )
43
+ } )
44
+
45
+ return ( ) => subscription . unsubscribe ( )
46
+ } , [ wallet ] )
47
+
32
48
const connect = useCallback ( async ( options : ConnectOptions ) => {
33
49
setConnecting ( true )
34
50
35
- const [ lastConnectedWallet ] = await (
36
- web3Onboard as OnboardAPI
37
- ) . connectWallet ( options )
51
+ const [ connectedWallet ] = await ( web3Onboard as OnboardAPI ) . connectWallet (
52
+ options
53
+ )
38
54
39
55
setConnecting ( false )
40
-
41
- if ( lastConnectedWallet ) {
42
- setConnectedWallet ( lastConnectedWallet )
43
- }
56
+ setConnectedWallet ( connectedWallet || null )
44
57
} , [ ] )
45
58
46
- const disconnect = useCallback ( async ( { label} ) => {
59
+ const disconnect = useCallback ( async ( { label } ) => {
47
60
setConnecting ( true )
48
61
49
- await ( web3Onboard as OnboardAPI ) . disconnectWallet ( { label} )
62
+ await ( web3Onboard as OnboardAPI ) . disconnectWallet ( { label } )
50
63
51
64
setConnectedWallet ( null )
52
-
53
65
setConnecting ( false )
54
66
} , [ ] )
55
67
@@ -83,14 +95,14 @@ export const useSetChain = (
83
95
const chains = useMemo ( ( ) => state . get ( ) . chains , [ ] )
84
96
85
97
useEffect ( ( ) => {
86
- const { unsubscribe } = state . select ( 'wallets' ) . subscribe ( wallets => {
98
+ const subscription = state . select ( 'wallets' ) . subscribe ( wallets => {
87
99
const wallet =
88
100
wallets . find ( ( { label } ) => label === walletLabel ) || wallets [ 0 ]
89
101
90
102
wallet && setConnectedChain ( wallet . chains [ 0 ] )
91
103
} )
92
104
93
- return unsubscribe
105
+ return ( ) => subscription . unsubscribe ( )
94
106
} , [ ] )
95
107
96
108
const set = useCallback ( async ( options : SetChainOptions ) => {
@@ -111,9 +123,9 @@ export const useWallets = (): WalletState[] => {
111
123
112
124
useEffect ( ( ) => {
113
125
const wallets$ = ( web3Onboard as OnboardAPI ) . state . select ( 'wallets' )
114
- const { unsubscribe } = wallets$ . subscribe ( setConnectedWallets )
126
+ const subscription = wallets$ . subscribe ( setConnectedWallets )
115
127
116
- return unsubscribe
128
+ return ( ) => subscription . unsubscribe ( )
117
129
} , [ ] )
118
130
119
131
return wallets
0 commit comments