import { Serum3Market, PerpMarket } from '@blockworks-foundation/mango-v4' import useJupiterMints from 'hooks/useJupiterMints' import { QuestionMarkCircleIcon } from '@heroicons/react/20/solid' import Image from 'next/legacy/image' import { useMemo } from 'react' import useMangoGroup from 'hooks/useMangoGroup' import LogoWithFallback from '@components/shared/LogoWithFallback' import { CUSTOM_TOKEN_ICONS } from 'utils/constants' const MarketLogos = ({ market, size = 'medium', }: { market: Serum3Market | PerpMarket size?: 'xs' | 'small' | 'medium' | 'large' }) => { const { group } = useMangoGroup() const { mangoTokens } = useJupiterMints() const logos = useMemo(() => { if (!group || !mangoTokens.length || !market) return { baseLogoURI: '', quoteLogoURI: '' } let baseLogoURI, quoteLogoURI if (market instanceof Serum3Market) { const baseBank = group.getFirstBankByTokenIndex(market.baseTokenIndex) const quoteBank = group.getFirstBankByTokenIndex(market.quoteTokenIndex) const baseSymbol = baseBank.name.toLowerCase() const quoteSymbol = quoteBank.name.toLowerCase() const hasCustomBaseIcon = CUSTOM_TOKEN_ICONS[baseSymbol] const hasCustomQuoteIcon = CUSTOM_TOKEN_ICONS[quoteSymbol] const jupiterBaseToken = mangoTokens.find( (t) => t.address === baseBank.mint.toString(), ) const jupiterQuoteToken = mangoTokens.find( (t) => t.address === quoteBank.mint.toString(), ) baseLogoURI = hasCustomBaseIcon ? `/icons/${baseSymbol}.svg` : jupiterBaseToken?.logoURI quoteLogoURI = hasCustomQuoteIcon ? `/icons/${quoteSymbol}.svg` : jupiterQuoteToken?.logoURI } else { const marketName = market.name.split('-')[0].toLowerCase() const hasCustomIcon = CUSTOM_TOKEN_ICONS[marketName] const jupiterBaseToken = mangoTokens.find((t) => t.symbol.toLowerCase() === marketName) || mangoTokens.find((t) => t.symbol.toLowerCase()?.includes(marketName)) baseLogoURI = hasCustomIcon ? `/icons/${marketName}.svg` : jupiterBaseToken?.logoURI } return { baseLogoURI, quoteLogoURI, name: market.name.split(/-|\//)[0], } }, [group, mangoTokens, market]) const pxSize = size === 'xs' ? '12' : size === 'small' ? '16' : size === 'large' ? '24' : '20' return (
} />
{logos.quoteLogoURI && market instanceof Serum3Market ? ( ) : market instanceof PerpMarket ? null : ( )}
) } export default MarketLogos const FallbackIcon = ({ size, }: { size: 'xs' | 'small' | 'medium' | 'large' }) => { return ( ) }