forked from vkbansal/react-contextmenu
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
78 lines (67 loc) · 2.15 KB
/
Copy pathindex.js
File metadata and controls
78 lines (67 loc) · 2.15 KB
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
import React from "react";
import classnames from "classnames";
import MenuWrapper from "./wrapper";
const menuStyles = {
position: "relative",
zIndex: "auto"
};
let SubMenu = React.createClass({
displayName: "SubMenu",
propTypes: {
title: React.PropTypes.string.isRequired,
disabled: React.PropTypes.bool,
hoverDelay: React.PropTypes.number
},
getDefaultProps() {
return {
hoverDelay: 500
};
},
getInitialState() {
return {
visible: false
};
},
shouldComponentUpdate(nextProps, nextState) {
return this.state.isVisible !== nextState.visible;
},
componentWillUnmount() {
if (this.opentimer) clearTimeout(this.opentimer);
if (this.closetimer) clearTimeout(this.closetimer);
},
handleClick(e) {
e.preventDefault();
},
handleMouseEnter() {
if (this.closetimer) clearTimeout(this.closetimer);
if (this.props.disabled || this.state.visible) return;
this.opentimer = setTimeout(() => this.setState({visible: true}), this.props.hoverDelay);
},
handleMouseLeave() {
if (this.opentimer) clearTimeout(this.opentimer);
if (!this.state.visible) return;
this.closetimer = setTimeout(() => this.setState({visible: false}), this.props.hoverDelay);
},
render() {
let { disabled, children, title } = this.props,
{ visible } = this.state;
const classes = classnames({
"react-context-menu-link": true,
disabled,
active: visible
}),
menuClasses = "react-context-menu-item submenu";
return (
<div ref={(c) => (this.item = c)} className={menuClasses} style={menuStyles}
onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
<a href="#" className={classes} onClick={this.handleClick}>
{title}
</a>
<MenuWrapper visible={visible}>
{children}
</MenuWrapper>
</div>
);
}
});
export default SubMenu;