This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
outline/frontend/components/DropdownMenu/DropdownMenu.js
2016-08-23 20:39:31 -07:00

80 lines
1.5 KiB
JavaScript

import React from 'react';
import { browserHistory } from 'react-router';
import styles from './DropdownMenu.scss';
class MenuItem extends React.Component {
onClick = () => {
if (this.props.to) {
browserHistory.push(this.props.to);
} else {
this.props.onClick();
}
}
render() {
return (
<div
className={ styles.menuItem }
onClick={ this.onClick }
>{ this.props.children }</div>
);
}
}
MenuItem.propTypes = {
onClick: React.PropTypes.func,
to: React.PropTypes.string,
children: React.PropTypes.node.isRequired,
};
//
class DropdownMenu extends React.Component {
static propTypes = {
label: React.PropTypes.node.isRequired,
children: React.PropTypes.node.isRequired,
}
state = {
menuVisible: false,
}
onMouseEnter = () => {
this.setState({ menuVisible: true });
}
onMouseLeave = () => {
this.setState({ menuVisible: false });
}
onClick = () => {
this.setState({ menuVisible: !this.state.menuVisible });
}
render() {
return (
<div
className={ styles.menuContainer }
onMouseEnter={ this.onMouseEnter }
onMouseLeave={ this.onMouseLeave }
>
<div className={ styles.label } onClick={ this.onClick }>
{ this.props.label }
</div>
{ this.state.menuVisible ? (
<div className={ styles.menu }>
{ this.props.children }
</div>
) : null }
</div>
);
}
};
export default DropdownMenu;
export {
MenuItem,
}