UNPKG

rockui

Version:
75 lines (74 loc) 3 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; import React, { useContext, useState } from "react"; import classNames from "classnames"; import { MenuContext } from './menu'; import Icon from '../Icon/icon'; var SubMenu = function (_a) { var index = _a.index, title = _a.title, children = _a.children, className = _a.className; var context = useContext(MenuContext); var openedSubMenus = context.defaultOpenSubMenus; var isOpend = (index && context.mode === 'vertical') ? openedSubMenus.includes(index) : false; var _b = useState(isOpend), menuOpen = _b[0], setOpen = _b[1]; var classes = classNames("menu-item submenu-item", className, { "is-active": context.index === index, "is-vitical": context.mode === 'vertical', 'menu-open': menuOpen, }); var handleClick = function (e) { e.preventDefault(); setOpen(!menuOpen); if (context.onSelect && (typeof index === 'number')) { context.onSelect(index); } }; var timer; var handleMouse = function (e, toggle) { clearTimeout(timer); e.preventDefault(); timer = setTimeout(function () { setOpen(toggle); }, 300); }; var clickEvents = context.mode === 'vertical' ? { onClick: handleClick } : {}; var hoverEvents = context.mode !== 'vertical' ? { onMouseEnter: function (e) { handleMouse(e, true); }, onMouseLeave: function (e) { handleMouse(e, false); } } : {}; var renderChildren = function () { var subMenuClasses = classNames('submenu', { 'menu-open': menuOpen, }); var childrenComponent = React.Children.map(children, function (child, i) { var childElement = child; var displayName = childElement.type.displayName; if (displayName === 'MenuItem') { return React.cloneElement(childElement, { index: index + "-" + i }); } else { console.error('Warning:SubMenu has a child which is not a MenuItem component'); } }); return (React.createElement("ul", { className: subMenuClasses }, childrenComponent)); }; return (React.createElement("li", __assign({ key: index, className: classes }, hoverEvents), React.createElement("div", __assign({ className: "submenu-title" }, clickEvents), title, React.createElement(Icon, { icon: 'angle-down', className: "down-icon", theme: "primary", size: "1x" }), renderChildren()))); }; SubMenu.displayName = "SubMenu"; export default SubMenu;