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 { floorToDecimal, formatCurrencyValue } from 'utils/numbers' import { useTranslation } from 'react-i18next' import { Dispatch, SetStateAction, 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' import InlineNotification from '@components/shared/InlineNotification' import useMangoAccount from 'hooks/useMangoAccount' import { SwapFormTokenListType } from './SwapFormTokenList' const BuyTokenInput = ({ error, handleAmountOutChange, loading, setShowTokenSelect, handleRepay, }: { error?: string handleAmountOutChange: (e: NumberFormatValues, info: SourceInfo) => void loading?: boolean setShowTokenSelect: Dispatch> handleRepay?: (amountOut: string) => void }) => { const { t } = useTranslation('common') const { mangoAccount } = useMangoAccount() const { group } = useMangoGroup() const { outputBank, amountOut: amountOutFormValue } = mangoStore( (s) => s.swap, ) const outputTokenBalanceBorrow = useMemo(() => { if (!outputBank || !mangoAccount) return 0 const balance = mangoAccount.getTokenBalanceUi(outputBank) const roundedBalance = floorToDecimal( balance, outputBank.mintDecimals, ).toNumber() return balance && balance < 0 ? Math.abs(roundedBalance).toString() : 0 }, [mangoAccount, outputBank]) return (

{t('buy')}

{handleRepay && outputTokenBalanceBorrow ? ( handleRepay(outputTokenBalanceBorrow)} value={outputTokenBalanceBorrow} /> ) : null}
{loading ? (
) : ( <> {!isNaN(Number(amountOutFormValue)) ? ( {outputBank ? formatCurrencyValue( outputBank.uiPrice * Number(amountOutFormValue), ) : '–'} ) : null} )}
{error ? (
) : null}
) } export default BuyTokenInput