import React, { useEffect, useState } from 'react'; import { getFilterRange } from '../../utils'; import styles from './index.less'; import { InputNumber, Slider } from 'antd'; import { useDebounceEffect } from 'ahooks'; import { isEqual } from 'lodash'; export type INumberFilterValue = [number, number]; interface IProps { value: INumberFilterValue; range: INumberFilterValue; onChange: (newValue: INumberFilterValue) => void; } const NumberFilterValue: React.FC = ({ value, onChange, range }) => { const [cacheValue, setCacheValue] = useState(value); useEffect(() => { setCacheValue(value); }, [JSON.stringify(value)]); useDebounceEffect( () => { if (!isEqual(cacheValue, value)) { onChange(cacheValue); } }, [cacheValue, onChange], { wait: 400, }, ); const [minRange, maxRange] = getFilterRange(range); const [minValue, maxValue] = cacheValue as [number, number]; if (minValue === maxValue) { return ( 该字段最小值和最大值一致,无法进行筛选 ); } return ( <>
onChange([newMinValue, maxValue])} onPressEnter={() => onChange(cacheValue)} onBlur={() => onChange(cacheValue)} /> onChange([minValue, newMaxValue])} onPressEnter={() => onChange(cacheValue)} onBlur={() => onChange(cacheValue)} />
); }; export default NumberFilterValue;