import { Button, Callout, Input, Intent, FormGroup, Lozenge, } from '@vegaprotocol/ui-toolkit'; import React from 'react'; import { useTranslation } from 'react-i18next'; import type { TransactionAction, TransactionState, } from '../../hooks/transaction-reducer'; import { TransactionActionType, TxState, } from '../../hooks/transaction-reducer'; import { BigNumber } from '../../lib/bignumber'; import { TransactionCallout } from '../transaction-callout'; const inputName = 'amount'; export const AmountInput = ({ amount, setAmount, maximum, currency, }: { amount: string; setAmount: React.Dispatch>; maximum: BigNumber; currency: string; }) => { const { t } = useTranslation(); return (
setAmount(e.target.value)} value={amount} autoComplete="off" type="number" max={maximum.toString()} min={0} step="any" appendElement={ {currency} } />
{maximum && ( )}
); }; export const TokenInput = ({ amount, setAmount, perform, submitText, currency, approveText, allowance, approve, requireApproval = false, maximum = new BigNumber('0'), minimum = new BigNumber('0'), approveTxState, approveTxDispatch, }: { amount: string; setAmount: React.Dispatch>; perform: () => void; submitText: string; currency: string; requireApproval?: boolean; maximum?: BigNumber; minimum?: BigNumber; allowance?: BigNumber; approve?: () => void; approveText?: string; approveTxState?: TransactionState; approveTxDispatch?: React.Dispatch; }) => { if ( requireApproval && (allowance == null || approve == null || !approveTxState || !approveTxDispatch) ) { throw new Error( 'If requires approval is true allowance, approve, approveTxState and approveDispatch props are required!' ); } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const isApproved = !new BigNumber(allowance!).isEqualTo(0); const showApproveButton = // eslint-disable-next-line @typescript-eslint/no-non-null-assertion !isApproved || new BigNumber(amount).isGreaterThan(allowance!); const isDisabled = React.useMemo(() => { if (requireApproval) { return ( !isApproved || !amount || new BigNumber(amount).isLessThanOrEqualTo('0') || new BigNumber(amount).isGreaterThan(maximum) ); } return ( !amount || new BigNumber(amount).isLessThanOrEqualTo('0') || new BigNumber(amount).isGreaterThan(maximum) || new BigNumber(amount).isLessThan(minimum) ); }, [amount, isApproved, maximum, requireApproval, minimum]); let approveContent = null; if (showApproveButton) { if ( approveTxDispatch && approveTxState && approveTxState.txState !== TxState.Default ) { approveContent = ( approveTxDispatch({ type: TransactionActionType.TX_RESET }) } /> ); } else { approveContent = ( ); } } else if (requireApproval) { approveContent = (

{`${currency} are approved for staking`}

); } return ( <> {approveContent ?
{approveContent}
: null} ); };