make network change based on the url params on the first render

Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
Uncle Fatso 2026-04-07 21:01:30 +03:00
parent 6acd4e92e2
commit a4b801efee
Signed by: f4ts0
GPG Key ID: 565F4F2860226EBB
4 changed files with 30 additions and 17 deletions

View File

@ -1,7 +1,7 @@
{ {
"name": "ghost-dao-interface", "name": "ghost-dao-interface",
"private": true, "private": true,
"version": "0.7.3", "version": "0.7.4",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@ -160,7 +160,7 @@ function App() {
setWrongNetworkToastId(null); setWrongNetworkToastId(null);
} }
} }
}, [chainId, addressChainId, isConnected]) }, [chainId, addressChainId, isConnected, wrongNetworkToastId])
useEffect(() => { useEffect(() => {
if (errorMessage) { if (errorMessage) {

View File

@ -12,8 +12,8 @@ import { isNetworkAvailable } from "../../constants";
import { parseKnownToken } from "../../components/Token/Token"; import { parseKnownToken } from "../../components/Token/Token";
import { useSwitchChain } from 'wagmi'; import { useSwitchChain } from 'wagmi';
import toast from "react-hot-toast";
import { useNavigate, useLocation } from 'react-router-dom'; import { useNavigate, useLocation } from 'react-router-dom';
import toast from "react-hot-toast";
function SelectNetwork({ chainId, wrongNetworkToastId, setWrongNetworkToastId, small }) { function SelectNetwork({ chainId, wrongNetworkToastId, setWrongNetworkToastId, small }) {
const theme = useTheme(); const theme = useTheme();
@ -25,29 +25,43 @@ function SelectNetwork({ chainId, wrongNetworkToastId, setWrongNetworkToastId, s
const [networkId, setNetworkId] = useState(chainId); const [networkId, setNetworkId] = useState(chainId);
useEffect(() => { useEffect(() => {
if (chainId !== networkId) setNetworkId(chainId);
}, [chainId])
useEffect(() => {
const chainName = chains.find((chain) => chain.id === chainId).name;
const parts = pathname.split('/'); const parts = pathname.split('/');
if (parts.length > 2) { if (parts.length > 2) {
parts[1] = chainName.toLowerCase(); let targetChain = chains.at(0);
const newPath = parts.join("/"); const chainName = parts[1].toLowerCase();
navigate(newPath); const chain = chains.find(chain => chain.name.toLowerCase() === chainName);
if (chain && targetChain.name !== chain.name) {
targetChain = chain;
} }
}, [chains, chainId]) changeNetworkId(targetChain.name, targetChain.id)
}
}, [])
const handleChange = (event) => { useEffect(() => {
const chainName = chains.find((chain) => chain.id === event.target.value).name; if (chainId !== networkId) setNetworkId(chainId);
}, [chainId, networkId])
const changeNetworkId = (chainName, newNetworkId) => {
toast.dismiss(wrongNetworkToastId); toast.dismiss(wrongNetworkToastId);
const toastId = toast.loading(`Trying to connect to ${chainName} network... Wait please`, { const toastId = toast.loading(`Trying to connect to ${chainName} network... Wait please`, {
position: 'bottom-right' position: 'bottom-right'
}); });
setWrongNetworkToastId(toastId); setWrongNetworkToastId(toastId);
setNetworkId(event.target.value); setNetworkId(newNetworkId);
switchChain({ chainId: event.target.value }); switchChain({ chainId: newNetworkId });
}
const handleChange = (event) => {
const chainName = chains.find((chain) => chain.id === event.target.value).name;
changeNetworkId(chainName, event.target.value);
const parts = pathname.split('/');
if (parts.length > 2) {
parts[1] = chainName.toLowerCase();
const newPath = parts.join("/");
navigate(newPath, { replace: true });
}
} }
return( return(

View File

@ -31,7 +31,6 @@ export default function NotFound({
}); });
setWrongNetworkToastId(toastId); setWrongNetworkToastId(toastId);
setNetworkId(newChainId); setNetworkId(newChainId);
switchChain({ chainId: newChainId }); switchChain({ chainId: newChainId });
} }