Skip to content

Commit cf38f28

Browse files
refactor modal connect process
1 parent f5601c0 commit cf38f28

File tree

4 files changed

+29
-39
lines changed

4 files changed

+29
-39
lines changed

packages/react/__tests__/store/store.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,4 +330,16 @@ describe('InterchainStore', () => {
330330
useStore.getState().addChains(newChains, newAssetLists, newSignerOptions, newEndpointOptionss);
331331
expect(useStore.getState().endpointOptionsMap).toEqual({ chain2: newEndpointOptionss.endpoints?.chain2 ?? {} });
332332
})
333+
334+
it('should update wallet state to Connected and fetch account after connection', async () => {
335+
const account = { address: 'address1' };
336+
(walletManager.getAccount as jest.Mock).mockResolvedValueOnce(account);
337+
338+
await useStore.getState().connect('wallet1', 'chain1');
339+
340+
const state = useStore.getState().getChainWalletState('wallet1', 'chain1');
341+
expect(state?.walletState).toBe(WalletState.Connected);
342+
expect(walletManager.getAccount).toHaveBeenCalledWith('wallet1', 'chain1');
343+
expect(state?.account).toBe(account);
344+
});
333345
});

packages/react/src/modal/modal.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import React from "react";
21
import {
32
ConnectedContent,
43
ConnectedHeader,
@@ -13,17 +12,8 @@ import {
1312
WalletListContent,
1413
WalletListHeader,
1514
} from "./views";
16-
import { useWalletModal } from "./provider";
17-
import { useChainWallet, useWalletManager } from "../hooks";
18-
import { useEffect, useMemo, useState } from "react";
19-
import {
20-
ExtensionWallet,
21-
WalletState,
22-
WCWallet,
23-
BaseWallet,
24-
isInstanceOf,
25-
DownloadInfo,
26-
} from "@interchain-kit/core";
15+
import { useMemo } from "react";
16+
import { BaseWallet, DownloadInfo } from "@interchain-kit/core";
2717
import {
2818
ConnectModal,
2919
Wallet as InterchainUIWalletType,

packages/react/src/modal/provider.tsx

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createContext, useContext, useEffect, useState } from "react";
1+
import { createContext, useContext, useState } from "react";
22
import { WalletModal } from "./modal";
33
import { WalletState } from "@interchain-kit/core";
44
import { useChainWallet, useWalletManager } from "../hooks";
@@ -23,10 +23,6 @@ export const WalletModalProvider = ({
2323
const open = () => setModalIsOpen(true);
2424
const close = () => setModalIsOpen(false);
2525

26-
const [walletNameToConnect, setWalletNameToConnect] = useState<string | null>(
27-
null
28-
);
29-
3026
const {
3127
chains,
3228
wallets,
@@ -36,9 +32,11 @@ export const WalletModalProvider = ({
3632
walletConnectQRCodeUri,
3733
getDownloadLink,
3834
getEnv,
35+
connect,
36+
getAccount,
3937
} = useWalletManager();
4038

41-
const { wallet, status, connect, disconnect, username, address, message } =
39+
const { wallet, status, disconnect, username, address, message } =
4240
useChainWallet(currentChainName || chains[0].chainName, currentWalletName);
4341

4442
const [shouldShowList, setShouldShowList] = useState(
@@ -49,27 +47,18 @@ export const WalletModalProvider = ({
4947
transferToWalletUISchema
5048
);
5149

52-
useEffect(() => {
53-
const handleConnect = async () => {
54-
if (walletNameToConnect) {
55-
try {
56-
await connect();
57-
setWalletNameToConnect(null);
58-
setShouldShowList(false);
59-
} catch (error) {
60-
console.error("Error connecting to wallet:", error);
61-
throw error;
62-
}
63-
}
64-
};
65-
handleConnect();
66-
}, [walletNameToConnect]);
67-
6850
const handleCloseModal = () => {
6951
close();
7052
setShouldShowList(false);
7153
};
7254

55+
const handleConnectWallet = async (walletName: string) => {
56+
const chainToConnect = currentChainName || chains[0].chainName;
57+
setShouldShowList(false);
58+
setCurrentWalletName(walletName);
59+
await connect(walletName, chainToConnect);
60+
};
61+
7362
return (
7463
<WalletModalContext.Provider value={{ modalIsOpen, open, close }}>
7564
{children}
@@ -90,12 +79,9 @@ export const WalletModalProvider = ({
9079
isDisconnected={status === WalletState.Disconnected}
9180
isNotExist={status === WalletState.NotExist}
9281
errorMessage={message}
93-
onSelectWallet={(w) => {
94-
setWalletNameToConnect(w.info.name);
95-
setCurrentWalletName(w.info.name);
96-
}}
82+
onSelectWallet={(w) => handleConnectWallet(w.info.name)}
9783
onBack={() => setShouldShowList(true)} // Add other required props with appropriate default or mock values
98-
onReconnect={connect}
84+
onReconnect={() => handleConnectWallet(currentWalletName)}
9985
getDownloadLink={() => getDownloadLink(wallet?.info.name)}
10086
getEnv={getEnv}
10187
/>

packages/react/src/store/store.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ export const createInterchainStore = (walletManager: WalletManager) => {
204204
})
205205
})
206206
get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Connected })
207+
208+
await get().getAccount(walletName, chainName)
207209
} catch (error) {
208210
if ((error as any).message === 'Request rejected') {
209211
get().updateChainWalletState(walletName, chainName, { walletState: WalletState.Rejected, errorMessage: (error as any).message })

0 commit comments

Comments
 (0)