import React, { useCallback, useMemo } from 'react'; import type { IDatasetField, IFilter } from '../../typings'; import EditName from '../EditName'; import FieldSelect from '../FieldSelect'; import useDataset from '../../hooks/useDataset'; import { Collapse, Dropdown, Menu, Popconfirm, Switch, Form } from 'antd'; import FilterValue from '../AppFilterConfig/FilterValue'; import { useRef } from 'react'; import { getFilterRange } from '../../utils'; interface IProps { filter: IFilter; dragIcon: JSX.Element; onChange: (newFilter: Partial) => void; onEditName: (newName: string, filter: IFilter) => void; onCopy: (filter: IFilter) => void; onDelete: (filter: IFilter) => void; } const { Panel } = Collapse; const FilterItem = ({ filter, onChange, onEditName, onDelete, onCopy, dragIcon, }: IProps) => { const { getTargetDataset } = useDataset(); const dropdownRef = useRef(null); const { getDatasetMarkStyle } = useDataset(); const fields = useMemo( () => getTargetDataset(filter.datasetId)?.fields ?? [], [getTargetDataset, filter.datasetId], ); const resetFilterProperties: (field: IDatasetField) => Partial = useCallback( (field) => { const targetDataset = getTargetDataset(filter.datasetId); if (!targetDataset) { return {}; } if (field.type === 'boolean') { return { value: true }; } if (field.type === 'string') { return { value: [] }; } if (field.type === 'number') { return { value: getFilterRange(field.range) }; } return {}; }, [filter, getTargetDataset], ); const header = (
e.stopPropagation()} > {dragIcon} onEditName(newName, filter)} />
onChange({ id: filter.id, enable: newEnable, }) } /> onCopy(filter)}> 复制筛选器 onDelete(filter)} > 删除筛选器 } >
); const content = (
{ onChange({ id: filter.id, field, ...(field ? resetFilterProperties(field) : {}), } as Partial); }} /> onChange({ id: filter.id, value: newValue, }) } />
); return (
{content}
); }; export default FilterItem;