From 92756042c99b6108f7d4fa92aa1743731ef1fcc7 Mon Sep 17 00:00:00 2001
From: Kevin Davis <65736142+thekidnamedkd@users.noreply.github.com>
Date: Tue, 23 Apr 2024 16:08:34 +0200
Subject: [PATCH] fix: APP-3070 - Update WC network switch flow via dAppConnect
(#1330)
* wip: show possible solution for aligning WC network with app network
* chore: add more detail to comments, default chain in WAGMI as mainnet
* chore: remove extra console.log
* chore: move global network switch to network error modal flow
* chore: remove extra console.log
* chore: refactor WC connector + switch to be more defensive
* chore: refactor to use wagmi hook directly, remove custom switchNetwork
* chore: remove console logs, unneeded connector hooks
---
src/app.tsx | 1 +
src/containers/networkErrorMenu/index.tsx | 24 +++++------
src/hooks/useSwitchNetwork.tsx | 50 -----------------------
src/index.tsx | 2 +-
4 files changed, 14 insertions(+), 63 deletions(-)
delete mode 100644 src/hooks/useSwitchNetwork.tsx
diff --git a/src/app.tsx b/src/app.tsx
index a3a58e840..cf41f1c52 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -44,6 +44,7 @@ export const App: React.FC = () => {
// further refactoring of layout (see further below).
const {pathname} = useLocation();
const {methods, status, network, address, provider} = useWallet();
+
useMonitoring();
// Initialize feature flags using the initial URL
diff --git a/src/containers/networkErrorMenu/index.tsx b/src/containers/networkErrorMenu/index.tsx
index 32169d9a2..401c7d82f 100644
--- a/src/containers/networkErrorMenu/index.tsx
+++ b/src/containers/networkErrorMenu/index.tsx
@@ -9,11 +9,11 @@ import {useAlertContext} from 'context/alert';
import {useGlobalModalContext} from 'context/globalModals';
import {useNetwork} from 'context/network';
import useScreen from 'hooks/useScreen';
-import {useSwitchNetwork} from 'hooks/useSwitchNetwork';
import {useWallet} from 'hooks/useWallet';
import WalletIcon from 'assets/images/wallet.svg';
-import {CHAIN_METADATA} from 'utils/constants';
+import {CHAIN_METADATA, SupportedNetworks} from 'utils/constants';
import {handleClipboardActions, shortenAddress} from 'utils/library';
+import {useSwitchChain} from 'wagmi';
interface INetworkErrorMenuState {
onClose?: () => void;
@@ -26,8 +26,9 @@ export const NetworkErrorMenu = () => {
const {onClose, onSuccess} = modalState ?? {};
const {network} = useNetwork();
- const {switchWalletNetwork} = useSwitchNetwork();
- const {address, ensName, ensAvatarUrl, connectorName} = useWallet();
+ const {switchChain} = useSwitchChain();
+ const {address, ensName, ensAvatarUrl} = useWallet();
+
const {isDesktop} = useScreen();
const {t} = useTranslation();
const {alert} = useAlertContext();
@@ -38,7 +39,8 @@ export const NetworkErrorMenu = () => {
};
const handleSwitchNetwork = () => {
- switchWalletNetwork();
+ const currentChain = CHAIN_METADATA[network as SupportedNetworks]?.id;
+ switchChain({chainId: currentChain});
close();
onSuccess?.();
};
@@ -86,13 +88,11 @@ export const NetworkErrorMenu = () => {
- {connectorName === 'MetaMask' && (
-
- )}
+
);
diff --git a/src/hooks/useSwitchNetwork.tsx b/src/hooks/useSwitchNetwork.tsx
deleted file mode 100644
index 7c6af6e5d..000000000
--- a/src/hooks/useSwitchNetwork.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import {useNetwork} from 'context/network';
-import {CHAIN_METADATA} from 'utils/constants';
-import {toHex} from 'utils/library';
-
-type ErrorType = {
- code: number;
-};
-
-export const useSwitchNetwork = () => {
- const {network} = useNetwork();
-
- const switchWalletNetwork = async () => {
- // Check if MetaMask is installed
- if (window.ethereum) {
- try {
- // check if the chain to connect to is installed
- await window.ethereum.request({
- method: 'wallet_switchEthereumChain',
- params: [{chainId: toHex(CHAIN_METADATA[network].id)}], // chainId must be in hexadecimal numbers
- });
- } catch (error) {
- if ((error as ErrorType).code === 4902) {
- try {
- await window.ethereum.request({
- method: 'wallet_addEthereumChain',
- params: [
- {
- chainName: CHAIN_METADATA[network].name,
- chainId: toHex(CHAIN_METADATA[network].id),
- rpcUrls: CHAIN_METADATA[network].publicRpc,
- nativeCurrency: CHAIN_METADATA[network].nativeCurrency,
- },
- ],
- });
- } catch (addError) {
- console.error(addError);
- }
- }
- console.error(error);
- }
- } else {
- // if no window.ethereum then MetaMask is not installed
- alert(
- 'MetaMask is not installed. Please consider installing it: https://metamask.io/download.html'
- );
- }
- };
-
- return {switchWalletNetwork};
-};
diff --git a/src/index.tsx b/src/index.tsx
index f18ef0cb8..ba369fb7e 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -32,7 +32,7 @@ import {App} from './app';
import {aragonGateway} from 'utils/aragonGateway';
import {HttpTransport} from 'viem';
-const chains = [base, mainnet, polygon, arbitrum, sepolia] as [
+const chains = [mainnet, polygon, base, arbitrum, sepolia] as [
Chain,
...Chain[],
];