mango-v4-ui/components/shared/LeverageSlider.tsx

67 lines
1.5 KiB
TypeScript
Raw Normal View History

2022-11-18 20:59:06 -08:00
import { ChangeEvent, useEffect, useRef, useState } from 'react'
2022-07-12 19:02:36 -07:00
2022-07-12 20:58:13 -07:00
const LeverageSlider = ({
2022-08-17 18:21:16 -07:00
amount,
2022-08-15 15:18:23 -07:00
leverageMax,
onChange,
2022-11-18 11:11:06 -08:00
step,
2022-08-15 15:18:23 -07:00
}: {
amount: number
2022-08-15 15:18:23 -07:00
leverageMax: number
2023-02-27 23:20:11 -08:00
onChange: (x: string) => void
2022-11-18 11:11:06 -08:00
step: number
2022-08-15 15:18:23 -07:00
}) => {
const [value, setValue] = useState(0)
const inputEl = useRef<HTMLInputElement>(null)
useEffect(() => {
if (inputEl.current) {
const target = inputEl.current
const min = parseFloat(target.min)
const max = leverageMax
target.style.backgroundSize =
max - min === 0
? '0% 100%'
: ((value - min) * 100) / (max - min) + '% 100%'
}
2022-08-17 18:21:16 -07:00
}, [leverageMax, value])
useEffect(() => {
if (amount) {
setValue(amount)
}
}, [amount])
2022-08-15 15:18:23 -07:00
const handleSliderChange = (e: ChangeEvent<HTMLInputElement>) => {
2022-11-19 11:20:36 -08:00
const target = e.target
2022-08-16 20:42:16 -07:00
const min = parseFloat(target.min)
const max = parseFloat(target.max)
const val = parseFloat(target.value)
target.style.backgroundSize = ((val - min) * 100) / (max - min) + '% 100%'
2022-08-17 14:36:38 -07:00
2022-08-15 15:18:23 -07:00
onChange(e.target.value)
setValue(parseFloat(e.target.value))
2022-08-15 15:18:23 -07:00
}
return (
<>
<label htmlFor="default-range" className="block text-sm"></label>
<input
ref={inputEl}
2022-08-15 15:18:23 -07:00
id="default-range"
type="range"
min="0"
max={leverageMax}
2022-11-18 11:11:06 -08:00
step={step}
2022-08-16 20:42:16 -07:00
className="w-full"
2022-08-15 15:18:23 -07:00
onChange={handleSliderChange}
2022-08-17 21:25:30 -07:00
value={value}
2022-08-15 15:18:23 -07:00
></input>
</>
)
}
2022-07-12 19:02:36 -07:00
export default LeverageSlider