import { Disclosure, Transition } from '@headlessui/react' import { ChevronDownIcon, ChevronRightIcon, QuestionMarkCircleIcon, } from '@heroicons/react/20/solid' import { useTranslation } from 'next-i18next' import Image from 'next/legacy/image' import { useViewport } from '../../hooks/useViewport' import { breakpoints } from '../../utils/theme' import { LinkButton } from '../shared/Button' import ContentBox from '../shared/ContentBox' import Tooltip from '@components/shared/Tooltip' import { Bank, toUiDecimals } from '@blockworks-foundation/mango-v4' import { NextRouter, useRouter } from 'next/router' import useJupiterMints from 'hooks/useJupiterMints' import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements' import useMangoGroup from 'hooks/useMangoGroup' import FormatNumericValue from '@components/shared/FormatNumericValue' import BankAmountWithValue from '@components/shared/BankAmountWithValue' import useBanksWithBalances from 'hooks/useBanksWithBalances' import Decimal from 'decimal.js' export const goToTokenPage = (token: string, router: NextRouter) => { const query = { ...router.query, ['token']: token } router.push({ pathname: router.pathname, query }) } const TokenOverviewTable = () => { const { t } = useTranslation(['common', 'token']) const { group } = useMangoGroup() const { mangoTokens } = useJupiterMints() const { width } = useViewport() const showTableView = width ? width > breakpoints.md : false const router = useRouter() const banks = useBanksWithBalances() return group ? ( {showTableView ? (
{banks.map((b) => { const bank: Bank = b.bank let logoURI if (mangoTokens?.length) { logoURI = mangoTokens.find( (t) => t.address === bank.mint.toString() )?.logoURI } const deposits = bank.uiDeposits() const borrows = bank.uiBorrows() const availableVaultBalance = group.getTokenVaultBalanceByMintUi(bank.mint) - deposits * bank.minVaultToDepositsRatio const available = Decimal.max( 0, availableVaultBalance.toFixed(bank.mintDecimals) ) const feesEarned = toUiDecimals( bank.collectedFeesNative, bank.mintDecimals ) return ( goToTokenPage( bank.name.split(' ')[0].toUpperCase(), router ) } > ) })}
{t('token')} {t('total-deposits')} {t('total-borrows')}
{t('available')}
{t('fees')}
{t('rates')}
{t('utilization')}
{logoURI ? ( ) : ( )}

{bank.name}

%

|

%

{bank.uiDeposits() > 0 ? ( (bank.uiBorrows() / bank.uiDeposits()) * 100 ).toFixed(1) : '0.0'} %

) : (
{banks.map((b, i) => { const bank = b.bank let logoURI: string | undefined if (mangoTokens?.length) { logoURI = mangoTokens.find( (t) => t.address === bank.mint.toString() )?.logoURI } const deposits = bank.uiDeposits() const borrows = bank.uiBorrows() const availableVaultBalance = group.getTokenVaultBalanceByMintUi(bank.mint) - deposits * bank.minVaultToDepositsRatio const available = Decimal.max( 0, availableVaultBalance.toFixed(bank.mintDecimals) ) const feesEarned = toUiDecimals( bank.collectedFeesNative, bank.mintDecimals ) return ( {({ open }) => ( <>
{logoURI ? ( ) : ( )}

{bank.name}

{t('total-deposits')}

{t('total-borrows')}

{t('available')}

{t('fees')}

{t('rates')}

% | %

{t('utilization')}

{bank.uiDeposits() > 0 ? ( (bank.uiBorrows() / bank.uiDeposits()) * 100 ).toFixed(1) : '0.0'} %

goToTokenPage( bank.name.split(' ')[0].toUpperCase(), router ) } > {t('token:token-stats', { token: bank.name })}
)}
) })}
)}
) : null } export default TokenOverviewTable