import { Field, Label, Listbox, ListboxButton, ListboxOption, ListboxOptions, } from '@headlessui/react'; import { CheckIcon, ChevronDownIcon } from '@heroicons/react/20/solid'; import { Chip } from '@mui/material'; import clsx from 'clsx'; import React, { useEffect } from 'react'; type ListItem = { id: number; value: string; label?: string; }; type MultiSelectDropdownProps = { items: ListItem[]; selected: ListItem[]; title: string; onChange: (items: ListItem[]) => void; placeholder?: string; disabled?: boolean; }; const MultiSelectDropdown: React.FC = ({ items, title, selected, onChange, placeholder, disabled = false, }) => { const ids = items.map(item => item.id); const hasDuplicateIds = new Set(ids).size !== ids.length; if (hasDuplicateIds) { throw new Error('Los ids de los items deben ser Ășnicos'); } const handleChange = (items: ListItem[]) => { onChange(items); }; const handleDeleteChip = (deletedItem: ListItem) => { handleChange(selected.filter(item => item !== deletedItem)); }; useEffect(() => { onChange([]); }, [items, onChange]); return ( {selected.length > 0 ? selected.map(s => ( handleDeleteChip(s)} variant="outlined" /> )) : placeholder} {items.map(item => ( s.id === item.id), invisible: !selected.some(s => s.id === item.id), })} />
{item.label ? item.label : item.value}
))}
); }; export default MultiSelectDropdown;