({
updatemode = 'mouseup',
// eslint-disable-next-line @typescript-eslint/no-unused-vars
persisted_props = [PersistedProps.value],
// eslint-disable-next-line @typescript-eslint/no-unused-vars
persistence_type = PersistenceTypes.local,
// eslint-disable-next-line no-magic-numbers
verticalHeight = 400,
step = undefined,
allow_direct_input = true,
setProps,
value,
drag_value,
...props
}: SliderProps)
| 15 | * A slider component with a single handle. |
| 16 | */ |
| 17 | export default function Slider({ |
| 18 | updatemode = 'mouseup', |
| 19 | // eslint-disable-next-line @typescript-eslint/no-unused-vars |
| 20 | persisted_props = [PersistedProps.value], |
| 21 | // eslint-disable-next-line @typescript-eslint/no-unused-vars |
| 22 | persistence_type = PersistenceTypes.local, |
| 23 | // eslint-disable-next-line no-magic-numbers |
| 24 | verticalHeight = 400, |
| 25 | step = undefined, |
| 26 | allow_direct_input = true, |
| 27 | setProps, |
| 28 | value, |
| 29 | drag_value, |
| 30 | ...props |
| 31 | }: SliderProps) { |
| 32 | // This is actually a wrapper around a RangeSlider. |
| 33 | // We'll modify key `Slider` props to be compatible with a Range Slider. |
| 34 | |
| 35 | // Some considerations for the default value of `step`: |
| 36 | // If the range consists of integers, default to a value of `1` |
| 37 | // Otherwise, leave it undefined |
| 38 | if ( |
| 39 | typeof step === 'undefined' && |
| 40 | Number.isInteger(props.min) && |
| 41 | Number.isInteger(props.max) |
| 42 | ) { |
| 43 | step = 1; |
| 44 | } |
| 45 | |
| 46 | const mappedValue: RangeSliderProps['value'] = useMemo(() => { |
| 47 | return typeof value === 'number' ? [value] : value; |
| 48 | }, [value]); |
| 49 | |
| 50 | const mappedDragValue: RangeSliderProps['drag_value'] = useMemo(() => { |
| 51 | return typeof drag_value === 'number' ? [drag_value] : drag_value; |
| 52 | }, [drag_value]); |
| 53 | |
| 54 | const mappedSetProps: RangeSliderProps['setProps'] = useCallback( |
| 55 | newProps => { |
| 56 | const {value, drag_value} = newProps; |
| 57 | const mappedProps: Partial<SliderProps> = omit( |
| 58 | ['value', 'drag_value', 'setProps'], |
| 59 | newProps |
| 60 | ); |
| 61 | if ('value' in newProps) { |
| 62 | mappedProps.value = value ? value[0] : value; |
| 63 | } |
| 64 | if ('drag_value' in newProps) { |
| 65 | mappedProps.drag_value = drag_value |
| 66 | ? drag_value[0] |
| 67 | : drag_value; |
| 68 | } |
| 69 | |
| 70 | setProps(mappedProps); |
| 71 | }, |
| 72 | [setProps] |
| 73 | ); |
| 74 |
nothing calls this directly
no test coverage detected
searching dependent graphs…