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
|
|
|
}: {
|
2022-08-17 21:13:50 -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
|
|
|
}) => {
|
2022-08-17 21:13:50 -07:00
|
|
|
const [value, setValue] = useState(0)
|
2022-08-17 15:17:12 -07:00
|
|
|
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%'
|
2022-08-17 21:13:50 -07:00
|
|
|
: ((value - min) * 100) / (max - min) + '% 100%'
|
2022-08-17 15:17:12 -07:00
|
|
|
}
|
2022-08-17 18:21:16 -07:00
|
|
|
}, [leverageMax, value])
|
|
|
|
|
|
|
|
useEffect(() => {
|
2022-08-18 13:50:34 -07:00
|
|
|
if (amount) {
|
|
|
|
setValue(amount)
|
|
|
|
}
|
2022-08-17 20:17:22 -07:00
|
|
|
}, [amount])
|
2022-08-17 15:17:12 -07:00
|
|
|
|
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)
|
2022-08-17 21:13:50 -07:00
|
|
|
setValue(parseFloat(e.target.value))
|
2022-08-15 15:18:23 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
<label htmlFor="default-range" className="block text-sm"></label>
|
|
|
|
<input
|
2022-08-17 15:17:12 -07:00
|
|
|
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
|