Skip to content

Commit 5150bb1

Browse files
authored
Fix: Connect wallet hook (#848)
* Export disconnect type * Fix unsub and make wallet reactive
1 parent 9524dad commit 5150bb1

File tree

4 files changed

+32
-19
lines changed

4 files changed

+32
-19
lines changed

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@web3-onboard/core",
3-
"version": "2.0.1",
3+
"version": "2.0.2",
44
"scripts": {
55
"build": "rollup -c",
66
"dev": "rollup -c -w",

packages/core/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export type {
2424
InitOptions,
2525
OnboardAPI,
2626
ConnectOptions,
27+
DisconnectOptions,
2728
WalletState,
2829
ConnectedChain
2930
} from './types'

packages/react/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@web3-onboard/react",
3-
"version": "2.0.0",
3+
"version": "2.0.1",
44
"description": "Collection of React Hooks for web3-onboard",
55
"module": "dist/index.js",
66
"browser": "dist/index.js",
@@ -21,8 +21,8 @@
2121
"typescript": "^4.5.5"
2222
},
2323
"dependencies": {
24-
"@web3-onboard/common": "^2.0.0",
25-
"@web3-onboard/core": "^2.0.0"
24+
"@web3-onboard/common": "^2.0.1",
25+
"@web3-onboard/core": "^2.0.2"
2626
},
2727
"peerDependencies": {
2828
"react": "^17.0.2"

packages/react/src/index.ts

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import type {
55
InitOptions,
66
OnboardAPI,
77
ConnectOptions,
8+
DisconnectOptions,
89
WalletState,
910
ConnectedChain
1011
} from '@web3-onboard/core'
1112

1213
import { Chain } from '@web3-onboard/common'
13-
import { DisconnectOptions } from '@web3-onboard/core/dist/types'
1414

1515
export let web3Onboard: OnboardAPI | null = null
1616

@@ -29,27 +29,39 @@ export const useConnectWallet = (): [
2929
const [wallet, setConnectedWallet] = useState<WalletState | null>(null)
3030
const [connecting, setConnecting] = useState(false)
3131

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+
3248
const connect = useCallback(async (options: ConnectOptions) => {
3349
setConnecting(true)
3450

35-
const [lastConnectedWallet] = await (
36-
web3Onboard as OnboardAPI
37-
).connectWallet(options)
51+
const [connectedWallet] = await (web3Onboard as OnboardAPI).connectWallet(
52+
options
53+
)
3854

3955
setConnecting(false)
40-
41-
if (lastConnectedWallet) {
42-
setConnectedWallet(lastConnectedWallet)
43-
}
56+
setConnectedWallet(connectedWallet || null)
4457
}, [])
4558

46-
const disconnect = useCallback(async ({label}) => {
59+
const disconnect = useCallback(async ({ label }) => {
4760
setConnecting(true)
4861

49-
await (web3Onboard as OnboardAPI).disconnectWallet({label})
62+
await (web3Onboard as OnboardAPI).disconnectWallet({ label })
5063

5164
setConnectedWallet(null)
52-
5365
setConnecting(false)
5466
}, [])
5567

@@ -83,14 +95,14 @@ export const useSetChain = (
8395
const chains = useMemo(() => state.get().chains, [])
8496

8597
useEffect(() => {
86-
const { unsubscribe } = state.select('wallets').subscribe(wallets => {
98+
const subscription = state.select('wallets').subscribe(wallets => {
8799
const wallet =
88100
wallets.find(({ label }) => label === walletLabel) || wallets[0]
89101

90102
wallet && setConnectedChain(wallet.chains[0])
91103
})
92104

93-
return unsubscribe
105+
return () => subscription.unsubscribe()
94106
}, [])
95107

96108
const set = useCallback(async (options: SetChainOptions) => {
@@ -111,9 +123,9 @@ export const useWallets = (): WalletState[] => {
111123

112124
useEffect(() => {
113125
const wallets$ = (web3Onboard as OnboardAPI).state.select('wallets')
114-
const { unsubscribe } = wallets$.subscribe(setConnectedWallets)
126+
const subscription = wallets$.subscribe(setConnectedWallets)
115127

116-
return unsubscribe
128+
return () => subscription.unsubscribe()
117129
}, [])
118130

119131
return wallets

0 commit comments

Comments
 (0)