Skip to content

Commit d431fde

Browse files
githubdoramonWissenIstNacht
andauthoredNov 4, 2021
wallet connect & auto connect (aragon#157)
* adding walletconnector info and improving check for last connected account for auto connecto * lint fixes * removing unused code * removing more useless code * added autoconnect to simple-example Co-authored-by: WissenIstNacht <[email protected]>
1 parent 83a5d0a commit d431fde

File tree

4 files changed

+59
-7
lines changed

4 files changed

+59
-7
lines changed
 

‎examples/simple-connect/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ function App() {
9797

9898
ReactDOM.render(
9999
<UseWalletProvider
100+
autoConnect
100101
connectors={{
101102
injected: {
102103
//allows you to connect and switch between mainnet and rinkeby within Metamask.

‎src/index.tsx

+26-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,15 @@ import {
2828
ChainUnsupportedError,
2929
ConnectorUnsupportedError,
3030
} 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'
3240

3341
import {
3442
getProviderFromUseWalletId,
@@ -168,6 +176,7 @@ function UseWalletProvider({
168176
if (web3ReactContext.active) {
169177
web3ReactContext.deactivate()
170178
}
179+
clearLastActiveAccount()
171180
setConnector(null)
172181
setError(null)
173182
setStatus('disconnected')
@@ -225,6 +234,16 @@ function UseWalletProvider({
225234
// could reconnect to the last provider the user tried to connect to.
226235
setConnector(connectorId)
227236
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+
}
228247
setStatus('connected')
229248
} catch (err) {
230249
// Don’t throw if another connection has happened in the meantime.
@@ -261,20 +280,19 @@ function UseWalletProvider({
261280
return
262281
}
263282

264-
const { ethereum } = window
265-
ethereum.enable.then(() => {
266-
if (!ethereum?.selectedAddress) {
267-
return
268-
}
283+
const lastConnector = getLastConnector()
284+
const lastActiveAccount = getLastActiveAccount()
269285

286+
if (lastActiveAccount && lastConnector === 'injected') {
270287
const isInjectedAvailable = Object.keys(connectors).some(
271288
(key) => key === 'injected'
272289
)
273290

274291
if (isInjectedAvailable) {
275292
connect()
276293
}
277-
})
294+
}
295+
278296
//eslint-disable-next-line
279297
}, [])
280298

@@ -372,5 +390,6 @@ export {
372390
getProviderString,
373391
getProviderFromUseWalletId,
374392
blockExplorerUrl,
393+
getLastActiveAccount,
375394
chains,
376395
}

‎src/providers/index.tsx

+9
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ const PROVIDERS = new Map<string, Provider>(
7575
'your Ethereum wallet': 'Portis',
7676
},
7777
},
78+
{
79+
id: 'walletconnect',
80+
name: 'WalletConnect',
81+
type: 'Any',
82+
image: `${BASE_URL}/walletconnect.png`,
83+
strings: {
84+
'your Ethereum wallet': 'WalletConnect',
85+
},
86+
},
7887
{
7988
id: 'unknown',
8089
name: 'Unknown',

‎src/utils.ts

+23
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,26 @@ export function pollEvery<R, T>(
147147
}
148148
}
149149
}
150+
151+
const ACCOUNT_KEY = 'LAST_ACTIVE_ACCOUNT'
152+
const CONNECTOR_KEY = 'LAST_WALLET_CONNECTOR'
153+
154+
export const setLastActiveAccount = (account: Account) => {
155+
localStorage?.setItem(ACCOUNT_KEY, account)
156+
}
157+
158+
export const clearLastActiveAccount = () => {
159+
localStorage?.removeItem(ACCOUNT_KEY)
160+
}
161+
162+
export const getLastActiveAccount = (): Account | null => {
163+
return localStorage?.getItem(ACCOUNT_KEY)
164+
}
165+
166+
export const setLastConnector = (connector: string) => {
167+
localStorage?.setItem(CONNECTOR_KEY, connector)
168+
}
169+
170+
export const getLastConnector = (): string | null => {
171+
return localStorage?.getItem(CONNECTOR_KEY)
172+
}

0 commit comments

Comments
 (0)
Please sign in to comment.