/* eslint-disable @typescript-eslint/no-explicit-any */ import TypeBasedWidgetFactory from "./TypeBasedWidgetFactory"; import FactoryRenderer from "../../../../Renderer"; import { FilterTargetType, Operator } from "../../enum"; import { useEffect, useMemo } from "react"; import { getTypeBasedOperators } from "./helper/AdvancedSearchFunctions"; import { FilterExpressionViewModel, FilterTarget, FilterValue, } from "../../data/advancedSearch"; interface FilterProps { uiElementGroupId: string; filterRow: FilterExpressionViewModel; appliedfilterCount: number; cache?: Record; loadSupportiveData: (propertyToFilter: FilterTarget) => Promise; onFilterTargetChange: (value: FilterTarget, id: string) => void; onOperatorChange: ( value: { label: string; value: Operator | null }, id: string, ) => void; onFilterValueChange: (value: FilterValue[] | FilterValue, id: string) => void; onCriteriaToggle: (id: string) => void; onAddFilter: (id: string) => void; onDeleteFilter: (id: string) => void; hasError?: boolean; } const Filter = (props: FilterProps) => { useEffect(() => { props.loadSupportiveData(props.filterRow?.selectedFilter?.propertyToFilter); }, [props.filterRow?.selectedFilter?.propertyToFilter?.value]); const operators = useMemo( () => getTypeBasedOperators( props.filterRow?.selectedFilter?.propertyToFilter?.type, ), [props.filterRow?.selectedFilter?.propertyToFilter?.type], ); return ( <>
{props.filterRow.idLabel} { props.onFilterTargetChange(e, props.filterRow.id); }} uiElementType="WIDGET" widgetType="DROPDOWN" /> props.onOperatorChange(e, props.filterRow.id) } uiElementType="WIDGET" widgetType="DROPDOWN" /> props.onAddFilter(props.filterRow.id)} uiElementType="WIDGET" widgetType="ICON" title="Add" /> props.onDeleteFilter(props.filterRow.id)} uiElementType="WIDGET" widgetType="ICON" fillMode="clear" title="Remove" widgetStyle={{ className: "qo-btn qo-text-danger tmpl-button-sm", inline: { visibility: props.appliedfilterCount === 1 ? "hidden" : "visible", }, }} />
props.onCriteriaToggle(props.filterRow.id)} className="tmpl-criteria" > {props.filterRow.selectedFilter.selectedCriteria?.toString()} ); }; export default Filter;