import { CheckCircleTwoTone, ClockCircleTwoTone, CloseCircleTwoTone, DownOutlined, ExclamationCircleTwoTone, SearchOutlined, } from '@ant-design/icons' import { Web3Provider } from '@ethersproject/providers' import { useWeb3React } from '@web3-react/core' import { Avatar, Badge, Select, Tooltip } from 'antd' import { RefSelectProps } from 'antd/lib/select' import React, { useEffect, useState } from 'react' import { goplus, TokenSecurity, TokenSecurityState } from '../services/goplus' import { ChainKey, TokenAmount, TokenWithAmounts } from '../types' interface TokenSelectProps { tokens: { [ChainKey: string]: Array } balances: { [ChainKey: string]: Array } | undefined selectedChain?: ChainKey selectedToken: string | undefined onChangeSelectedToken: Function selectReference: React.MutableRefObject grayed: boolean showBalance?: boolean disabled?: boolean } const positionFixed = window.location.pathname.includes('showcase') const TokenSelect = ({ tokens, balances, selectedChain, selectedToken, onChangeSelectedToken, selectReference, grayed, showBalance = true, disabled = false, }: TokenSelectProps) => { const [showDropdown, setShowDropdown] = useState(false) const findToken = (chainKey: ChainKey, tokenId: string) => { const token = tokens[chainKey].find((token) => token.address === tokenId) if (!token) { throw new Error('Token not found') } return token } const web3 = useWeb3React() const token = selectedToken && selectedChain ? findToken(selectedChain, selectedToken) : undefined const [tokenSecurity, setTokenSecurity] = useState() useEffect(() => { if (!token) { setTokenSecurity(undefined) } else { goplus.getTokenSecurity(token.chainId, token.address).then(setTokenSecurity) } }, [token]) function getBadge() { if (!token) { return <> } if (!tokenSecurity) { return } switch (tokenSecurity.state) { case TokenSecurityState.SAFE: return case TokenSecurityState.RISKY: return case TokenSecurityState.ATTENTION: return case TokenSecurityState.UNVALIDATED: return <> // if most tokens can be validated show: } } function getTooltip() { if (!token) { return <> } if (!tokenSecurity) { return <> } switch (tokenSecurity.state) { case TokenSecurityState.SAFE: return ( <> Safe Token
{tokenSecurity.goplusUrl && ( <> Verified by Go+
)} View In Explorer ) case TokenSecurityState.RISKY: case TokenSecurityState.ATTENTION: return ( <> {tokenSecurity.state === TokenSecurityState.RISKY ? 'Risky Token' : 'Verify Token'}
{tokenSecurity.goplusUrl && ( <> Check on Go+
)} View In Explorer ) case TokenSecurityState.UNVALIDATED: return <>Unable to validate } } return ( <>
{token ? token.name : '?'}
) } export default TokenSelect