import type { Currency } from '@crypto-dex-sdk/currency' import type { ImageProps } from 'next/legacy/image' import type { FC } from 'react' import chains, { ParachainId } from '@crypto-dex-sdk/chain' import { WrappedTokenInfo } from '@crypto-dex-sdk/token-lists' import { QuestionMarkCircleIcon } from '@heroicons/react/24/solid' import Image from 'next/legacy/image' import { useEffect, useMemo, useState } from 'react' import { GradientCircleIcon } from '../icons' import { Link } from '../link' const BLOCKCHAIN: Record = { [ParachainId.MOONBEAM]: 'moonbeam', [ParachainId.MOONRIVER]: 'moonriver', [ParachainId.ASTAR]: 'astar', [ParachainId.BIFROST_KUSAMA]: 'bifrost', [ParachainId.BIFROST_POLKADOT]: 'bifrost', [ParachainId.ARBITRUM_ONE]: 'arbitrum', [ParachainId.SCROLL_ALPHA]: 'scrollalpha', [ParachainId.SCROLL]: 'scroll', [ParachainId.BASE]: 'base', [ParachainId.AMPLITUDE]: 'amplitude', [ParachainId.PENDULUM]: 'pendulum', } const GlmrLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/moonbeam/info/logo.png' const MovrLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/moonriver/info/logo.png' const AstrLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/astar/info/logo.png' const BncKusamaLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/bifrost/info/logo.png' const AmpeLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/amplitude/info/logo.png' const PenLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/pendulum/info/logo.png' const EthereumLogo = 'https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/ethereum/info/logo.png' const LOGO: Record = { [ParachainId.MOONRIVER]: MovrLogo, [ParachainId.MOONBEAM]: GlmrLogo, [ParachainId.ASTAR]: AstrLogo, [ParachainId.BIFROST_KUSAMA]: BncKusamaLogo, [ParachainId.ARBITRUM_ONE]: EthereumLogo, [ParachainId.SCROLL_ALPHA]: EthereumLogo, [ParachainId.SCROLL]: EthereumLogo, [ParachainId.BASE]: EthereumLogo, [ParachainId.AMPLITUDE]: AmpeLogo, [ParachainId.PENDULUM]: PenLogo, } export interface IconProps extends Omit { currency: Currency disableLink?: boolean } export const Icon: FC = ({ currency, disableLink, ...rest }) => { const [error, setError] = useState(false) const src = useMemo(() => { if (currency.isNative) return LOGO[currency.chainId] if (currency instanceof WrappedTokenInfo && currency.logoURI) return currency.logoURI return `https://raw.githubusercontent.com/zenlinkpro/assets/master/blockchains/${BLOCKCHAIN[currency.chainId] }/assets/${currency.wrapped.address}/logo.png` }, [currency]) useEffect(() => { setError(false) }, [src]) if (error) { return ( ) } if (!src) { return ( ) } if (disableLink) { return ( {currency.name setError(true)} placeholder={rest?.width && rest?.height && Number(rest?.width) >= 40 && Number(rest?.height) >= 40 ? 'blur' : 'empty'} src={src} {...rest} /> ) } return ( {currency.name setError(true)} placeholder={rest?.width && rest?.height && Number(rest?.width) >= 40 && Number(rest?.height) >= 40 ? 'blur' : 'empty'} src={src} {...rest} /> ) }