import { ModalProps } from '../../types/modal' import Modal from '../shared/Modal' import { useTranslation } from 'next-i18next' import useSelectedMarket from 'hooks/useSelectedMarket' import { Serum3Market } from '@blockworks-foundation/mango-v4' import Button from '@components/shared/Button' import { ExclamationTriangleIcon } from '@heroicons/react/20/solid' import { useMemo } from 'react' import Tooltip from '@components/shared/Tooltip' import OracleProvider from '@components/shared/OracleProvider' import mangoStore from '@store/mangoStore' interface SpotMarketDetailsModalProps { market: Serum3Market | undefined } type ModalCombinedProps = SpotMarketDetailsModalProps & ModalProps const SpotMarketDetailsModal = ({ isOpen, onClose, market, }: ModalCombinedProps) => { const { t } = useTranslation(['common', 'trade']) const { serumOrPerpMarket } = useSelectedMarket() const [baseBank, quoteBank] = useMemo(() => { const group = mangoStore.getState().group if (!group || !market) return [undefined, undefined] const base = group.getFirstBankByTokenIndex(market.baseTokenIndex) const quote = group.getFirstBankByTokenIndex(market.quoteTokenIndex) return [base, quote] }, [market]) const [baseMintInfo, quoteMintInfo] = useMemo(() => { const group = mangoStore.getState().group if (!baseBank || !quoteBank || !group) return [undefined, undefined] const base = group.mintInfosMapByMint.get(baseBank.mint.toString()) const quote = group.mintInfosMapByMint.get(quoteBank.mint.toString()) return [base, quote] }, [baseBank, quoteBank]) const [bidLeverage, askLeverage] = useMemo(() => { const group = mangoStore.getState().group if (!group || !market) return [undefined, undefined] const bid = market.maxBidLeverage(group).toFixed(1) const ask = market.maxAskLeverage(group).toFixed(1) return [bid, ask] }, [market]) return market && serumOrPerpMarket ? (

{t('trade:market-details', { market: market.name })}

{market?.reduceOnly ? (

{t('trade:reduce-only')}

) : null}

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

{serumOrPerpMarket.minOrderSize}

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

{serumOrPerpMarket.tickSize}

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

{bidLeverage}x

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

{askLeverage}x

{t('trade:oracle')}

{baseMintInfo ? (
{t('trade:tooltip-insured', { tokenOrMarket: baseBank?.name, })} Learn more
} >

{t('trade:insured', { token: baseBank?.name })}

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

) : null} {quoteMintInfo ? (
{t('trade:tooltip-insured', { tokenOrMarket: quoteBank?.name, })} Learn more
} >

{t('trade:insured', { token: quoteBank?.name })}

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

) : null}
) : null } export default SpotMarketDetailsModal