import { useTranslation } from 'next-i18next' import mangoStore from '@store/mangoStore' import ContentBox from '@components/shared/ContentBox' import MarketLogos from '@components/trade/MarketLogos' import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements' import { ArrowTopRightOnSquareIcon, ChevronDownIcon, ChevronRightIcon, } from '@heroicons/react/20/solid' import Tooltip from '@components/shared/Tooltip' import { Disclosure, Transition } from '@headlessui/react' import { getOracleProvider } from 'hooks/useOracleProvider' import { goToPerpMarketDetails } from './PerpMarketsOverviewTable' import { useRouter } from 'next/router' import { LinkButton } from '@components/shared/Button' import SoonBadge from '@components/shared/SoonBadge' import { useViewport } from 'hooks/useViewport' import { breakpoints } from 'utils/theme' const PerpMarketDetailsTable = () => { const { t } = useTranslation(['common', 'trade']) const perpMarkets = mangoStore((s) => s.perpMarkets) const { width } = useViewport() const showTableView = width ? width > breakpoints.md : false const router = useRouter() return ( {showTableView ? ( {perpMarkets.map((market) => { const { name, minOrderSize, tickSize, initBaseLiabWeight, maintBaseLiabWeight, makerFee, takerFee, groupInsuranceFund, minFunding, maxFunding, publicKey, } = market const [oracleProvider, oracleLinkPath] = getOracleProvider(market) const isComingSoon = market.oracleLastUpdatedSlot == 0 return ( goToPerpMarketDetails(market, router)} > ) })}
{t('market')} {t('trade:min-order-size')} {t('trade:tick-size')} {t('trade:init-leverage')} {t('trade:max-leverage')} {t('trade:maker-fee')} {t('trade:taker-fee')} {t('trade:funding-limits')} {t('trade:tooltip-insured', { tokenOrMarket: '' })} Learn more } > {t('trade:insured', { token: '' })} {t('trade:oracle')}

{name}

{isComingSoon ? : null}

{minOrderSize}

{tickSize}

{(1 / (initBaseLiabWeight.toNumber() - 1)).toFixed(2)}x

{(1 / (maintBaseLiabWeight.toNumber() - 1)).toFixed(2)}x

{(100 * makerFee.toNumber()).toFixed(2)}%

{(100 * takerFee.toNumber()).toFixed(2)}%

{(100 * minFunding.toNumber()).toFixed(2)}%{' '} to{' '} {(100 * maxFunding.toNumber()).toFixed(2)}%

{groupInsuranceFund ? t('yes') : t('no')}

{oracleLinkPath ? ( {oracleProvider} ) : (

{oracleProvider}

)}
) : (
{perpMarkets.map((market, i) => { const { name, minOrderSize, tickSize, initBaseLiabWeight, maintBaseLiabWeight, makerFee, takerFee, groupInsuranceFund, minFunding, maxFunding, publicKey, } = market const [oracleProvider, oracleLinkPath] = getOracleProvider(market) const isComingSoon = market.oracleLastUpdatedSlot == 0 return ( {({ open }) => ( <>

{name}

{isComingSoon ? : null}

{t('trade:min-order-size')}

{minOrderSize}

{t('trade:tick-size')}

{tickSize}

{t('trade:init-leverage')}

{( 1 / (initBaseLiabWeight.toNumber() - 1) ).toFixed(2)} x

{t('trade:max-leverage')}

{( 1 / (maintBaseLiabWeight.toNumber() - 1) ).toFixed(2)} x

{t('fees')}

{(100 * makerFee.toNumber()).toFixed(2)}%{' '} {t('trade:maker')} | {(100 * takerFee.toNumber()).toFixed(2)}%{' '} {t('trade:taker')}

{t('trade:funding-limits')}

{(100 * minFunding.toNumber()).toFixed(2)}%{' '} to {' '} {(100 * maxFunding.toNumber()).toFixed(2)}%

{t('trade:oracle')}

{oracleLinkPath ? ( {oracleProvider} ) : (

{oracleProvider}

)}

{t('trade:insured', { token: '' })}

{groupInsuranceFund ? t('yes') : t('no')}

goToPerpMarketDetails(market, router) } > {t('stats:perp-details', { market: market.name })}
)}
) })}
)}
) } export default PerpMarketDetailsTable