mango-v4-ui/components/HealthImpactTokenChange.tsx

40 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-11-04 11:55:21 -07:00
import { HealthType } from '@blockworks-foundation/mango-v4'
import { PublicKey } from '@solana/web3.js'
import { useMemo } from 'react'
import mangoStore from '@store/mangoStore'
import HealthImpact from './shared/HealthImpact'
const HealthImpactTokenChange = ({
uiAmount,
isDeposit,
mintPk,
}: {
uiAmount: number
isDeposit?: boolean
mintPk: PublicKey
}) => {
const maintProjectedHealth = useMemo(() => {
const mangoAccount = mangoStore.getState().mangoAccount.current
const group = mangoStore.getState().group
if (!group || !mangoAccount) return 0
const uiTokenAmount = isDeposit ? uiAmount : uiAmount * -1
2022-11-04 11:55:21 -07:00
const projectedHealth =
mangoAccount.simHealthRatioWithTokenPositionUiChanges(
group,
[{ mintPk, uiTokenAmount }],
2023-07-21 11:47:53 -07:00
HealthType.maint,
2022-11-04 11:55:21 -07:00
)
return projectedHealth! > 100
? 100
: projectedHealth! < 0
? 0
: Math.trunc(projectedHealth!)
}, [mintPk, uiAmount, isDeposit])
return <HealthImpact maintProjectedHealth={maintProjectedHealth} />
}
export default HealthImpactTokenChange