mango-v4-ui/components/swap/SwapSlider.tsx

70 lines
1.8 KiB
TypeScript
Raw Normal View History

2022-12-07 18:49:01 -08:00
import mangoStore from '@store/mangoStore'
import useMangoAccount from 'hooks/useMangoAccount'
2022-12-07 18:49:01 -08:00
import { useCallback, useEffect, useState } from 'react'
import { formatFixedDecimals } from 'utils/numbers'
import LeverageSlider from '../shared/LeverageSlider'
import { useTokenMax } from './useTokenMax'
const SwapSlider = ({
amount,
onChange,
useMargin,
step,
}: {
amount: number
onChange: (x: string) => void
useMargin: boolean
step: number
}) => {
2022-12-07 18:49:01 -08:00
const [sliderValue, setSliderValue] = useState(0)
const { mangoAccount } = useMangoAccount()
const { amount: tokenMax, amountWithBorrow } = useTokenMax(useMargin)
2022-12-07 18:49:01 -08:00
const inputBank = mangoStore((s) => s.swap.inputBank)
const handleChange = useCallback((x: string) => {
setSliderValue(parseFloat(x))
onChange(x)
}, [])
useEffect(() => {
setSliderValue(amount)
}, [amount])
const tokenMaxAsNumber = tokenMax.toNumber()
return (
<>
{!mangoAccount ? (
<LeverageSlider
amount={amount}
leverageMax={100}
onChange={onChange}
step={step}
/>
) : (
2022-12-07 18:49:01 -08:00
<>
<LeverageSlider
amount={amount}
leverageMax={
useMargin ? amountWithBorrow.toNumber() : tokenMax.toNumber()
}
onChange={handleChange}
step={step}
/>
{sliderValue && sliderValue > tokenMaxAsNumber ? (
<div className="flex">
<div className="mt-1 ml-1 -mb-5 text-xs text-th-fgd-4">
Use {formatFixedDecimals(tokenMaxAsNumber)} {inputBank?.name} +
Borrow {formatFixedDecimals(sliderValue - tokenMaxAsNumber)}{' '}
{inputBank?.name}
</div>
</div>
) : null}
</>
)}
</>
)
}
export default SwapSlider