UNPKG

ango-react-components

Version:
44 lines (43 loc) 1.8 kB
import React, { createContext, useState } from "react"; import classNames from "classnames"; export var MenuContext = createContext({ index: '0' }); var Menu = function (props) { var className = props.className, mode = props.mode, style = props.style, children = props.children, defaultIndex = props.defaultIndex, onSelect = props.onSelect, defaultOpenSumMenus = props.defaultOpenSumMenus; var _a = useState(defaultIndex), currentActive = _a[0], setActive = _a[1]; var classes = classNames('ango-menu', className, { 'menu-vertical': mode === 'vertical', 'menu-horizontal': mode !== 'vertical' }); var handleClick = function (index) { setActive(index); if (onSelect) { onSelect(index); } }; var passedContext = { index: currentActive || '0', onSelect: handleClick, mode: mode, defaultOpenSumMenus: defaultOpenSumMenus }; var renderChildren = function () { return React.Children.map(children, function (child, index) { var childElement = child; var displayName = childElement.type.displayName; if (displayName === 'MenuItem' || displayName === 'SubMenu') { return React.cloneElement(childElement, { index: index.toString() }); } else { console.log('Warning: child is not a MenuItem'); } }); }; return (React.createElement("ul", { className: classes, style: style, "data-testid": 'test-menu' }, React.createElement(MenuContext.Provider, { value: passedContext }, renderChildren()))); }; Menu.defaultProps = { defaultIndex: '0', mode: 'horizontal', defaultOpenSumMenus: [] }; export default Menu;