Spaces:
Running
Running
File size: 1,612 Bytes
6bcb42f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import classNames from 'classnames';
import PropTypes from 'prop-types';
import React from 'react';
import styles from './menu.css';
const MenuComponent = ({
className = '',
children,
componentRef,
place = 'right'
}) => (
<ul
className={classNames(
styles.menu,
className,
{
[styles.left]: place === 'left',
[styles.right]: place === 'right'
}
)}
ref={componentRef}
>
{children}
</ul>
);
MenuComponent.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
componentRef: PropTypes.func,
place: PropTypes.oneOf(['left', 'right'])
};
const MenuItem = ({
children,
className,
onClick
}) => (
<li
className={classNames(
styles.menuItem,
styles.hoverable,
className
)}
onClick={onClick}
>
{children}
</li>
);
MenuItem.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
onClick: PropTypes.func
};
const addDividerClassToFirstChild = (child, id) => (
child && React.cloneElement(child, {
className: classNames(
child.className,
{[styles.menuSection]: id === 0}
),
key: id
})
);
const MenuSection = ({children}) => (
<React.Fragment>{
React.Children.map(children, addDividerClassToFirstChild)
}</React.Fragment>
);
MenuSection.propTypes = {
children: PropTypes.node
};
export {
MenuComponent as default,
MenuItem,
MenuSection
};
|