2022-12-07 18:49:01 -08:00
|
|
|
import mangoStore from '@store/mangoStore'
|
2022-11-22 19:31:50 -08:00
|
|
|
import useMangoAccount from 'hooks/useMangoAccount'
|
2022-12-07 18:49:01 -08:00
|
|
|
import { useCallback, useEffect, useState } from 'react'
|
|
|
|
import { formatFixedDecimals } from 'utils/numbers'
|
2022-11-22 19:31:50 -08:00
|
|
|
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)
|
2022-11-22 19:31:50 -08:00
|
|
|
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()
|
2022-11-22 19:31:50 -08:00
|
|
|
|
|
|
|
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}
|
|
|
|
</>
|
2022-11-22 19:31:50 -08:00
|
|
|
)}
|
|
|
|
</>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default SwapSlider
|