import { useState, useRef, useEffect } from 'react' import '@/styles/dropdown.css' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faChevronDown } from '@fortawesome/free-solid-svg-icons' type Option = { label: string value: string | number } type Props = { value: string | number options: Option[] onChange: (value: string | number) => void | Promise } export default function Dropdown ({ value, options, onChange }: Props) { const [open, setOpen] = useState(false) const ref = useRef(null) const selected = options.find(o => o.value === value) useEffect(() => { const handleClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) { setOpen(false) } } window.addEventListener('mousedown', handleClick) return () => window.removeEventListener('mousedown', handleClick) }, []) return (
{options.map((option, i) => (
{ await onChange(option.value) setOpen(false) }} > {option.label}
))}
) }