import React, { useState, useCallback } from 'react' import styles from './index.module.less' import { RangeUnitFilter, RangeWithIndex } from '../../types/searchSelect' import { store } from '../../store' import FilterRightHelper from '../FilterRightHelper' import RangeFilterInputItem from '../RangeFilterInputItem' type ComponentProps = { filter: RangeUnitFilter } const RangeFilter: React.FC = ({ filter }) => { const [rangeValue, setRangeValue] = useState([]) const usefulRangeValue: RangeWithIndex[] = rangeValue.filter(({ range }) => { const { low, high } = range.range return Number.isFinite(low!) || Number.isFinite(high!) }) const { values = [] } = filter.tag const handleChange = useCallback( (range, index) => { const currentRangeValue = [...rangeValue] const findIndex = currentRangeValue.findIndex(({ index: _i }) => _i === index) if (findIndex !== -1) currentRangeValue.splice(findIndex, 1) setRangeValue([...currentRangeValue, { range, index }]) }, [rangeValue, setRangeValue] ) const submit = useCallback(() => { const { tag } = filter const values = usefulRangeValue.map(({ range }) => range) store.main.appendFilter({ ...filter, tag: { ...tag, values, }, }) }, [filter, usefulRangeValue]) return (
{values.map((range, index) => ( _i === index)?.range || range} onChange={_ => handleChange(_, index)} /> ))}
) } export default RangeFilter