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 (
Summary -
{props.tradeDirection} {props.asset.symbol}
) } function ManageSummary(props: Props & { newAmount: BigNumber }) { const showTradeDirection = props.previousAmount && props.previousAmount.isNegative() !== props.newAmount.isNegative() const showAmount = !props.amount.isZero() && props.previousAmount const showLeverage = props.previousLeverage && props.leverage && props.previousLeverage.toFixed(2) !== props.leverage.toFixed(2) if ((!showTradeDirection && !showLeverage && !showAmount) || !props.hasActivePosition) return null return (
Your new position {props.newAmount.isZero() && ( Your position will be closed )} {showTradeDirection && props.previousTradeDirection && !props.newAmount.isZero() && ( )} {showAmount && props.newAmount && props.previousAmount && !props.newAmount.isZero() && ( )} {showLeverage && props.previousLeverage && ( {formatLeverage(props.previousLeverage)} props.previousLeverage ? 'text-error' : 'text-success', )} /> {formatLeverage(props.leverage)} )}
) }