import classNames from 'classnames' import { useCallback, useMemo } from 'react' import AssetAmount from 'components/common/assets/AssetAmount' import ActionButton from 'components/common/Button/ActionButton' import { ArrowRight } from 'components/common/Icons' import SummaryLine from 'components/common/SummaryLine' import Text from 'components/common/Text' import TradeDirection from 'components/perps/BalancesTable/Columns/TradeDirection' import { ExpectedPrice } from 'components/perps/Module/ExpectedPrice' import TradingFee from 'components/perps/Module/TradingFee' import { BN_ZERO } from 'constants/math' import useCurrentAccount from 'hooks/accounts/useCurrentAccount' import useTradingFeeAndPrice from 'hooks/perps/useTradingFeeAndPrice' import useStore from 'store' import { BNCoin } from 'types/classes/BNCoin' import { formatLeverage } from 'utils/formatters' type Props = { leverage: number amount: BigNumber tradeDirection: TradeDirection asset: Asset previousAmount: BigNumber previousTradeDirection?: 'long' | 'short' previousLeverage?: number | null hasActivePosition: boolean onTxExecuted: () => void } export default function PerpsSummary(props: Props) { const openPerpPosition = useStore((s) => s.openPerpPosition) const modifyPerpPosition = useStore((s) => s.modifyPerpPosition) const closePerpPosition = useStore((s) => s.closePerpPosition) const currentAccount = useCurrentAccount() const newAmount = useMemo( () => (props.previousAmount ?? BN_ZERO).plus(props.amount), [props.amount, props.previousAmount], ) const { data: tradingFee } = useTradingFeeAndPrice( props.asset.denom, newAmount, props.previousAmount, ) const onConfirm = useCallback(async () => { if (!currentAccount) return if (!props.previousAmount.isZero() && newAmount.isZero()) { await closePerpPosition({ accountId: currentAccount.id, denom: props.asset.denom, }) return props.onTxExecuted() } if (!props.previousAmount.isZero() && !newAmount.isZero()) { await modifyPerpPosition({ accountId: currentAccount.id, coin: BNCoin.fromDenomAndBigNumber(props.asset.denom, newAmount), changeDirection: props.previousAmount.isNegative() !== newAmount.isNegative(), }) return props.onTxExecuted() } await openPerpPosition({ accountId: currentAccount.id, coin: BNCoin.fromDenomAndBigNumber(props.asset.denom, props.amount), }) return props.onTxExecuted() }, [closePerpPosition, currentAccount, modifyPerpPosition, newAmount, openPerpPosition, props]) const disabled = useMemo(() => props.amount.isZero(), [props.amount]) return (