import dynamic from 'next/dynamic' import { UseStore } from 'zustand' import { Connector, Web3ReactState } from '@web3-react/types' import { connectors } from '../connectors' import { useChainId, useAccounts, useENSNames, useError, useActivating, useProvider } from '@web3-react/core' import { useEffect, useState } from 'react' import { BigNumber } from '@ethersproject/bignumber' import { formatEther } from '@ethersproject/units' function Status({ connector, useConnector, }: { connector: InstanceType useConnector: UseStore }) { const chainId = useChainId(useConnector) const accounts = useAccounts(useConnector) const error = useError(useConnector) const connected = Boolean(chainId && accounts) return (
{connector.constructor.name}
{error ? ( <> 🛑 {error.name ?? 'Error'}: {error.message} ) : connected ? ( <>✅ Connected ) : ( <>⚠️ Disconnected )}
) } function ChainId({ useConnector }: { useConnector: UseStore }) { const chainId = useChainId(useConnector) return
Chain Id: {chainId ? {chainId} : '-'}
} function Accounts({ connector, useConnector, }: { connector: InstanceType useConnector: UseStore }) { const accounts = useAccounts(useConnector) const ENSNames = useENSNames(connector, useConnector) const provider = useProvider(connector, useConnector) const [balances, setBalances] = useState(undefined) useEffect(() => { if (provider && accounts?.length) { let stale = false Promise.all(accounts.map((account) => provider.getBalance(account))).then((balances) => { if (!stale) { setBalances(balances) } }) return () => { stale = true setBalances(undefined) } } }, [accounts]) return (
Accounts: {accounts === undefined ? ' -' : accounts.length === 0 ? ' None' : accounts?.map((account, i) => (
    {ENSNames?.[i] ?? account} {balances?.[i] ? ` (Ξ${formatEther(balances[i])})` : null}
))}
) } function Connect({ connector, useConnector }: { connector: Connector; useConnector: UseStore }) { const activating = useActivating(useConnector) const error = useError(useConnector) const chainId = useChainId(useConnector) const accounts = useAccounts(useConnector) const connected = Boolean(chainId && accounts) if (error) { return ( ) } else if (connected) { return ( ) } else { return ( ) } } function App() { return (
{connectors.map(([connector, useConnector], i) => (


))}
) } export default dynamic(() => Promise.resolve(App), { ssr: false })