Skip to content

Commit dad86e3

Browse files
committed
fixes wagmi switch chain
1 parent 255f6da commit dad86e3

File tree

7 files changed

+57
-47
lines changed

7 files changed

+57
-47
lines changed

demo/vue-app-new/package-lock.json

Lines changed: 7 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/vue-app-new/src/components/AppDashboard.vue

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import {
66
useEnableMFA,
77
useIdentityToken,
88
useManageMFA,
9-
useSwitchChain,
109
useWalletConnectScanner,
1110
useWalletUI,
1211
useWeb3Auth,
1312
useWeb3AuthUser,
13+
useSwitchChain as useWeb3AuthSwitchChain,
1414
} from "@web3auth/modal/vue";
1515
import { type CustomChainConfig, type NFTCheckoutPluginType } from "@web3auth/no-modal";
1616
import { useI18n } from "petite-vue-i18n";
1717
1818
import { useSignAndSendTransaction, useSignMessage as useSolanaSignMessage, useSignTransaction, useSolanaWallet } from "@web3auth/modal/vue/solana";
19-
import { useAccount, useBalance, useChainId, useSignMessage, useSignTypedData } from "@wagmi/vue";
19+
import { useAccount, useBalance, useChainId, useSignMessage, useSignTypedData, useSwitchChain as useWagmiSwitchChain } from "@wagmi/vue";
2020
2121
import { LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from "@solana/web3.js";
2222
import { ProviderConfig } from "@toruslabs/base-controllers";
@@ -42,15 +42,16 @@ const { isConnected, provider, web3Auth, isMFAEnabled } = useWeb3Auth();
4242
const { userInfo, loading: userInfoLoading } = useWeb3AuthUser();
4343
const { enableMFA } = useEnableMFA();
4444
const { manageMFA } = useManageMFA();
45-
const { switchChain } = useSwitchChain();
45+
const { switchChainAsync } = useWagmiSwitchChain();
46+
const { switchChain } = useWeb3AuthSwitchChain();
4647
const { showWalletUI, loading: showWalletUILoading } = useWalletUI();
4748
const { showWalletConnectScanner, loading: showWalletConnectScannerLoading } = useWalletConnectScanner();
4849
const { showCheckout, loading: showCheckoutLoading } = useCheckout();
4950
const { authenticateUser, loading: authenticateUserLoading } = useIdentityToken();
5051
const { status, address } = useAccount();
5152
const { signTypedDataAsync } = useSignTypedData();
5253
const { signMessageAsync } = useSignMessage();
53-
const chainId = useChainId();
54+
const wagmiChainId = useChainId();
5455
const balance = useBalance({
5556
address: address,
5657
});
@@ -188,7 +189,7 @@ const onGetPrivateKey = async () => {
188189
};
189190
190191
const getConnectedChainId = async () => {
191-
printToConsole("chainId", chainId.value);
192+
printToConsole("chainId", wagmiChainId.value);
192193
};
193194
194195
const onGetBalance = async () => {
@@ -323,8 +324,8 @@ const onSwitchChain = async () => {
323324
const currentNamespace = currentChainNamespace.value;
324325
const newChain = props.chains.find((x) => x.chainNamespace === currentNamespace && x.chainId !== chainId);
325326
if (!newChain) throw new Error(`Please configure at least 2 chains for ${currentNamespace} in the config`);
326-
await switchChain({ chainId: newChain.chainId });
327-
printToConsole("switchedChain", { chainId: newChain.chainId });
327+
const data =await switchChainAsync({ chainId: Number(newChain.chainId) });
328+
printToConsole("switchedChain", { chainId: data.id });
328329
} catch (error) {
329330
printToConsole("switchedChain error", error);
330331
}

demo/wagmi-react-app/src/components/Main.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
useWeb3AuthDisconnect,
1111
useWeb3AuthUser,
1212
} from "@web3auth/modal/react";
13-
import { useAccount, useBalance, useSignMessage, useSignTypedData } from "wagmi";
13+
import { useAccount, useBalance, useChainId, useSignMessage, useSignTypedData, useSwitchChain } from "wagmi";
1414

1515
import styles from "../styles/Home.module.css";
1616

@@ -29,13 +29,17 @@ const Main = () => {
2929
const { showWalletConnectScanner, loading: isWalletConnectScannerLoading, error: walletConnectScannerError } = useWalletConnectScanner();
3030
const { showWalletUI, loading: isWalletUILoading, error: walletUIError } = useWalletUI();
3131
const { token, loading: isUserTokenLoading, error: userTokenError, authenticateUser } = useIdentityToken();
32+
const { switchChainAsync, chains } = useSwitchChain();
33+
const chainId = useChainId();
34+
3235
const loggedInView = (
3336
<>
3437
<div className={styles.container}>
3538
<div style={{ marginTop: "16px", marginBottom: "16px" }}>
3639
<p>Account Address: {address}</p>
3740
<p>Account Balance: {balance?.value}</p>
3841
<p>MFA Enabled: {isMFAEnabled ? "Yes" : "No"}</p>
42+
<p>ConnectedChain ID: {chainId}</p>
3943
</div>
4044

4145
{/* User Info */}
@@ -174,6 +178,22 @@ const Main = () => {
174178
{signedTypedDataData && <textarea disabled rows={5} value={signedTypedDataData} style={{ width: "100%" }} />}
175179
</div>
176180

181+
{/* Chain Actions */}
182+
<div style={{ marginTop: "16px", marginBottom: "16px" }}>
183+
<p>Switch Chain</p>
184+
{chains.map((chain) => (
185+
<button
186+
key={chain.id}
187+
onClick={async () => switchChainAsync({ chainId: chain.id })}
188+
className={styles.card}
189+
disabled={chainId === chain.id}
190+
style={{ opacity: chainId === chain.id ? 0.5 : 1 }}
191+
>
192+
Switch to {chain.name}
193+
</button>
194+
))}
195+
</div>
196+
177197
{/* Disconnect */}
178198
<div style={{ marginTop: "16px", marginBottom: "16px" }}>
179199
<p>Logout</p>

packages/modal/src/react/wagmi/provider.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
CreateConnectorFn,
1111
useAccountEffect,
1212
useConfig as useWagmiConfig,
13+
useReconnect,
1314
WagmiProvider as WagmiProviderBase,
1415
} from "wagmi";
1516
import { injected } from "wagmi/connectors";
@@ -86,6 +87,7 @@ function Web3AuthWagmiProvider({ children }: PropsWithChildren) {
8687
const { isConnected, provider } = useWeb3Auth();
8788
const { disconnect } = useWeb3AuthDisconnect();
8889
const wagmiConfig = useWagmiConfig();
90+
const { reconnect } = useReconnect();
8991

9092
useAccountEffect({
9193
onDisconnect: async () => {
@@ -104,13 +106,14 @@ function Web3AuthWagmiProvider({ children }: PropsWithChildren) {
104106
}
105107

106108
await connectWeb3AuthWithWagmi(connector, wagmiConfig);
109+
reconnect();
107110
} else if (!isConnected) {
108111
if (wagmiConfig.state.status === "connected") {
109112
await disconnectWeb3AuthFromWagmi(wagmiConfig);
110113
}
111114
}
112115
})();
113-
}, [isConnected, wagmiConfig, provider]);
116+
}, [isConnected, wagmiConfig, provider, reconnect]);
114117

