import { Trade, TradeType } from 'moonbeamswap' import React, { useContext, useMemo, useState } from 'react' import { Repeat } from 'react-feather' import { Text } from 'rebass' import { ThemeContext } from 'styled-components' import { Field } from '../../state/swap/actions' import { TYPE } from '../../theme' import { computeSlippageAdjustedAmounts, computeTradePriceBreakdown, formatExecutionPrice, warningSeverity } from '../../utils/prices' import { ButtonError } from '../Button' import { AutoColumn } from '../Column' import QuestionHelper from '../QuestionHelper' import { AutoRow, RowBetween, RowFixed } from '../Row' import FormattedPriceImpact from './FormattedPriceImpact' import { StyledBalanceMaxMini, SwapCallbackError } from './styleds' export default function SwapModalFooter({ trade, onConfirm, allowedSlippage, swapErrorMessage, disabledConfirm }: { trade: Trade allowedSlippage: number onConfirm: () => void swapErrorMessage: string | undefined disabledConfirm: boolean }) { const [showInverted, setShowInverted] = useState(false) const theme = useContext(ThemeContext) const slippageAdjustedAmounts = useMemo(() => computeSlippageAdjustedAmounts(trade, allowedSlippage), [ allowedSlippage, trade ]) const { priceImpactWithoutFee, realizedLPFee } = useMemo(() => computeTradePriceBreakdown(trade), [trade]) const severity = warningSeverity(priceImpactWithoutFee) return ( <> Price {formatExecutionPrice(trade, showInverted)} setShowInverted(!showInverted)}> {trade.tradeType === TradeType.EXACT_INPUT ? 'Minimum received' : 'Maximum sold'} {trade.tradeType === TradeType.EXACT_INPUT ? slippageAdjustedAmounts[Field.OUTPUT]?.toSignificant(4) ?? '-' : slippageAdjustedAmounts[Field.INPUT]?.toSignificant(4) ?? '-'} {trade.tradeType === TradeType.EXACT_INPUT ? trade.outputAmount.currency.symbol : trade.inputAmount.currency.symbol} Price Impact Liquidity Provider Fee {realizedLPFee ? realizedLPFee?.toSignificant(6) + ' ' + trade.inputAmount.currency.symbol : '-'} 2} style={{ margin: '10px 0 0 0' }} id="confirm-swap-or-send" > {severity > 2 ? 'Swap Anyway' : 'Confirm Swap'} {swapErrorMessage ? : null} ) }