@@ -33,8 +33,7 @@ export const useWalletConnect = () => {
3333 const [address, setAddress] = useState<string | null>(null);
3434 const [peerMeta, setPeerMeta] = useState<PeerMeta | null>(null);
3535
36− // Init connector
37− useEffect(() => {
36+ const resetConnector = () => {
3837 const newConnector = new WalletConnect({
3938 bridge: 'https://bridge.walletconnect.org',
4039 qrcodeModal: QRCodeModal,
@@ -50,6 +49,11 @@ export const useWalletConnect = () => {
5049 if (newConnector.peerMeta) {
5150 setPeerMeta(newConnector.peerMeta);
5251 }
52+ };
53+
54+ // Init connector
55+ useEffect(() => {
56+ resetConnector();
5357 // eslint-disable-next-line react-hooks/exhaustive-deps
5458 }, []);
5559
@@ -62,13 +66,12 @@ export const useWalletConnect = () => {
6266 connector.createSession();
6367 };
6468
65− const disconnect = () => {
69+ const disconnect = async () => {
6670 if (!connector) {
67− console.warn('Nothing to disconnect');
6871 return;
6972 }
7073
71− connector.killSession();
74+ await connector.killSession();
7275 };
7376
7477 type AuthenticateArgs = {
@@ -155,6 +158,17 @@ export const useWalletConnect = () => {
155158 });
156159 };
157160
161+ const initModalClosedHandler = () => {
162+ if (!connector) {
163+ return;
164+ }
165+
166+ connector.on('modal_closed', () => {
167+ resetWallet();
168+ resetConnector();
169+ });
170+ };
171+
158172 // Init and clean up
159173 useEffect(() => {
160174 if (!connector) {
@@ -164,6 +178,7 @@ export const useWalletConnect = () => {
164178 initConnectHandler();
165179 initDisconnectHandler();
166180 initSessionUpdateHandler();
181+ initModalClosedHandler();
167182
168183 return () => {
169184 // Clean up listeners
@@ -182,5 +197,6 @@ export const useWalletConnect = () => {
182197 disconnect,
183198 isConnected,
184199 peerMeta,
200+ resetConnector,
185201 };
186202};