/* eslint-disable @typescript-eslint/no-explicit-any */ import { FilterExpressionViewModel } from "../../../data/advancedSearch"; import { FilterTargetType, OperatorCreiteria } from "../../../enum"; import { getUniqueId } from "../../../helper/getUniqueId"; import { defaultCriteria, typeBasedOperators } from "../constant"; export const getTypeBasedOperators = (type: FilterTargetType) => { const operatorList = typeBasedOperators.find( (operator) => operator.type === type ); return operatorList ? operatorList?.operators : []; }; export const getAdvancedSearchIntitialFilterRow = () => { const id = "ADVS__" + getUniqueId(); const defaultAdvanceSearch: FilterExpressionViewModel = { id, idLabel: defaultCriteria, allPropertieseToFilter: [], alloperators: [], allValues: [], selectedFilter: { id, propertyToFilter: { label: "Select Filter...", apiPropertyName: "", type: FilterTargetType.TEXT, value: null, }, operator: { label: "Select Operator...", value: null }, value: undefined, selectedCriteria: OperatorCreiteria.AND, }, }; return defaultAdvanceSearch; }; export const isFilterValueEmpty = (value: any): boolean => { if (value === undefined || value === null || value === "") return true; if (Array.isArray(value)) return value.length === 0; if ( typeof value === "object" && !(value instanceof Date) && "value" in value && (value.value === null || value.value === undefined) ) { return true; } return false; }; export const normalizeLogicOperators = (input: string): string => { return input.replace(/\)\s*([^()]*?)\s*\(/g, (match, between) => { const token:string = between.trim(); if (token === "") { // nothing between -> treat as AND return ") AND ("; } // if exactly "AND" or "OR" (case-insensitive) -> keep and uppercase const m = token.match(/^(AND|OR)$/i); if (m) { return `) ${m[1].toUpperCase()} (`; } // anything else -> AND return ") AND ("; }); }