56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import React from 'react';
|
|
import FontIcon from '../font_icon';
|
|
import ClassNames from 'classnames';
|
|
import Ripple from '../ripple';
|
|
import style from './style.menu_item';
|
|
|
|
class MenuItem extends React.Component {
|
|
static propTypes = {
|
|
caption: React.PropTypes.string.isRequired,
|
|
children: React.PropTypes.any,
|
|
className: React.PropTypes.string,
|
|
disabled: React.PropTypes.bool,
|
|
icon: React.PropTypes.oneOfType([
|
|
React.PropTypes.string,
|
|
React.PropTypes.element
|
|
]),
|
|
onClick: React.PropTypes.func,
|
|
selected: React.PropTypes.bool,
|
|
shortcut: React.PropTypes.string
|
|
};
|
|
|
|
static defaultProps = {
|
|
className: '',
|
|
disabled: false,
|
|
selected: false
|
|
};
|
|
|
|
handleClick = (event) => {
|
|
if (this.props.onClick && !this.props.disabled) {
|
|
this.props.onClick(event, this);
|
|
}
|
|
};
|
|
|
|
render () {
|
|
const {icon, caption, children, shortcut, selected, disabled, ...others} = this.props;
|
|
const className = ClassNames(style.root, {
|
|
[style.selected]: selected,
|
|
[style.disabled]: disabled
|
|
}, this.props.className);
|
|
|
|
return (
|
|
<li {...others} data-react-toolbox='menu-item' className={className} onClick={this.handleClick}>
|
|
{icon ? <FontIcon value={icon} className={style.icon}/> : null}
|
|
<span className={style.caption}>{caption}</span>
|
|
{shortcut ? <small className={style.shortcut}>{shortcut}</small> : null}
|
|
{children}
|
|
</li>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default Ripple({
|
|
className: style.ripple
|
|
})(MenuItem);
|
|
export {MenuItem as RawMenuItem};
|