import React, { useEffect, useRef, useState } from 'react'; import { PickerItem } from '../../../shared/types'; interface ItemPickerProps { items: PickerItem[]; selection: string | undefined; label: string; placeholder: string; classModifier: string; valueFormatter?: (id: string, label: string) => string; onPick: (picked: string, id?: string) => void; } const ItemPicker: React.FC = ({ items, selection, label, placeholder, classModifier, valueFormatter, onPick }) => { const [isDropdownOpen, setIsDropdownOpen] = useState(false); const dropdownRef = useRef(null); const handlePick = (picked: string, id?: string) => { setIsDropdownOpen(false); onPick(picked, id); }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setIsDropdownOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); return (
{label}
{isDropdownOpen && (
    {items.map(({ id, label, icon }) => (
  • { handlePick(label, id); e.stopPropagation(); }} className={`dropdown-menu__item${selection === label ? ' dropdown-menu__item--selected' : ''}`}> {icon && {icon}} {valueFormatter ? valueFormatter(id, label) : label}
  • ))}
)}
); }; export default ItemPicker;