import Tooltip from '@app/components/Common/Tooltip'; import useDebouncedState from '@app/hooks/useDebouncedState'; import { useEffect, useRef } from 'react'; type MultiRangeSliderProps = { min: number; max: number; defaultMinValue?: number; defaultMaxValue?: number; subText?: string; onUpdateMin: (min: number) => void; onUpdateMax: (max: number) => void; }; const MultiRangeSlider = ({ min, max, defaultMinValue, defaultMaxValue, subText, onUpdateMin, onUpdateMax, }: MultiRangeSliderProps) => { const touched = useRef(false); const [valueMin, finalValueMin, setValueMin] = useDebouncedState( defaultMinValue ?? min ); const [valueMax, finalValueMax, setValueMax] = useDebouncedState( defaultMaxValue ?? max ); const minThumb = ((valueMin - min) / (max - min)) * 100; const maxThumb = ((valueMax - min) / (max - min)) * 100; useEffect(() => { if (touched.current) { onUpdateMin(finalValueMin); } }, [finalValueMin, onUpdateMin]); useEffect(() => { if (touched.current) { onUpdateMax(finalValueMax); } }, [finalValueMax, onUpdateMax]); useEffect(() => { touched.current = false; setValueMax(defaultMaxValue ?? max); setValueMin(defaultMinValue ?? min); }, [defaultMinValue, defaultMaxValue, setValueMax, setValueMin, min, max]); return (
= valueMax && valueMin !== min ? 'z-30' : 'z-10' }`} onChange={(e) => { const value = Number(e.target.value); if (value <= valueMax) { touched.current = true; setValueMin(value); } }} /> { const value = Number(e.target.value); if (value >= valueMin) { touched.current = true; setValueMax(value); } }} />
{subText && (
{subText}
)}
); }; export default MultiRangeSlider;