64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { useMemo } from 'react'
|
|
|
|
import { BN_ZERO } from 'constants/math'
|
|
import useCurrentAccount from 'hooks/accounts/useCurrentAccount'
|
|
import useAllAssets from 'hooks/assets/useAllAssets'
|
|
import usePerpPosition from 'hooks/perps/usePerpPosition'
|
|
import usePerpsAsset from 'hooks/perps/usePerpsAsset'
|
|
import usePrice from 'hooks/usePrice'
|
|
import usePrices from 'hooks/usePrices'
|
|
import { getAccountNetValue } from 'utils/accounts'
|
|
import { byDenom } from 'utils/array'
|
|
import { demagnify } from 'utils/formatters'
|
|
|
|
export default function usePerpsModule(amount: BigNumber | null) {
|
|
const { perpsAsset } = usePerpsAsset()
|
|
const perpPosition = usePerpPosition(perpsAsset.denom)
|
|
const { data: prices } = usePrices()
|
|
const assets = useAllAssets()
|
|
const account = useCurrentAccount()
|
|
const price = usePrice(perpsAsset.denom)
|
|
|
|
const hasActivePosition = useMemo(
|
|
() => !!account?.perps.find(byDenom(perpsAsset.denom)),
|
|
[account?.perps, perpsAsset.denom],
|
|
)
|
|
|
|
const accountNetValue = useMemo(() => {
|
|
if (!account || !prices || !assets) return BN_ZERO
|
|
return getAccountNetValue(account, prices, assets)
|
|
}, [account, assets, prices])
|
|
|
|
const previousAmount = useMemo(() => perpPosition?.amount ?? BN_ZERO, [perpPosition?.amount])
|
|
const previousTradeDirection = useMemo(
|
|
() => perpPosition?.tradeDirection || 'long',
|
|
[perpPosition?.tradeDirection],
|
|
)
|
|
|
|
const previousLeverage = useMemo(
|
|
() =>
|
|
previousAmount
|
|
? price.times(demagnify(previousAmount, perpsAsset)).div(accountNetValue).plus(1).toNumber()
|
|
: null,
|
|
[accountNetValue, perpsAsset, previousAmount, price],
|
|
)
|
|
|
|
const leverage = useMemo(
|
|
() =>
|
|
price
|
|
.times(demagnify(previousAmount.plus(amount ?? BN_ZERO), perpsAsset))
|
|
.div(accountNetValue)
|
|
.plus(1)
|
|
.toNumber(),
|
|
[accountNetValue, amount, perpsAsset, previousAmount, price],
|
|
)
|
|
|
|
return {
|
|
previousAmount,
|
|
previousTradeDirection,
|
|
previousLeverage,
|
|
leverage,
|
|
hasActivePosition,
|
|
}
|
|
}
|