import Change from '@components/shared/Change' import DailyRange from '@components/shared/DailyRange' import { useTranslation } from 'next-i18next' import Image from 'next/legacy/image' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' import FlipNumbers from 'react-flip-numbers' import { formatDecimal, formatFixedDecimals } from 'utils/numbers' import Link from 'next/link' import SheenLoader from '@components/shared/SheenLoader' import Tooltip from '@components/shared/Tooltip' import useMangoGroup from 'hooks/useMangoGroup' import useJupiterMints from 'hooks/useJupiterMints' import useLocalStorageState from 'hooks/useLocalStorageState' import { ANIMATION_SETTINGS_KEY } from 'utils/constants' import { INITIAL_ANIMATION_SETTINGS } from '@components/settings/AnimationSettings' import ActionPanel from './ActionPanel' import ChartTabs from './ChartTabs' import CoingeckoStats from './CoingeckoStats' const DEFAULT_COINGECKO_VALUES = { ath: 0, atl: 0, ath_change_percentage: 0, atl_change_percentage: 0, ath_date: 0, atl_date: 0, high_24h: 0, circulating_supply: 0, fully_diluted_valuation: 0, low_24h: 0, market_cap: 0, max_supply: 0, price_change_percentage_24h: 0, total_supply: 0, total_volume: 0, } const TokenPage = () => { const { t } = useTranslation(['common', 'token']) const [coingeckoData, setCoingeckoData] = useState(null) const [loading, setLoading] = useState(true) const router = useRouter() const { token } = router.query const { group } = useMangoGroup() const { mangoTokens } = useJupiterMints() const [animationSettings] = useLocalStorageState( ANIMATION_SETTINGS_KEY, INITIAL_ANIMATION_SETTINGS ) const bank = useMemo(() => { if (group && token) { const bank = group.banksMapByName.get(token.toString()) if (bank) { return bank[0] } else { setLoading(false) } } }, [group, token]) const logoURI = useMemo(() => { if (bank && mangoTokens.length) { return mangoTokens.find((t) => t.address === bank.mint.toString()) ?.logoURI } }, [bank, mangoTokens]) const coingeckoId = useMemo(() => { if (bank && mangoTokens.length) { return mangoTokens.find((t) => t.address === bank.mint.toString()) ?.extensions?.coingeckoId } }, [bank, mangoTokens]) const fetchTokenInfo = async (tokenId: string) => { const response = await fetch( `https://api.coingecko.com/api/v3/coins/${tokenId}?localization=false&tickers=false&developer_data=false&sparkline=false ` ) const data = await response.json() return data } useEffect(() => { const getCoingeckoData = async (id: string) => { const response = await fetchTokenInfo(id) setCoingeckoData(response) setLoading(false) } if (coingeckoId) { getCoingeckoData(coingeckoId) } }, [coingeckoId]) const { high_24h, low_24h, price_change_percentage_24h } = coingeckoData ? coingeckoData.market_data : DEFAULT_COINGECKO_VALUES return ( <> {bank ? ( <>
{coingeckoData ? (

{coingeckoData.name}{' '} ({bank.name})

) : (

{bank.name}

)}
{animationSettings['number-scroll'] ? ( ) : ( {formatFixedDecimals(bank.uiPrice, true)} )} {coingeckoData ? ( ) : null}
{coingeckoData ? (
) : null}

{t('utilization')}:

{bank.uiDeposits() > 0 ? formatDecimal( (bank.uiBorrows() / bank.uiDeposits()) * 100, 1, { fixed: true } ) : '0.0'} %
{coingeckoData && coingeckoId ? ( ) : (
🦎

No CoinGecko data...

)} ) : loading ? (
) : (

😔

{t('token:token-not-found')}

{t('token:token-not-found-desc', { token: token })}

{t('token:go-to-account')}
)} ) } export default TokenPage