Skip to content

Commit e70d9ab

Browse files
authored
Merge pull request #180 from vu3th/feat/watch-wallet-updated
Feat/watch wallet updated
2 parents 8709f70 + 1af8bfc commit e70d9ab

File tree

4 files changed

+76
-50
lines changed

4 files changed

+76
-50
lines changed

app/app.vue

+10-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ useHead({
2121
},
2222
})
2323
24-
const { addConnectors, onWalletUpdated, onDisconnected } = useVueDapp()
24+
const { addConnectors, watchWalletUpdated, watchDisconnect } = useVueDapp()
2525
if (process.client) {
2626
addConnectors([
2727
new BrowserWalletConnector(),
@@ -49,11 +49,16 @@ if (process.client) {
4949
5050
const { setWallet, resetWallet } = useEthers()
5151
52-
onWalletUpdated(async (wallet: ConnWallet) => {
53-
setWallet(wallet.provider)
54-
})
52+
watchWalletUpdated(
53+
async (wallet: ConnWallet) => {
54+
setWallet(wallet.provider)
55+
},
56+
{
57+
immediate: true,
58+
},
59+
)
5560
56-
onDisconnected(() => {
61+
watchDisconnect(() => {
5762
resetWallet()
5863
})
5964

app/components/content/Multicall.vue

+9-20
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ const tokenList = computed(() => {
7777
7878
const balances = ref<{ mainnet: number[]; arbitrum: number[] }>({ mainnet: [], arbitrum: [] })
7979
80-
const { isConnected, wallet, onWalletUpdated, onDisconnected } = useVueDapp()
80+
const { watchWalletUpdated, watchDisconnect } = useVueDapp()
8181
82-
onMounted(async () => {
83-
if (isConnected.value) {
82+
watchWalletUpdated(
83+
async (wallet: ConnWallet) => {
8484
const mainnetBalance = await Promise.all([
8585
mainnetDai.balanceOf(wallet.address),
8686
mainnetUsdc.balanceOf(wallet.address),
@@ -92,24 +92,13 @@ onMounted(async () => {
9292
arbitrumAusdc.balanceOf(wallet.address),
9393
])
9494
balances.value = { mainnet: mainnetBalance, arbitrum: arbitrumBalance }
95-
}
96-
})
97-
98-
onWalletUpdated(async (wallet: ConnWallet) => {
99-
const mainnetBalance = await Promise.all([
100-
mainnetDai.balanceOf(wallet.address),
101-
mainnetUsdc.balanceOf(wallet.address),
102-
mainnetAusdc.balanceOf(wallet.address),
103-
])
104-
const arbitrumBalance = await Promise.all([
105-
arbitrumDai.balanceOf(wallet.address),
106-
arbitrumUsdc.balanceOf(wallet.address),
107-
arbitrumAusdc.balanceOf(wallet.address),
108-
])
109-
balances.value = { mainnet: mainnetBalance, arbitrum: arbitrumBalance }
110-
})
95+
},
96+
{
97+
immediate: true,
98+
},
99+
)
111100
112-
onDisconnected(() => {
101+
watchDisconnect(() => {
113102
balances.value = { mainnet: [], arbitrum: [] }
114103
})
115104

app/pages/index.vue

+9-13
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ useHead({
1111
1212
const defaultProvider = new ethers.JsonRpcProvider('https://ethereum-rpc.publicnode.com')
1313
14-
const { wallet, isConnected, disconnect, onWalletUpdated, onDisconnected } = useVueDapp()
14+
const { wallet, isConnected, disconnect, watchWalletUpdated, watchDisconnect } = useVueDapp()
1515
1616
const {
1717
ensName,
@@ -27,19 +27,15 @@ const {
2727
ignorePreviousFetch: ignorePreviousFetchBalance,
2828
} = useBalance(defaultProvider)
2929
30-
onMounted(() => {
31-
if (isConnected.value) {
32-
fetchEnsName(wallet.address!)
33-
fetchBalance(wallet.address!)
34-
}
35-
})
36-
37-
onWalletUpdated((wallet: ConnWallet) => {
38-
fetchEnsName(wallet.address)
39-
fetchBalance(wallet.address)
40-
})
30+
watchWalletUpdated(
31+
(wallet: ConnWallet) => {
32+
fetchEnsName(wallet.address)
33+
fetchBalance(wallet.address)
34+
},
35+
{ immediate: true },
36+
)
4137
42-
onDisconnected(() => {
38+
watchDisconnect(() => {
4339
ignorePreviousFetchEnsName()
4440
ignorePreviousFetchBalance()
4541
})
+48-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import { watch, toRaw } from 'vue'
1+
import { watch, toRaw, onMounted } from 'vue'
22
import { OnConnectedCB, OnAccountOrChainIdChangedCB, OnWalletUpdatedCB, OnDisconnectedCB } from '../types'
33
import { useConnect } from './connect'
44
import { assertConnected } from '../utils/assert'
55

6-
// TODO: should return unwatch handler
7-
86
export function useListeners(pinia?: any) {
97
const { isConnected, address, chainId, wallet } = useConnect(pinia)
108

119
function onConnected(callback: OnConnectedCB) {
12-
watch(isConnected, (val, oldVal) => {
10+
return watch(isConnected, (val, oldVal) => {
1311
if (val && !oldVal) {
1412
assertConnected(wallet, 'useListeners - onConnected')
1513
callback && callback(toRaw(wallet))
@@ -18,29 +16,65 @@ export function useListeners(pinia?: any) {
1816
}
1917

2018
function onAccountOrChainIdChanged(callback: OnAccountOrChainIdChangedCB) {
21-
// TODO: make sure this works
22-
watch(address, (val, oldVal) => {
19+
const unwatchAddress = watch(address, (val, oldVal) => {
2320
if (oldVal && val) {
2421
assertConnected(wallet, 'useListeners - onAccountOrChainIdChanged - address')
2522
callback && callback(toRaw(wallet))
2623
}
2724
})
2825

29-
watch(chainId, (val, oldVal) => {
26+
const unwatchChainId = watch(chainId, (val, oldVal) => {
3027
if (val && oldVal) {
3128
assertConnected(wallet, 'useListeners - onAccountOrChainIdChanged - chainId')
3229
callback && callback(toRaw(wallet))
3330
}
3431
})
32+
33+
return () => {
34+
unwatchAddress()
35+
unwatchChainId()
36+
}
3537
}
3638

3739
function onWalletUpdated(callback: OnWalletUpdatedCB) {
38-
onConnected(callback)
39-
onAccountOrChainIdChanged(callback)
40+
const unwatchConnected = onConnected(callback)
41+
const unwatchAccountOrChainId = onAccountOrChainIdChanged(callback)
42+
43+
return () => {
44+
unwatchConnected()
45+
unwatchAccountOrChainId()
46+
}
4047
}
4148

4249
function onDisconnected(callback: OnDisconnectedCB) {
43-
watch(isConnected, (val, oldVal) => {
50+
return watch(isConnected, (val, oldVal) => {
51+
if (!val && oldVal) {
52+
callback && callback()
53+
}
54+
})
55+
}
56+
57+
function watchWalletUpdated(callback: OnWalletUpdatedCB, options?: { immediate: boolean }) {
58+
if (options?.immediate) {
59+
onMounted(() => {
60+
if (isConnected.value) {
61+
assertConnected(wallet, 'useListeners - watchWalletUpdated - immediate')
62+
callback && callback(toRaw(wallet))
63+
}
64+
})
65+
}
66+
67+
const unwatchConnected = onConnected(callback)
68+
const unwatchAccountOrChainId = onAccountOrChainIdChanged(callback)
69+
70+
return () => {
71+
unwatchConnected()
72+
unwatchAccountOrChainId()
73+
}
74+
}
75+
76+
function watchDisconnect(callback: OnDisconnectedCB) {
77+
return watch(isConnected, (val, oldVal) => {
4478
if (!val && oldVal) {
4579
callback && callback()
4680
}
@@ -50,7 +84,9 @@ export function useListeners(pinia?: any) {
5084
return {
5185
onConnected,
5286
onAccountOrChainIdChanged,
53-
onWalletUpdated,
54-
onDisconnected,
87+
onWalletUpdated, // will be deprecated
88+
onDisconnected, // will be deprecated
89+
watchWalletUpdated,
90+
watchDisconnect,
5591
}
5692
}

0 commit comments

Comments
 (0)