"use client"; import { memo, useState, useEffect, useRef } from 'react'; import FieldWrapper from './FieldWrapper'; import { __ } from '@wordpress/i18n'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from './DropdownInput'; import Icon from '../../utils/Icon'; interface MultiSelectOption { value: string; label: string; icon?: string; } interface MultiSelectFieldProps { field: { id: string; label?: string; options: MultiSelectOption[]; is_lock?: boolean; tooltip?: any; placeholder?: string; [key: string]: any; }; value: string[]; onChange: (value: string[]) => void; } const MultiSelect = ({ field, value, onChange } : MultiSelectFieldProps ) => { const [open, setOpen] = useState(false); const selectedValues = Array.isArray(value) ? value : []; const removeButtonRefs = useRef>({}); const selectedOptions = selectedValues .map(val => field.options.find(opt => opt.value === val)) .filter((opt): opt is MultiSelectOption => opt !== undefined); const handleValueChange = (newValue: string) => { const isSelected = selectedValues.includes(newValue); let updatedValues; if (isSelected) { updatedValues = selectedValues.filter((item) => item !== newValue); } else { updatedValues = [...selectedValues, newValue]; } onChange(updatedValues); }; const handleRemoveTag = (e: React.MouseEvent | React.KeyboardEvent, itemToRemove: string) => { e.stopPropagation(); e.preventDefault(); const updatedValues = selectedValues.filter((item) => item !== itemToRemove); onChange(updatedValues); }; const handleSelectOpenChange = (newOpen: boolean) => { const clickedRemoveButton = Object.values(removeButtonRefs.current).some( (ref) => ref && ref.contains(event.target as Node) ); if (clickedRemoveButton) { return; } setOpen(newOpen); }; return ( {field.label} {field.tooltip && ( )} } > ); }; export default memo(MultiSelect);