import classNames from 'classnames' import debounce from 'lodash.debounce' import { useEffect, useMemo, useState } from 'react' import { Cross } from 'components/common/Icons' import LeverageSlider from 'components/common/LeverageSlider' import { Spacer } from 'components/common/Spacer' import Text from 'components/common/Text' import { TradeDirectionSelector } from 'components/common/TradeDirectionSelector' import { LeverageButtons } from 'components/perps/Module/LeverageButtons' import { Or } from 'components/perps/Module/Or' import usePerpsManageModule from 'components/perps/Module/PerpsManageModule/usePerpsManageModule' import PerpsSummary from 'components/perps/Module/Summary' import AssetAmountInput from 'components/trade/TradeModule/SwapForm/AssetAmountInput' import useCurrentAccount from 'hooks/accounts/useCurrentAccount' import { useUpdatedAccount } from 'hooks/useUpdatedAccount' import getPerpsPosition from 'utils/getPerpsPosition' import { BN } from 'utils/helpers' export function PerpsManageModule() { const [tradeDirection, setTradeDirection] = useState(null) const [amount, setAmount] = useState(null) const account = useCurrentAccount() const { simulatePerps, addedPerps } = useUpdatedAccount(account) const { closeManagePerpModule, previousAmount, previousTradeDirection, previousLeverage, leverage, asset, } = usePerpsManageModule(amount) const debouncedUpdateAccount = useMemo( () => debounce((perpsPosition: PerpsPosition) => { if ( addedPerps && perpsPosition.amount === addedPerps.amount && perpsPosition.tradeDirection === addedPerps.tradeDirection ) return simulatePerps(perpsPosition) }, 100), [simulatePerps, addedPerps], ) useEffect(() => { const perpsPosition = getPerpsPosition( asset, amount ?? previousAmount, tradeDirection ?? previousTradeDirection, ) debouncedUpdateAccount(perpsPosition) }, [ debouncedUpdateAccount, asset, amount, previousAmount, tradeDirection, previousTradeDirection, ]) if (!asset) return null return (
Manage Position
Position Leverage {}} type={tradeDirection || 'long'} />
) }