"use client"; import { useEffect, useRef } from 'react'; import Image, { StaticImageData } from 'next/image'; import { HeaderNavLink } from '@/app/components/ui/navlink'; import { useMedia } from 'react-use'; interface MenuItem { href: string; icon: React.ReactNode; label: string; } interface MobileMenuProps { isOpen: boolean; onClose: () => void; logoSrc: StaticImageData; items: MenuItem[]; } const MobileMenu: React.FC = ({ isOpen, onClose, logoSrc, items }) => { const isLargeScreen = useMedia('(min-width: 1024px)', false); const menuRef = useRef(null); useEffect(() => { const handleOutsideClick = (event: MouseEvent | TouchEvent) => { if ( !isLargeScreen && isOpen && !menuRef.current?.contains(event.target as Node) && !((event.target as HTMLElement).closest('.toggle-button')) // Exclude the toggle button ) { onClose(); // Close the menu } }; if (!isLargeScreen && isOpen) { // Add event listeners for both mouse and touch events document.addEventListener('mousedown', handleOutsideClick); } return () => { // Remove the event listener when the component unmounts document.removeEventListener('mousedown', handleOutsideClick); }; }, [isLargeScreen, isOpen, onClose]); useEffect(() => { if (isLargeScreen && isOpen) { onClose(); } }, [isLargeScreen, isOpen, onClose]); return (
Logo
{/* Mobile menu content */}
{items.map((item, index) => (
{item.icon} {item.label}
))}
); }; export { MobileMenu };