import { Network, ethers } from "ethers"; import { ReactNode, useEffect, useState } from "react"; import { LogOut } from "react-feather"; declare global { interface Window { ethereum: any; } } export const Header = ({ upliftProvider, }: { upliftProvider: (value: any) => void; }) => { const [address, setAddress] = useState(""); const [provider, setProvider] = useState(null); const [connectedNetwork, setConnectedNetwork] = useState(); /** * Subscribing to networka and account change * Every time the network or account is changed, the above states will be udpated */ useEffect(() => { if (window.ethereum) { connectWallet(); window.ethereum.on("chainChanged", () => { connectWallet(); }); window.ethereum.on("accountsChanged", () => { connectWallet(); }); } }, []); useEffect(() => { upliftProvider(provider); }, [provider]); /** Connects to the injected wallet */ const connectWallet = async () => { try { if (window.ethereum) { // Getting the browser provider const _provider = new ethers.BrowserProvider(window.ethereum); /** * if using ethers v5, you can call the browser provider as follows * const _provider = new ethers.providers.Web3Provider(window.ethereum, "any"); */ const signer = await _provider.getSigner(); const _address = await signer.getAddress(); const _network = await _provider.getNetwork(); setConnectedNetwork(_network); setProvider(_provider); setAddress(_address); } else { alert("Injected Ethereum wallet not found"); } } catch (e) { console.log("Error while connecting to the wallet", e); } }; /** to shim disconnect wallet */ const disconnectWallet = () => { setProvider(null); setAddress(""); }; const shortenAddress = (value: string) => { return value.slice(0, 6) + "..." + value.slice(-4); }; return (

Socket Plugin

Docs {address ? ( ) : ( )}
); }; const Button = ({ children, onClick, }: { children: ReactNode; onClick?: () => void; }) => { return ( ); };