import { AnimatePresence, motion } from 'motion/react'; import i18n from '/@/i18n/i18n'; import { QueryBuilderOption } from '/@/renderer/components/query-builder/query-builder-option'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { DropdownMenu } from '/@/shared/components/dropdown-menu/dropdown-menu'; import { Group } from '/@/shared/components/group/group'; import { Icon } from '/@/shared/components/icon/icon'; import { Select } from '/@/shared/components/select/select'; import { Stack } from '/@/shared/components/stack/stack'; import { QueryBuilderGroup, QueryBuilderRule } from '/@/shared/types/types'; 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 }[]; playlist: { label: string; value: string }[]; string: { label: string; value: string }[]; }; playlists?: { label: string; value: string }[]; uniqueId: string; } export const QueryBuilder = ({ data, filters, groupIndex, level, onAddRule, onAddRuleGroup, onChangeField, onChangeOperator, onChangeType, onChangeValue, onClearFilters, onDeleteRule, onDeleteRuleGroup, onResetFilters, operators, playlists, uniqueId, }: QueryBuilderProps) => { const handleAddRule = () => { onAddRule({ groupIndex, level }); }; const handleAddRuleGroup = () => { onAddRuleGroup({ groupIndex, level }); }; const handleDeleteRuleGroup = () => { onDeleteRuleGroup({ groupIndex, level, uniqueId }); }; const handleChangeType = (value: null | string) => { onChangeType({ groupIndex, level, value }); }; return (