UNPKG

glass-app-manager

Version:

Informatica's Glass Framework CLI for bootstrapping

67 lines (57 loc) 1.54 kB
import React from "react"; import Popover from "react-tiny-popover"; export const isSubmenu = e => { return e.target.classList.contains("menu__submenu"); }; export const isDisabledItem = e => { return e.target.classList.contains("disabled"); }; export const openMenu = (open, setOpen, onChange) => { if (open) { return; } setOpen(true); if (onChange) { onChange(true); } }; export const closeMenu = (open, setOpen, onChange) => { if (!open) { return; } setOpen(false); if (onChange) { onChange(false); } }; export const toggleMenu = (open, setOpen, onChange) => { if (open) { closeMenu(open, setOpen, onChange); } else { openMenu(open, setOpen, onChange); } }; export const MenuOpener = ({ children, trigger, open, setOpen, onChange, ...rest }) => { // Close the menu when an item (not a submenu) is clicked. const handleClick = React.useCallback( e => { if (!isSubmenu(e) && !isDisabledItem(e)) { closeMenu(open, setOpen, onChange); } }, [open, setOpen] ); return ( <Popover isOpen={open} containerClassName="menu__container" content={ <ul className="menu" onClick={handleClick}> {children} </ul> } {...rest}> {trigger} </Popover> ); };