2024-04-09 11:20:29 -07:00
|
|
|
import { COLLATERAL_FEE_KEY } from 'utils/constants'
|
|
|
|
import useBanksWithBalances from './useBanksWithBalances'
|
|
|
|
import useLocalStorageState from './useLocalStorageState'
|
|
|
|
import { useMemo } from 'react'
|
2024-05-08 08:25:32 -07:00
|
|
|
import useMangoAccount from './useMangoAccount'
|
2024-04-09 11:20:29 -07:00
|
|
|
|
|
|
|
const useCollateralFeePopupConditions = () => {
|
|
|
|
const [wasModalOpen, setWasModalOpen] = useLocalStorageState(
|
|
|
|
COLLATERAL_FEE_KEY,
|
|
|
|
false,
|
|
|
|
)
|
|
|
|
const banks = useBanksWithBalances('balance')
|
2024-05-08 08:25:32 -07:00
|
|
|
|
2024-04-09 11:20:29 -07:00
|
|
|
const marginPositionBalanceWithBanks = banks.filter(
|
|
|
|
(x) => x.balance < 0 && Math.abs(x.balance) * x.bank.uiPrice >= 100,
|
|
|
|
)
|
|
|
|
|
|
|
|
const collateralFeeBanks = banks.filter(
|
|
|
|
(x) => x.balance > 0 && x.bank.collateralFeePerDay > 0,
|
|
|
|
)
|
|
|
|
|
|
|
|
// Use useMemo to recalculate the LTV ratio only when the list of banks changes
|
|
|
|
const ltvRatio = useMemo(() => {
|
|
|
|
let totalWeightedAssets = 0
|
|
|
|
let totalWeightedLiabilities = 0
|
|
|
|
|
|
|
|
banks.forEach(({ balance, bank }) => {
|
|
|
|
const weight =
|
|
|
|
balance > 0
|
|
|
|
? Number(bank.maintAssetWeight)
|
|
|
|
: Number(bank.maintLiabWeight)
|
|
|
|
const value = Math.abs(balance) * bank.uiPrice * weight
|
|
|
|
|
|
|
|
if (balance > 0) {
|
|
|
|
totalWeightedAssets += value
|
|
|
|
} else if (balance < 0) {
|
|
|
|
totalWeightedLiabilities += value
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
return totalWeightedAssets > 0
|
|
|
|
? totalWeightedLiabilities / totalWeightedAssets
|
|
|
|
: 0
|
|
|
|
}, [banks])
|
|
|
|
|
|
|
|
const showCollateralFeeWarning =
|
|
|
|
!!marginPositionBalanceWithBanks.length &&
|
|
|
|
!!collateralFeeBanks.length &&
|
|
|
|
!wasModalOpen
|
|
|
|
|
2024-05-09 04:02:19 -07:00
|
|
|
const isCharged =
|
|
|
|
!!marginPositionBalanceWithBanks.length && !!collateralFeeBanks.length
|
|
|
|
|
2024-04-09 11:20:29 -07:00
|
|
|
return {
|
|
|
|
showCollateralFeeWarning,
|
|
|
|
setWasModalOpen,
|
|
|
|
marginPositionBalanceWithBanks,
|
|
|
|
collateralFeeBanks,
|
|
|
|
ltvRatio,
|
2024-05-09 04:02:19 -07:00
|
|
|
isCharged,
|
2024-04-09 11:20:29 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default useCollateralFeePopupConditions
|