// Composant générique pour les menus dropdown import { useRouter } from 'next/navigation'; import React, { useState, useEffect, useRef } from 'react'; const DropdownMenu = ({ buttonContent, items, buttonClassName, menuClassName, dropdownOpen: propDropdownOpen, setDropdownOpen: propSetDropdownOpen, }) => { const [dropdownOpen, setDropdownOpen] = useState(false); const menuRef = useRef(null); const router = useRouter(); const isControlled = propDropdownOpen !== undefined && propSetDropdownOpen !== undefined; const actualDropdownOpen = isControlled ? propDropdownOpen : dropdownOpen; const actualSetDropdownOpen = isControlled ? propSetDropdownOpen : setDropdownOpen; const handleClickOutside = (event) => { if (menuRef.current && !menuRef.current.contains(event.target)) { actualSetDropdownOpen(false); } }; useEffect(() => { document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, []); const renderMenuItem = (item, index) => { // Si l'élément est de type 'info', afficher simplement le contenu if (item.type === 'info') { return
{item.content}
; } // Si l'élément est de type 'separator', afficher le séparateur if (item.type === 'separator') { return
{item.content}
; } // Par défaut ou si l'élément est de type 'item', afficher un bouton cliquable return ( ); }; return (
{actualDropdownOpen && (
{items.map((item, index) => renderMenuItem(item, index))}
)}
); }; export default DropdownMenu;