import React from 'react'
import styled from 'styled-components'
import { Colors, Font } from '../../../../design'
import { getAddress } from '@ethersproject/address'
import { useNameTag } from '../../../../hooks'
interface Props {
address: string
network: string | undefined
}
export function Address({ address, network }: Props) {
const nameTag = useNameTag(address)
const formatted = formatAddress(address)
const url = getExplorerUrl(formatted, network)
return (
{nameTag && {nameTag}}
{nameTag && (}
{formatted.substring(0, 38)}
{formatted.substring(38)}
{nameTag && )}
)
}
function formatAddress(address: string) {
const lower = address.toLowerCase()
try {
return getAddress(lower)
} catch {
return lower
}
}
const Name = styled.span`
color: ${Colors.Text};
font-style: italic;
margin-right: 1ch;
`
const Paren = styled.span`
color: ${Colors.Text};
`
const Link = styled.a`
color: ${Colors.Link};
font-family: ${Font.Code};
text-decoration: none;
display: inline-flex;
align-items: baseline;
`
const Shorten = styled.span`
display: inline-block;
width: 7ch; // 0x 1234 ellipsis
overflow: hidden;
text-overflow: ellipsis;
`
const End = styled.span`
display: inline-block;
overflow: hidden;
`
function getExplorerUrl(address: string, network?: string) {
switch (network) {
case 'Mainnet':
return `https://etherscan.io/address/${address}`
case 'Ropsten':
return `https://ropsten.etherscan.io/address/${address}`
case 'Rinkeby':
return `https://rinkeby.etherscan.io/address/${address}`
case 'Goerli':
return `https://goerli.etherscan.io/address/${address}`
case 'Kovan':
return `https://kovan.etherscan.io/address/${address}`
case 'xDai':
return `https://blockscout.com/xdai/mainnet/address/${address}/transactions`
}
}