import { WarningRounded } from '@mui/icons-material' import { ComponentType, Dispatch, ReactNode, SetStateAction } from 'react' import { useTranslation } from 'react-i18next' import { HugeDecimal } from '@dao-dao/math' import { AmountWithTimestamp, GenericToken, LoadingData, ModalProps, } from '@dao-dao/types' import { shortenTokenSymbol } from '@dao-dao/utils' import { Button } from '../buttons/Button' import { NumericInput, PercentButton } from '../inputs' import { TokenAmountDisplay } from '../token/TokenAmountDisplay' import { Modal } from './Modal' export type TokenDepositModalProps = Pick & { token: GenericToken loadingBalance: LoadingData onDeposit: (amount: HugeDecimal) => void | Promise loading: boolean amount: HugeDecimal setAmount: Dispatch> connected: boolean ConnectWallet?: ComponentType subtitle?: string | ReactNode warning?: string disabled?: boolean } export const TokenDepositModal = ({ token, loadingBalance, onDeposit, loading, amount, setAmount, connected, ConnectWallet, subtitle, warning, disabled, ...modalProps }: TokenDepositModalProps) => { const { t } = useTranslation() const min = HugeDecimal.one.toHumanReadableNumber(token.decimals) const { tokenSymbol } = shortenTokenSymbol(token.symbol) return ( ) : ( ) } header={{ title: t('title.depositToken', { tokenSymbol }), }} headerContent={ !!subtitle && (typeof subtitle === 'string' ?

{subtitle}

: subtitle) } > {warning && (

{warning}

)} {connected && (

{t('title.balance')}

{/* Balance */}
)} { if (e.key === 'Enter') { e.preventDefault() onDeposit(amount) } }} setValue={(_, value) => setAmount(HugeDecimal.fromHumanReadable(value, token.decimals)) } step={min} unit={'$' + tokenSymbol} value={amount.toHumanReadableString(token.decimals)} />
{[10, 25, 50, 75, 100].map((percent) => ( ))}
) }