import Link from "next/link"; import ThemeSwitcher from "@/components/ThemeSwitcher"; import { Dispatch, RefObject, SetStateAction, useEffect, useRef, useState, } from "react"; type hamburgerMenuState = { menuVisible: boolean; setMenuVisible: Dispatch>; hamburgerButtonRef: RefObject; }; const HamburgerMenu = ({ menuVisible, setMenuVisible, hamburgerButtonRef, }: hamburgerMenuState) => { const [mouseOverMenu, setMouseOverMenu] = useState(false); const timeoutRef = useRef(); const menuRef = useRef(null); useEffect(() => { const handleMouseDownOutsideMenu = (event: MouseEvent) => { if ( menuVisible && menuRef.current && !menuRef.current.contains(event.target as Node) && hamburgerButtonRef.current && !hamburgerButtonRef.current.contains(event.target as Node) ) { setMenuVisible(false); setMouseOverMenu(false); } }; document.addEventListener("mousedown", handleMouseDownOutsideMenu); return () => { document.removeEventListener("mousedown", handleMouseDownOutsideMenu); }; }, [menuVisible]); useEffect(() => { if (menuVisible && !mouseOverMenu) { menuTimeout(); } else { clearTimeout(timeoutRef.current); } }, [mouseOverMenu, menuVisible]); const handleMouseEnterMenu = () => { setMouseOverMenu(true); clearTimeout(timeoutRef.current); }; const handleMouseLeaveMenu = () => { setMouseOverMenu(false); clearTimeout(timeoutRef.current); }; const menuTimeout = () => { timeoutRef.current = setTimeout(() => { setMenuVisible(false); setMouseOverMenu(false); }, 2000); }; return (
  • Tournois
  • Qui Sommes-Nous
  • Contactez-Nous
); }; export default HamburgerMenu;