From 05b749ac53f40aad501c28c86639af4c010f72df Mon Sep 17 00:00:00 2001 From: Kushagra Gour Date: Sun, 7 Jul 2024 12:48:39 +0530 Subject: [PATCH] add dropdown file --- src/components/Dropdown.jsx | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/components/Dropdown.jsx diff --git a/src/components/Dropdown.jsx b/src/components/Dropdown.jsx new file mode 100644 index 0000000..ce5cb3a --- /dev/null +++ b/src/components/Dropdown.jsx @@ -0,0 +1,71 @@ +import { useState, useRef, useEffect } from 'preact/hooks'; + +const DropdownMenu = ({ + btnProps = {}, + btnContent, + menuItems, + position = 'top' +}) => { + const [isOpen, setIsOpen] = useState(false); + const triggerRef = useRef(null); + const menuRef = useRef(null); + + const toggleDropdown = () => { + setIsOpen(!isOpen); + }; + + const handleClickOutside = event => { + if ( + menuRef.current && + !menuRef.current.contains(event.target) && + !triggerRef.current.contains(event.target) + ) { + setIsOpen(false); + } + }; + + useEffect(() => { + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + + return ( +
+ + {isOpen && ( + + )} +
+ ); +}; + +export { DropdownMenu };