import { Grid } from '@arco-design/web-react'; import React from 'react'; import { useControlledObjectState } from '../../hooks/useObjectState'; import type { FieldHandler } from '../fields'; interface ListFilterProps { fields: FieldHandler[]; filterValues: Record; onChangeFilter: (values: Record) => void; } export const ListFilter: React.FC = React.memo((props) => { const [filterValues, setFilterValues] = useControlledObjectState< Record >(props.filterValues, props.onChangeFilter); return (
{props.fields.map((fieldHandler, i) => { const c = fieldHandler('edit'); return (
{c.title}
{c.render(filterValues[c.source], (val) => setFilterValues({ [c.source]: castFilterValue(val) }) )}
); })}
); }); ListFilter.displayName = 'ListFilter'; function castFilterValue(input: any) { if ( input === '' || input === null || input === undefined || (Array.isArray(input) && input.length === 0) ) { return undefined; } return input; }