import { useMemo, useState, useEffect } from 'react' import { ConnectButton } from '@rainbow-me/rainbowkit' import { useAccount } from 'wagmi' import { useTranslations } from 'next-intl' import { MetamaskIcon } from '@icons/WalletIcons/Metamask' import { CoinbaseWalletIcon } from '@icons/WalletIcons/CoinbaseWalletIcon' import { WalletConnectIcon } from '@icons/WalletIcons/WalletConnectIcon' import { BinanceWalletIcon } from '@icons/WalletIcons/BinanceWalletIcon' import { IconProps, WalletId } from '@utils/types' import Spinner from './icons/Spinner' const WALLETS = [ { id: WalletId.MetaMask, icon: MetamaskIcon, }, { id: WalletId.WalletConnect, icon: WalletConnectIcon, }, { id: WalletId.CoinbaseWallet, icon: CoinbaseWalletIcon, }, { id: WalletId.BinanceWallet, icon: BinanceWalletIcon, }, ] export const WalletIcon = ({ walletId, ...rest }: IconProps): JSX.Element | null => { const SelectedIcon = Object.values(WALLETS).find( ({ id }) => id === walletId )?.icon return SelectedIcon ? : null } export const Wallet = () => { const { connector: activeConnector, address: connectedAddress } = useAccount() const { chain: currentChain } = useAccount() const walletId = activeConnector?.id const [mounted, setMounted] = useState(false) const t = useTranslations('Wallet') useEffect(() => { setMounted(true) }, []) const render = useMemo(() => { return ( {({ account, chain, openAccountModal, openChainModal, openConnectModal, authenticationStatus, mounted, }) => { const ready = mounted && authenticationStatus !== 'loading' return (
{(() => { if (!connectedAddress) { return ( ) } if (chain?.unsupported) { return ( ) } return (
) })()}
) }}
) }, [connectedAddress, currentChain, walletId, t]) return mounted && render }