import React, {FC, memo} from 'react'; import {getTrackBackground, Range} from 'react-range'; import {cn} from '../../util/bem'; import {SizeType} from '../../util/global-props'; import {Description} from '../description/description.component'; import {Wrapper} from '../wrapper/wrapper.component'; import './range-slider.component.scss'; export type RangeSliderPropsType = { className?: string; step?: number; min?: number; max: number; values: number[]; margin?: SizeType; flex?: number | string; style?: React.CSSProperties; tooltip?: boolean; tooltipBefore?: React.ReactNode; tooltipAfter?: React.ReactNode; toFixed?: number | undefined; onChange?: (values: number[]) => void; onFinalChange?: (values: number[]) => void; } // https://www.npmjs.com/package/react-range const className = cn('range-slider'); export const RangeSlider: FC = memo((props) => { const getColors = () => { switch (props.values.length) { default: case 1: return [ '#2EE5CB', '#F2F2F3' ]; case 2: return [ '#F2F2F3', '#4366F6', '#F2F2F3' ]; } }; const renderTrack = (p: any) => (
{ p.children }
); const renderThumb = (p: any) => (
{ (props.tooltip || props.tooltipBefore || props.tooltipAfter) && ( { props.tooltipBefore && `${ props.tooltipBefore } ` } { props.toFixed !== undefined ? props.values[ p.index ].toFixed(props.toFixed) : props.values[ p.index ] } { props.tooltipAfter && ` ${ props.tooltipAfter }` } ) }
); return ( { /* @ts-ignore */ } props.onChange && props.onChange(values) } onFinalChange={ (values) => props.onFinalChange && props.onFinalChange(values) } values={ props.values } step={ props.step } min={ props.min } max={ props.max } renderThumb={ (p) => renderThumb(p) } renderTrack={ (p) => renderTrack(p) } /> ); }); RangeSlider.defaultProps = { step: 1, min: 0 };