import React, { useEffect } from "react"; import { createPopper } from "@popperjs/core"; export function DropDownItem(props) { return ; } export default function Dropdown(props) { // dropdown props const [dropdownPopoverShow, setDropdownPopoverShow] = React.useState(false); const btnDropdownRef = React.createRef(); const popoverDropdownRef = React.createRef(); const openDropdownPopover = () => { createPopper(btnDropdownRef.current, popoverDropdownRef.current, { placement: props.placement ?? "left-start", }); setDropdownPopoverShow(true); }; const closeDropdownPopover = () => { setDropdownPopoverShow(false); }; function handleOutsideClick(event) { let node = popoverDropdownRef?.current; if (node && !node?.contains(event.target)) { closeDropdownPopover(); } } useEffect(() => { if ('ontouchend' in window) { document.addEventListener('touchend', handleOutsideClick) } else { document.addEventListener('click', handleOutsideClick) } // Specify how to clean up after this effect: return function cleanup() { document.removeEventListener('touchend', handleOutsideClick) document.removeEventListener('click', handleOutsideClick) }; }); return ( <> { e.preventDefault(); dropdownPopoverShow ? closeDropdownPopover() : openDropdownPopover(); }} > {props.button}
{props.children}
); };