import type { BigNumber } from '@ethersproject/bignumber' import { formatEther } from '@ethersproject/units' import type { Web3ReactHooks } from '@web3-react/core' import { useEffect, useState } from 'react' function useBalances( provider?: ReturnType, accounts?: string[] ): BigNumber[] | undefined { const [balances, setBalances] = useState() useEffect(() => { if (provider && accounts?.length) { let stale = false void Promise.all(accounts.map((account) => provider.getBalance(account))).then((balances) => { if (stale) return setBalances(balances) }) return () => { stale = true setBalances(undefined) } } }, [provider, accounts]) return balances } export function Accounts({ accounts, provider, ENSNames, }: { accounts: ReturnType provider: ReturnType ENSNames: ReturnType }) { const balances = useBalances(provider, accounts) if (accounts === undefined) return null return (
Accounts:{' '} {accounts.length === 0 ? 'None' : accounts?.map((account, i) => (
    {ENSNames?.[i] ?? account} {balances?.[i] ? ` (Ξ${formatEther(balances[i])})` : null}
))}
) }