/* eslint-disable @typescript-eslint/no-explicit-any */ import { useState } from "react"; import FactoryRenderer from "../../../../Renderer"; import { FilterExpressionViewModel, FilterTarget, } from "../../data/advancedSearch"; import { Operator } from "../../enum"; import Filter from "./Filter"; import { isFilterValueEmpty } from "./helper/AdvancedSearchFunctions"; interface FilterPopupViewProps { uiElementGroupId: string; filterRows: FilterExpressionViewModel[]; criteria: string; cache?: Record; loadSupportiveData: (propertyToFilter: FilterTarget) => Promise; onFilterTargetChange: (value: FilterTarget, id: string) => void; onOperatorChange: ( value: { label: string; value: Operator | null }, id: string ) => void; onFilterValueChange: (value: any, id: string) => void; onCriteriaToggle: (id: string) => void; onAddFilter: (id: string) => void; onDeleteFilter: (id: string) => void; onClear: () => void; onCriteriaApplied: () => void; onCopyToClipboard: () => void; onCancel: () => void; onApply: () => void; isApplyDisabled?: boolean; isClearDisabled?: boolean; } const FilterPopupView = (props: FilterPopupViewProps) => { const [validationErrors, setValidationErrors] = useState>( new Set(), ); const validateAndApply = () => { const errors = new Set(); props.filterRows.forEach((row) => { const hasFilter = row.selectedFilter?.propertyToFilter?.apiPropertyName; const hasOperator = row.selectedFilter?.operator?.value != null; const hasValue = !isFilterValueEmpty(row.selectedFilter?.value); if (!hasFilter || !hasOperator || !hasValue) { errors.add(row.id); } }); if (errors.size > 0) { setValidationErrors(errors); return; } setValidationErrors(new Set()); props.onApply(); }; return ( <>
Filter
Operator
Value
{props.filterRows?.map((filterRow: FilterExpressionViewModel) => ( { setValidationErrors((prev) => { const next = new Set(prev); next.delete(id); return next; }); props.onFilterTargetChange(value, id); }} onOperatorChange={(value, id) => { setValidationErrors((prev) => { const next = new Set(prev); next.delete(id); return next; }); props.onOperatorChange(value, id); }} onFilterValueChange={(value, id) => { setValidationErrors((prev) => { const next = new Set(prev); next.delete(id); return next; }); props.onFilterValueChange(value, id); }} onCriteriaToggle={props.onCriteriaToggle} onAddFilter={props.onAddFilter} onDeleteFilter={props.onDeleteFilter} loadSupportiveData={props.loadSupportiveData} hasError={validationErrors.has(filterRow.id)} /> ))}

{props.criteria}

Cancel
); }; export default FilterPopupView;