import Rules, { RulesMode } from "@Front/Components/Elements/Rules"; import useHoverable from "@Front/Hooks/useHoverable"; import useOpenable from "@Front/Hooks/useOpenable"; import React, { useEffect, useRef } from "react"; import classes from "./classes.module.scss"; import MenuItem, { IItem } from "./MenuItem"; type IProps = { children: React.ReactNode; items: IItem[]; openingSide?: "left" | "right" | "center"; openOnHover?: boolean; }; export default function Menu(props: IProps) { const { openingSide = "left", items, children, openOnHover } = props; const { handleMouseLeave, handleMouseEnter, isHovered } = useHoverable(100); const { isOpen, toggle, close } = useOpenable(); const subMenuRef = useRef(null); const iconRef = useRef(null); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if ( subMenuRef.current && !subMenuRef.current.contains(e.target as Node) && iconRef.current && !iconRef.current.contains(e.target as Node) ) { close(); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, [close]); return ( item?.rules ?? [])}>
{children}
{((!openOnHover && isOpen) || (openOnHover && isHovered)) && (
{items.map((item, index) => { return ( ); })}
)}
); }