import { Currency } from "@uniswap/sdk-core"; import React, { useMemo } from "react"; import styled from "styled-components/macro"; import useHttpLocations from "../../hooks/useHttpLocations"; import { WrappedTokenInfo } from "../../state/glists/wrappedTokenInfo"; import Logo from "../Logo"; import { getBaseTokenLogoURLByTokenSymbol } from "../../constants/tokens"; import { useCombinedActiveList } from "../../state/glists/hooks"; import EthereumLogo from "../../assets/images/ethereum-logo.png"; import { isPolygonChainId } from "@gelatonetwork/range-orders-lib/dist/utils"; export const getTokenLogoURL = (address: string) => `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`; const StyledEthereumLogo = styled.img<{ size: string }>` width: ${({ size }) => size}; height: ${({ size }) => size}; box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075); border-radius: 24px; `; const StyledLogo = styled(Logo)<{ size: string }>` width: ${({ size }) => size}; height: ${({ size }) => size}; border-radius: ${({ size }) => size}; box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.075); background-color: ${({ theme }) => theme.white}; `; export default function CurrencyLogo({ currency, chainId, size = "24px", style, ...rest }: { chainId?: number; currency?: Currency; size?: string; style?: React.CSSProperties; }) { const uriLocations = useHttpLocations( currency instanceof WrappedTokenInfo ? currency.logoURI : undefined ); const activeTokenList = useCombinedActiveList(); const srcs: string[] = useMemo(() => { if (!currency || currency.isNative) return []; const uriBySymbol = getBaseTokenLogoURLByTokenSymbol(currency.symbol); if (currency.isToken) { const urlFromList = chainId && activeTokenList[chainId][currency.address] ? activeTokenList[chainId][currency.address]["token"]["tokenInfo"][ "logoURI" ] : undefined; const defaultUrls = chainId && isPolygonChainId(chainId) ? [getTokenLogoURL(currency.address)] : []; if (currency instanceof WrappedTokenInfo) { return uriBySymbol ? [...uriLocations, ...defaultUrls, uriBySymbol] : [...uriLocations, ...defaultUrls]; } const tokenUrlsSoFar = uriBySymbol ? [uriBySymbol, ...defaultUrls] : defaultUrls; return urlFromList ? ([urlFromList, ...tokenUrlsSoFar] as string[]) : (tokenUrlsSoFar as string[]); } return []; }, [currency, uriLocations, chainId, activeTokenList]); if (currency?.isNative) { return chainId !== 1 ? ( ) : ( ); } return ( ); }