115118
return createElement(Fragment, null, children);
116119
}

packages/modal/src/vue/wagmi/provider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Config, Connection, Connector, CreateConfigParameters, CreateConnectorFn, hydrate } from "@wagmi/core";
2-
import { configKey, createConfig as createWagmiConfig, useAccountEffect, useConfig as useWagmiConfig } from "@wagmi/vue";
2+
import { configKey, createConfig as createWagmiConfig, useAccountEffect, useConfig as useWagmiConfig, useReconnect } from "@wagmi/vue";
33
import { injected } from "@wagmi/vue/connectors";
44
import { log } from "@web3auth/no-modal";
55
import { type Chain, defineChain, http, webSocket } from "viem";
@@ -80,6 +80,7 @@ const Web3AuthWagmiProvider = defineComponent({
8080
const { isConnected, provider } = useWeb3Auth();
8181
const { disconnect } = useWeb3AuthDisconnect();
8282
const wagmiConfig = useWagmiConfig();
83+
const { reconnect } = useReconnect();
8384

8485
useAccountEffect({
8586
onDisconnect: async () => {
@@ -99,6 +100,7 @@ const Web3AuthWagmiProvider = defineComponent({
99100
}
100101

101102
await connectWeb3AuthWithWagmi(connector, wagmiConfig);
103+
reconnect();
102104
} else if (!newIsConnected) {
103105
if (wagmiConfig.state.status === "connected") {
104106
await disconnectWeb3AuthFromWagmi(wagmiConfig);

packages/no-modal/src/react/wagmi/provider.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
CreateConnectorFn,
1010
useAccountEffect,
1111
useConfig as useWagmiConfig,
12+
useReconnect,
1213
WagmiProvider as WagmiProviderBase,
1314
} from "wagmi";
1415
import { injected } from "wagmi/connectors";
@@ -86,6 +87,7 @@ function Web3AuthWagmiProvider({ children }: PropsWithChildren) {
8687
const { isConnected, provider } = useWeb3Auth();
8788
const { disconnect } = useWeb3AuthDisconnect();
8889
const wagmiConfig = useWagmiConfig();
90+
const { reconnect } = useReconnect();
8991

9092
useAccountEffect({
9193
onDisconnect: async () => {
@@ -103,13 +105,14 @@ function Web3AuthWagmiProvider({ children }: PropsWithChildren) {
103105
}
104106

105107
await connectWeb3AuthWithWagmi(connector, wagmiConfig);
108+
reconnect();
106109
} else if (!isConnected) {
107110
if (wagmiConfig.state.status === "connected") {
108111
await disconnectWeb3AuthFromWagmi(wagmiConfig);
109112
}
110113
}
111114
})();
112-
}, [isConnected, wagmiConfig, provider]);
115+
}, [isConnected, wagmiConfig, provider, reconnect]);
113116

114117
return createElement(Fragment, null, children);
115118
}

packages/no-modal/src/vue/wagmi/provider.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import { type Config, type Connection, type Connector, type CreateConnectorFn, hydrate } from "@wagmi/core";
2-
import { configKey, createConfig as createWagmiConfig, type CreateConfigParameters, useAccountEffect, useConfig as useWagmiConfig } from "@wagmi/vue";
2+
import {
3+
configKey,
4+
createConfig as createWagmiConfig,
5+
type CreateConfigParameters,
6+
useAccountEffect,
7+
useConfig as useWagmiConfig,
8+
useReconnect,
9+
} from "@wagmi/vue";
310
import { injected } from "@wagmi/vue/connectors";
411
import { type Chain, defineChain, http, webSocket } from "viem";
512
import { defineComponent, h, PropType, provide, shallowRef, watch } from "vue";
@@ -80,6 +87,7 @@ const Web3AuthWagmiProvider = defineComponent({
8087
const { isConnected, provider } = useWeb3Auth();
8188
const { disconnect } = useWeb3AuthDisconnect();
8289
const wagmiConfig = useWagmiConfig();
90+
const { reconnect } = useReconnect();
8391

8492
useAccountEffect({
8593
onDisconnect: async () => {
@@ -98,6 +106,7 @@ const Web3AuthWagmiProvider = defineComponent({
98106
}
99107

100108
await connectWeb3AuthWithWagmi(connector, wagmiConfig);
109+
reconnect();
101110
} else if (!newIsConnected) {
102111
if (wagmiConfig.state.status === "connected") {
103112
await disconnectWeb3AuthFromWagmi(wagmiConfig);

0 commit comments

Comments
 (0)