import MaxAmountButton from '@components/shared/MaxAmountButton' import TokenSelect from './TokenSelect' import Loading from '@components/shared/Loading' import NumberFormat, { NumberFormatValues, SourceInfo, } from 'react-number-format' import { formatCurrencyValue } from 'utils/numbers' import { useTranslation } from 'react-i18next' import { Dispatch, SetStateAction, useCallback, useMemo } from 'react' import mangoStore from '@store/mangoStore' import useMangoGroup from 'hooks/useMangoGroup' import { OUTPUT_TOKEN_DEFAULT } from 'utils/constants' import { NUMBER_FORMAT_CLASSNAMES } from './MarketSwapForm' const set = mangoStore.getState().set const BuyTokenInput = ({ handleAmountOutChange, loading, setShowTokenSelect, setAmountOutFormValue, }: { handleAmountOutChange: (e: NumberFormatValues, info: SourceInfo) => void loading?: boolean setShowTokenSelect: Dispatch> setAmountOutFormValue: (amountOut: string) => void }) => { const { t } = useTranslation('common') const { group } = useMangoGroup() const { outputBank, amountOut: amountOutFormValue, swapMode, } = mangoStore((s) => s.swap) const outputTokenBalanceBorrow = useMemo(() => { if (!outputBank) return 0 const mangoAccount = mangoStore.getState().mangoAccount.current const balance = mangoAccount?.getTokenBalanceUi(outputBank) return balance && balance < 0 ? Math.abs(balance) : 0 }, [outputBank]) const setBorrowAmountOut = useCallback( (borrowAmount: string) => { if (swapMode === 'ExactIn') { set((s) => { s.swap.swapMode = 'ExactOut' }) } setAmountOutFormValue(borrowAmount.toString()) }, [setAmountOutFormValue], ) return (

{t('buy')}

{outputTokenBalanceBorrow ? ( setBorrowAmountOut( outputTokenBalanceBorrow.toFixed(outputBank?.mintDecimals || 9), ) } value={outputTokenBalanceBorrow} /> ) : null}
{loading ? (
) : ( <> {outputBank ? formatCurrencyValue( outputBank.uiPrice * Number(amountOutFormValue), ) : '–'} )}
) } export default BuyTokenInput