import React, { useCallback, useContext } from 'react' import { useDispatch } from 'react-redux' import styled, { ThemeContext } from 'styled-components' import { SUPPORTED_WALLETS } from '../../constants/wallet' import { SupportedChainId } from '../../constants/chains' import { useActiveWeb3React } from '../../hooks/web3' import { AppDispatch } from '../../state' import { clearAllTransactions } from '../../state/transactions/actions' import { shortenAddress } from '../../utils' import { ExplorerDataType, getExplorerLink } from '../../utils/getExplorerLink' import { AutoRow } from '../Row' import Copy from './Copy' import Transaction from './Transaction' import { ReactComponent as Close } from '../../assets/images/x.svg' import { injected } from '../../connectors' import Identicon from '../Identicon' import { ButtonSecondary } from '../Button' import { ExternalLink as LinkIcon } from 'react-feather' import { ExternalLink, LinkStyledButton, TYPE } from '../../theme' import { clearAllTransactions as clearAllTransactionsLib } from '@gelatonetwork/limit-orders-react' import { clearAllTransactions as clearAllTransactionsRangeOrderLib } from '@gelatonetwork/range-orders-react' const HeaderRow = styled.div` ${({ theme }) => theme.flexRowNoWrap}; padding: 1rem 1rem; font-weight: 500; color: ${(props) => (props.color === 'blue' ? ({ theme }) => theme.primary1 : 'inherit')}; ${({ theme }) => theme.mediaWidth.upToMedium` padding: 1rem; `}; ` const UpperSection = styled.div` position: relative; h5 { margin: 0; margin-bottom: 0.5rem; font-size: 1rem; font-weight: 400; } h5:last-child { margin-bottom: 0px; } h4 { margin-top: 0; font-weight: 500; } ` const InfoCard = styled.div` padding: 1rem; border: 1px solid ${({ theme }) => theme.bg3}; border-radius: 20px; position: relative; display: grid; grid-row-gap: 12px; margin-bottom: 20px; ` const AccountGroupingRow = styled.div` ${({ theme }) => theme.flexRowNoWrap}; justify-content: space-between; align-items: center; font-weight: 400; color: ${({ theme }) => theme.text1}; div { ${({ theme }) => theme.flexRowNoWrap} align-items: center; } ` const AccountSection = styled.div` padding: 0rem 1rem; ${({ theme }) => theme.mediaWidth.upToMedium`padding: 0rem 1rem 1.5rem 1rem;`}; ` const YourAccount = styled.div` h5 { margin: 0 0 1rem 0; font-weight: 400; } h4 { margin: 0; font-weight: 500; } ` const LowerSection = styled.div` ${({ theme }) => theme.flexColumnNoWrap} padding: 1.5rem; flex-grow: 1; overflow: auto; background-color: ${({ theme }) => theme.bg2}; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; h5 { margin: 0; font-weight: 400; color: ${({ theme }) => theme.text3}; } ` const AccountControl = styled.div` display: flex; justify-content: space-between; min-width: 0; width: 100%; font-weight: 500; font-size: 1.25rem; a:hover { text-decoration: underline; } p { min-width: 0; margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ` const AddressLink = styled(ExternalLink)<{ hasENS: boolean; isENS: boolean }>` font-size: 0.825rem; color: ${({ theme }) => theme.text3}; margin-left: 1rem; font-size: 0.825rem; display: flex; :hover { color: ${({ theme }) => theme.text2}; } ` const CloseIcon = styled.div` position: absolute; right: 1rem; top: 14px; &:hover { cursor: pointer; opacity: 0.6; } ` const CloseColor = styled(Close)` path { stroke: ${({ theme }) => theme.text4}; } ` const WalletName = styled.div` width: initial; font-size: 0.825rem; font-weight: 500; color: ${({ theme }) => theme.text3}; ` const IconWrapper = styled.div<{ size?: number }>` ${({ theme }) => theme.flexColumnNoWrap}; align-items: center; justify-content: center; margin-right: 8px; & > img, span { height: ${({ size }) => (size ? size + 'px' : '32px')}; width: ${({ size }) => (size ? size + 'px' : '32px')}; } ${({ theme }) => theme.mediaWidth.upToMedium` align-items: flex-end; `}; ` const TransactionListWrapper = styled.div` ${({ theme }) => theme.flexColumnNoWrap}; ` const WalletAction = styled(ButtonSecondary)` width: fit-content; font-weight: 400; margin-left: 8px; font-size: 0.825rem; padding: 4px 6px; :hover { cursor: pointer; text-decoration: underline; } ` const MainWalletAction = styled(WalletAction)` color: ${({ theme }) => theme.primary1}; ` function renderTransactions(transactions: string[]) { return ( {transactions.map((hash, i) => { return })} ) } interface AccountDetailsProps { toggleWalletModal: () => void pendingTransactions: string[] confirmedTransactions: string[] ENSName?: string openOptions: () => void } export default function AccountDetails({ toggleWalletModal, pendingTransactions, confirmedTransactions, ENSName, openOptions, }: AccountDetailsProps) { const { chainId, account, connector } = useActiveWeb3React() const theme = useContext(ThemeContext) const dispatch = useDispatch() function formatConnectorName() { const { ethereum } = window const isMetaMask = !!(ethereum && ethereum.isMetaMask) const name = Object.keys(SUPPORTED_WALLETS) .filter( (k) => SUPPORTED_WALLETS[k].connector === connector && (connector !== injected || isMetaMask === (k === 'METAMASK')) ) .map((k) => SUPPORTED_WALLETS[k].name)[0] return Connected with {name} } function getStatusIcon() { if (connector === injected) { return ( ) } return null } const clearAllTransactionsCallback = useCallback(() => { if (chainId) { dispatch(clearAllTransactions({ chainId })) dispatch(clearAllTransactionsRangeOrderLib({ chainId })) dispatch(clearAllTransactionsLib({ chainId })) } }, [dispatch, chainId]) return ( <> Account {formatConnectorName()}
{connector !== injected && ( { ;(connector as any).close() }} > Disconnect )} { openOptions() }} > Change
{ENSName ? ( <>
{getStatusIcon()}

{ENSName}

) : ( <>
{getStatusIcon()}

{account && shortenAddress(account)}

)}
{ENSName ? ( <>
{account && ( Copy Address )} {chainId && account && ( View on Block Explorer )}
) : ( <>
{account && ( Copy Address )} {chainId && account && ( View on Block Explorer )}
)}
{!!pendingTransactions.length || !!confirmedTransactions.length ? ( Recent Transactions (clear all) {renderTransactions(pendingTransactions)} {renderTransactions(confirmedTransactions)} ) : ( Your transactions will appear here... )} ) }