import React, { useState, useEffect, useRef } from 'react'; import classNames from 'classnames'; import styles from './Dropdown.module.css'; export default function DropDown({ value, options = [], onChange, className }) { const [showMenu, setShowMenu] = useState(false); const ref = useRef(); function handleShowMenu() { setShowMenu(state => !state); } function handleSelect(value, e) { e.stopPropagation(); setShowMenu(false); onChange(value); } useEffect(() => { function hideMenu(e) { if (!ref.current.contains(e.target)) { setShowMenu(false); } } document.addEventListener('click', hideMenu); return () => { document.removeEventListener('click', hideMenu); }; }, [ref]); return (
{options.find(e => e.value === value).label}
{showMenu && (
{options.map(({ label, value }) => (
handleSelect(value, e)}> {label}
))}
)}
); }