import { Group, Stack } from '@mantine/core'; import { Select } from '/@/renderer/components/select'; import { AnimatePresence, motion } from 'framer-motion'; import { RiAddFill, RiAddLine, RiDeleteBinFill, RiMore2Line, RiRestartLine } from 'react-icons/ri'; import { Button } from '/@/renderer/components/button'; import { DropdownMenu } from '/@/renderer/components/dropdown-menu'; import { QueryBuilderOption } from '/@/renderer/components/query-builder/query-builder-option'; import { QueryBuilderGroup, QueryBuilderRule } from '/@/renderer/types'; import i18n from '/@/i18n/i18n'; const FILTER_GROUP_OPTIONS_DATA = [ { label: i18n.t('form.queryEditor.input', { context: 'optionMatchAll', postProcess: 'sentenceCase', }), value: 'all', }, { label: i18n.t('form.queryEditor.input', { context: 'optionMatchAny', postProcess: 'sentenceCase', }), value: 'any', }, ]; type AddArgs = { groupIndex: number[]; level: number; }; type DeleteArgs = { groupIndex: number[]; level: number; uniqueId: string; }; interface QueryBuilderProps { data: Record; filters: { label: string; type: string; value: string }[]; groupIndex: number[]; level: number; onAddRule: (args: AddArgs) => void; onAddRuleGroup: (args: AddArgs) => void; onChangeField: (args: any) => void; onChangeOperator: (args: any) => void; onChangeType: (args: any) => void; onChangeValue: (args: any) => void; onClearFilters: () => void; onDeleteRule: (args: DeleteArgs) => void; onDeleteRuleGroup: (args: DeleteArgs) => void; onResetFilters: () => void; operators: { boolean: { label: string; value: string }[]; date: { label: string; value: string }[]; number: { label: string; value: string }[]; string: { label: string; value: string }[]; }; uniqueId: string; } export const QueryBuilder = ({ data, level, onAddRule, onDeleteRuleGroup, onDeleteRule, onAddRuleGroup, onChangeType, onChangeField, operators, onChangeOperator, onChangeValue, onClearFilters, onResetFilters, groupIndex, uniqueId, filters, }: QueryBuilderProps) => { const handleAddRule = () => { onAddRule({ groupIndex, level }); }; const handleAddRuleGroup = () => { onAddRuleGroup({ groupIndex, level }); }; const handleDeleteRuleGroup = () => { onDeleteRuleGroup({ groupIndex, level, uniqueId }); }; const handleChangeType = (value: string | null) => { onChangeType({ groupIndex, level, value }); }; return (