'use client'; import React, { useState, useRef, useEffect } from 'react'; const CustomSelect = ({ options, value, onChange, placeholder, required = false }) => { const [isOpen, setIsOpen] = useState(false); const [selectedLabel, setSelectedLabel] = useState(placeholder); const dropdownRef = useRef(null); useEffect(() => { const selectedOption = options.find(option => option.value === value); if (selectedOption && !selectedOption.disabled) { setSelectedLabel(selectedOption.label); } else { setSelectedLabel(placeholder); } }, [value, options, placeholder]); useEffect(() => { const handleClickOutside = (event) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { setIsOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); const handleSelect = (option) => { if (!option.disabled) { onChange(option.value); setIsOpen(false); } }; return (
setIsOpen(!isOpen)} > {selectedLabel}
{isOpen && (
{options.map((option, index) => { if (option.disabled) return null; return (
handleSelect(option)} > {option.label}
); })}
)} {/* Hidden input for form validation */}
); }; export default CustomSelect;