import React, { useEffect, useState } from 'react' import { useEthers, shortenAddress, useLookupAddress } from '@usedapp/core' import { Button } from '../base/Button' import { Colors } from '../../global/styles' import styled from 'styled-components' import Web3Modal from 'web3modal' import { AccountModal } from './AccountModal' import WalletConnectProvider from '@walletconnect/web3-provider' export const Web3ModalButton = () => { const { account, activate, deactivate } = useEthers() const { ens } = useLookupAddress(account) const [showModal, setShowModal] = useState(false) const [activateError, setActivateError] = useState('') const { error } = useEthers() useEffect(() => { if (error && account) { setActivateError(error.message) return } setActivateError('') }, [error, account]) const activateProvider = async () => { const providerOptions = { injected: { display: { name: 'Metamask', description: 'Connect with the provider in your Browser', }, package: null, }, walletconnect: { package: WalletConnectProvider, options: { bridge: 'https://bridge.walletconnect.org', infuraId: 'd8df2cb7844e4a54ab0a782f608749dd', }, }, } const web3Modal = new Web3Modal({ providerOptions, }) try { const provider = await web3Modal.connect() await activate(provider) setActivateError('') } catch (error: any) { setActivateError(error.message) } } return ( {activateError} {showModal && } {account ? ( <> setShowModal(!showModal)}>{ens ?? shortenAddress(account)} deactivate()}>Disconnect ) : ( Connect )} ) } const ErrorWrapper = styled.div` color: #ff3960; margin-right: 40px; margin-left: 40px; overflow: auto; ` const Account = styled.div` display: flex; align-items: center; ` const LoginButton = styled(Button)` background-color: ${Colors.Yellow[100]}; ` const AccountLabel = styled(Button)` height: 32px; margin-right: -40px; padding-right: 40px; padding-left: 8px; background-color: ${Colors.Yellow[100]}; font-size: 12px; `