import { ReactNode, useEffect, useRef, useState } from "react"; import Icon from "../Icon"; interface Props { trigger?: ReactNode; actions?: ReactNode; className?: string; actionsClassName?: string; } const Dropdown: React.FC = (props: Props) => { const { trigger, actions, className, actionsClassName } = props; const [dropdownStatus, setDropdownStatus] = useState(false); const dropdownWrapperRef = useRef(null); useEffect(() => { if (dropdownStatus) { const handleClickOutside = (event: MouseEvent) => { if (!dropdownWrapperRef.current?.contains(event.target as Node)) { setDropdownStatus(false); } }; window.addEventListener("click", handleClickOutside, { capture: true, }); return () => { window.removeEventListener("click", handleClickOutside, { capture: true, }); }; } }, [dropdownStatus]); const handleToggleDropdownStatus = (e: React.MouseEvent) => { e.stopPropagation(); setDropdownStatus(!dropdownStatus); }; return (
{trigger ? ( trigger ) : ( )}
{actions}
); }; export default Dropdown;