import { HealthType, MangoAccount, PerpMarket, Serum3Market, toUiDecimalsForQuote, } from '@blockworks-foundation/mango-v4' import HealthImpact from '@components/shared/HealthImpact' import Tooltip from '@components/shared/Tooltip' import mangoStore from '@store/mangoStore' import useMangoGroup from 'hooks/useMangoGroup' import useSelectedMarket from 'hooks/useSelectedMarket' import { useTranslation } from 'next-i18next' import { useMemo } from 'react' import { formatFixedDecimals } from 'utils/numbers' import Slippage from './Slippage' const TradeSummary = ({ mangoAccount, }: { mangoAccount: MangoAccount | undefined }) => { const { t } = useTranslation(['common', 'trade']) const { group } = useMangoGroup() const tradeForm = mangoStore((s) => s.tradeForm) const { selectedMarket } = useSelectedMarket() const maintProjectedHealth = useMemo(() => { if (!mangoAccount || !group || !Number.isFinite(Number(tradeForm.baseSize))) return 100 let simulatedHealthRatio = 0 try { if (selectedMarket instanceof Serum3Market) { simulatedHealthRatio = tradeForm.side === 'sell' ? mangoAccount.simHealthRatioWithSerum3AskUiChanges( group, Number(tradeForm.baseSize), selectedMarket.serumMarketExternal, HealthType.maint ) : mangoAccount.simHealthRatioWithSerum3BidUiChanges( group, Number(tradeForm.quoteSize), selectedMarket.serumMarketExternal, HealthType.maint ) } else if (selectedMarket instanceof PerpMarket) { simulatedHealthRatio = tradeForm.side === 'sell' ? mangoAccount.simHealthRatioWithPerpAskUiChanges( group, selectedMarket.perpMarketIndex, parseFloat(tradeForm.baseSize) ) : mangoAccount.simHealthRatioWithPerpBidUiChanges( group, selectedMarket.perpMarketIndex, parseFloat(tradeForm.baseSize) ) } } catch (e) { console.warn('Error calculating projected health: ', e) } return simulatedHealthRatio > 100 ? 100 : simulatedHealthRatio < 0 ? 0 : Math.trunc(simulatedHealthRatio) }, [group, mangoAccount, selectedMarket, tradeForm.baseSize, tradeForm.side]) return (
{tradeForm.price && tradeForm.baseSize ? (

{t('trade:order-value')}

{formatFixedDecimals( parseFloat(tradeForm.price) * parseFloat(tradeForm.baseSize), true )}

) : null}

{t('free-collateral')}

{group && mangoAccount ? formatFixedDecimals( toUiDecimalsForQuote( mangoAccount.getCollateralValue(group)!.toNumber() ), true ) : '–'}

) } export default TradeSummary