import { Serum3Market } from '@blockworks-foundation/mango-v4' import { useTranslation } from 'next-i18next' import { useTheme } from 'next-themes' import { useMemo } from 'react' import { useViewport } from '../../hooks/useViewport' import mangoStore from '@store/mangoStore' import { COLORS } from '../../styles/colors' import { breakpoints } from '../../utils/theme' import ContentBox from '../shared/ContentBox' import Change from '../shared/Change' import MarketLogos from '@components/trade/MarketLogos' import dynamic from 'next/dynamic' import { useCoingecko } from 'hooks/useCoingecko' import useMangoGroup from 'hooks/useMangoGroup' import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements' import FormatNumericValue from '@components/shared/FormatNumericValue' const SimpleAreaChart = dynamic( () => import('@components/shared/SimpleAreaChart'), { ssr: false } ) const SpotMarketsTable = () => { const { t } = useTranslation('common') const { isLoading: loadingPrices, data: coingeckoPrices } = useCoingecko() const { group } = useMangoGroup() const serumMarkets = mangoStore((s) => s.serumMarkets) const { theme } = useTheme() const { width } = useViewport() const showTableView = width ? width > breakpoints.md : false return ( {showTableView ? ( {serumMarkets.map((market) => { const bank = group?.getFirstBankByTokenIndex( market.baseTokenIndex ) const oraclePrice = bank?.uiPrice const coingeckoData = coingeckoPrices.find( (asset) => asset.symbol.toUpperCase() === bank?.name.toUpperCase() ) const change = coingeckoData && oraclePrice ? ((oraclePrice - coingeckoData.prices[0][1]) / coingeckoData.prices[0][1]) * 100 : 0 const chartData = coingeckoData ? coingeckoData.prices : undefined return ( ) })}
{t('market')} {t('price')} {t('rolling-change')}

{market.name}

{oraclePrice ? ( ) : ( '–' )}

{!loadingPrices ? ( chartData !== undefined ? (
= 0 ? COLORS.UP[theme] : COLORS.DOWN[theme] } data={chartData} name={bank!.name} xKey="0" yKey="1" />
) : bank?.name === 'USDC' || bank?.name === 'USDT' ? null : (

{t('unavailable')}

) ) : (
)}
) : (
{serumMarkets.map((market) => { return ( ) })}
)}
) } export default SpotMarketsTable const MobileSpotMarketItem = ({ market }: { market: Serum3Market }) => { const { t } = useTranslation('common') const { isLoading: loadingPrices, data: coingeckoPrices } = useCoingecko() const { group } = useMangoGroup() const { theme } = useTheme() const bank = group?.getFirstBankByTokenIndex(market.baseTokenIndex) const coingeckoData = useMemo(() => { if (!loadingPrices && bank) { return coingeckoPrices.find( (asset) => asset.symbol.toUpperCase() === bank?.name ) } return null }, [loadingPrices, bank]) const change = useMemo(() => { if (coingeckoData) { return ( ((coingeckoData.prices[coingeckoData.prices.length - 1][1] - coingeckoData.prices[0][1]) / coingeckoData.prices[0][1]) * 100 ) } return 0 }, [coingeckoData]) const chartData = useMemo(() => { if (coingeckoData) { return coingeckoData.prices } return undefined }, [coingeckoData]) return (

{market.name}

{bank?.uiPrice ? ( ) : ( '-' )}

{!loadingPrices ? ( chartData !== undefined ? (
= 0 ? COLORS.UP[theme] : COLORS.DOWN[theme]} data={chartData} name={bank!.name} xKey="0" yKey="1" />
) : bank?.name === 'USDC' || bank?.name === 'USDT' ? null : (

{t('unavailable')}

) ) : (
)}
) }