@@ -4,7 +4,6 @@ import Slider from 'rc-slider';
44import React , {
55 forwardRef ,
66 useEffect ,
7- useMemo ,
87 useState
98} from 'react' ;
109import { Grid } from 'semantic-ui-react' ;
@@ -22,34 +21,28 @@ const FacetSlider = forwardRef(({ useRangeSlider, ...props }: Props, ref: HTMLEl
2221 const {
2322 start,
2423 range,
25- refine,
24+ canRefine = true ,
25+ refine
2626 } = useRangeSlider ( props ) ;
2727
28- const [ valueView , setValueView ] = useState < Array < number >> ( [ range . min , range . max ] ) ;
28+ const { min , max } = range ;
2929
30- /**
31- * Sets the visibility variable based on the range min and max.
32- *
33- * @type {unknown }
34- */
35- const visible = useMemo ( ( ) => range . min !== 0 && range . max !== 0 , [ range . min , range . max ] ) ;
30+ const [ value , setValue ] = useState ( [ min , max ] ) ;
31+
32+ const from = Math . max ( min , Number . isFinite ( start [ 0 ] ) ? start [ 0 ] : min ) ;
33+ const to = Math . min ( max , Number . isFinite ( start [ 1 ] ) ? start [ 1 ] : max ) ;
3634
37- /**
38- * Resets the value and valueView when the current refinement is cleared.
39- */
4035 useEffect ( ( ) => {
41- if ( start [ 0 ] <= range . min && start [ 1 ] >= range . max ) {
42- setValueView ( [ range . min , range . max ] ) ;
43- }
44- } , [ range , start ] ) ;
36+ setValue ( [ from , to ] ) ;
37+ } , [ from , to ] ) ;
4538
4639 return (
4740 < Facet
4841 defaultActive = { props . defaultActive }
4942 divided = { props . divided }
5043 innerRef = { ref }
5144 title = { props . title }
52- visible = { visible }
45+ visible = { props . visible }
5346 >
5447 < div
5548 className = 'facet-slider'
@@ -60,24 +53,25 @@ const FacetSlider = forwardRef(({ useRangeSlider, ...props }: Props, ref: HTMLEl
6053 < Slider
6154 allowCross = { false }
6255 defaultValue = { start }
56+ disabled = { ! canRefine }
6357 max = { range . max }
6458 min = { range . min }
65- onAfterChange = { ( v ) => refine ( v ) }
66- onChange = { ( v ) => setValueView ( v ) }
59+ onChangeComplete = { ( v ) => refine ( v ) }
60+ onChange = { ( v ) => setValue ( v ) }
6761 range
68- value = { valueView }
62+ value = { value }
6963 />
7064 </ div >
7165 < Grid
7266 columns = { 2 }
7367 >
7468 < Grid . Column >
75- { valueView [ 0 ] }
69+ { value [ 0 ] }
7670 </ Grid . Column >
7771 < Grid . Column
7872 textAlign = 'right'
7973 >
80- { valueView [ 1 ] }
74+ { value [ 1 ] }
8175 </ Grid . Column >
8276 </ Grid >
8377 </ div >
0 commit comments