@@ -28,7 +28,15 @@ import {
28
28
ChainUnsupportedError ,
29
29
ConnectorUnsupportedError ,
30
30
} from './errors'
31
- import { getAccountIsContract , blockExplorerUrl } from './utils'
31
+ import {
32
+ getAccountIsContract ,
33
+ blockExplorerUrl ,
34
+ getLastActiveAccount ,
35
+ clearLastActiveAccount ,
36
+ setLastActiveAccount ,
37
+ setLastConnector ,
38
+ getLastConnector ,
39
+ } from './utils'
32
40
33
41
import {
34
42
getProviderFromUseWalletId ,
@@ -168,6 +176,7 @@ function UseWalletProvider({
168
176
if ( web3ReactContext . active ) {
169
177
web3ReactContext . deactivate ( )
170
178
}
179
+ clearLastActiveAccount ( )
171
180
setConnector ( null )
172
181
setError ( null )
173
182
setStatus ( 'disconnected' )
@@ -225,6 +234,16 @@ function UseWalletProvider({
225
234
// could reconnect to the last provider the user tried to connect to.
226
235
setConnector ( connectorId )
227
236
await web3ReactContext . activate ( web3ReactConnector , undefined , true )
237
+ setLastConnector ( connectorId )
238
+ if ( connectorId === 'injected' ) {
239
+ const account = await web3ReactConnector . getAccount ( )
240
+ account && setLastActiveAccount ( account )
241
+ web3ReactConnector . getProvider ( ) . then ( ( provider ) => {
242
+ provider . on ( 'accountsChanged' , ( accounts : string [ ] ) => {
243
+ setLastActiveAccount ( accounts [ 0 ] )
244
+ } )
245
+ } )
246
+ }
228
247
setStatus ( 'connected' )
229
248
} catch ( err ) {
230
249
// Don’t throw if another connection has happened in the meantime.
@@ -261,20 +280,19 @@ function UseWalletProvider({
261
280
return
262
281
}
263
282
264
- const { ethereum } = window
265
- ethereum . enable . then ( ( ) => {
266
- if ( ! ethereum ?. selectedAddress ) {
267
- return
268
- }
283
+ const lastConnector = getLastConnector ( )
284
+ const lastActiveAccount = getLastActiveAccount ( )
269
285
286
+ if ( lastActiveAccount && lastConnector === 'injected' ) {
270
287
const isInjectedAvailable = Object . keys ( connectors ) . some (
271
288
( key ) => key === 'injected'
272
289
)
273
290
274
291
if ( isInjectedAvailable ) {
275
292
connect ( )
276
293
}
277
- } )
294
+ }
295
+
278
296
//eslint-disable-next-line
279
297
} , [ ] )
280
298
@@ -372,5 +390,6 @@ export {
372
390
getProviderString ,
373
391
getProviderFromUseWalletId ,
374
392
blockExplorerUrl ,
393
+ getLastActiveAccount ,
375
394
chains ,
376
395
}
0 commit comments