/
use-wallet.ts
109 lines (101 loc) · 2.42 KB
/
use-wallet.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import {
useConnectModal,
useChainModal,
useAccountModal,
} from '@rainbow-me/rainbowkit';
import { useEffect, useMemo, useState } from 'react';
import {
useAccount,
useBalance,
useDisconnect,
useProvider,
useSigner,
} from 'wagmi';
const useWallet = () => {
const { openConnectModal } = useConnectModal();
const { openChainModal } = useChainModal();
const { openAccountModal } = useAccountModal();
const { isConnected, isConnecting, isDisconnected, connector, address } =
useAccount();
const [previousAddress, setPreviousAddress] = useState(address);
const [compareAddress, setCompareAddress] = useState(address);
const { data: signer, isLoading: isLoadingSigner } = useSigner();
const { disconnect, disconnectAsync } = useDisconnect();
const provider = useProvider();
const {
data: balanceResult,
// isError: isErrorBalance,
isLoading: isLoadingBalance,
} = useBalance({
address,
});
useEffect(() => {
if (isDisconnected) {
setPreviousAddress(undefined);
setCompareAddress(undefined);
setPreviousAddress(undefined);
}
console.log('addr changed', { address });
if (compareAddress !== address) {
setPreviousAddress(compareAddress);
setCompareAddress(address);
}
}, [
address,
setPreviousAddress,
isDisconnected,
previousAddress,
compareAddress,
setCompareAddress,
]);
const balance = useMemo(() => {
if (!balanceResult) return '';
return `${balanceResult?.formatted} ${balanceResult?.symbol}`;
}, [balanceResult]);
const useWalletValue = useMemo(
() => ({
address,
previousAddress,
compareAddress,
provider,
signer,
connector,
isConnected,
isConnecting,
isDisconnected,
openConnectModal,
openChainModal,
openAccountModal,
disconnect,
disconnectAsync,
isLoadingSigner,
isLoadingBalance,
balance,
setPreviousAddress,
setCompareAddress,
}),
[
address,
previousAddress,
compareAddress,
provider,
signer,
connector,
isConnected,
isConnecting,
isDisconnected,
openConnectModal,
openChainModal,
openAccountModal,
disconnect,
disconnectAsync,
isLoadingSigner,
isLoadingBalance,
balance,
setPreviousAddress,
setCompareAddress,
]
);
return useWalletValue;
};
export { useWallet };