'use client'; import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { usePopper } from 'react-popper'; const Dropdown = (props: any, forwardedRef: any) => { const [visibility, setVisibility] = useState(false); const referenceRef = useRef(); const popperRef = useRef(); const { styles, attributes } = usePopper(referenceRef.current, popperRef.current, { placement: props.placement || 'bottom-end', modifiers: [ { name: 'offset', options: { offset: props.offset || [0], }, }, ], }); const handleDocumentClick = (event: any) => { if (referenceRef.current.contains(event.target) || popperRef.current.contains(event.target)) { return; } setVisibility(false); }; useEffect(() => { document.addEventListener('mousedown', handleDocumentClick); return () => { document.removeEventListener('mousedown', handleDocumentClick); }; }, []); useImperativeHandle(forwardedRef, () => ({ close() { setVisibility(false); }, })); return ( <>
setVisibility(!visibility)}> {visibility && props.children}
); }; export default forwardRef(Dropdown);