47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
var React = require('react');
|
|
var logger = require('../../util/logger');
|
|
var AppIcon = require('../common/app-icon.js');
|
|
|
|
var MIN_CLICK_DELTATIME = 2000;
|
|
|
|
module.exports = React.createClass({
|
|
|
|
getInitialState: function() {
|
|
return {
|
|
lastClickTimestamp: 0
|
|
};
|
|
},
|
|
|
|
propTypes: {
|
|
item: React.PropTypes.object.isRequired,
|
|
itemPath: React.PropTypes.oneOfType([
|
|
React.PropTypes.string,
|
|
React.PropTypes.arrayOf(React.PropTypes.number)
|
|
]).isRequired,
|
|
onItemClick: React.PropTypes.func.isRequired,
|
|
},
|
|
|
|
_onItemClick: function(evt) {
|
|
|
|
var clickDeltaTime = Date.now() - this.state.lastClickTimestamp;
|
|
if( clickDeltaTime < MIN_CLICK_DELTATIME ) {
|
|
logger.debug('Item "%s" clicked within %sms. No action.', this.props.itemPath, MIN_CLICK_DELTATIME);
|
|
return;
|
|
}
|
|
|
|
evt.preventDefault();
|
|
this.setState({ lastClickTimestamp: Date.now() });
|
|
this.props.onItemClick(evt, this.props.itemPath, this.props.item);
|
|
},
|
|
|
|
render: function() {
|
|
return (
|
|
<li className="app-item" onClick={this._onItemClick}>
|
|
<AppIcon icon={this.props.item.icon} theme={null} />
|
|
<span className="app-label">{this.props.item.label}</span>
|
|
</li>
|
|
);
|
|
}
|
|
|
|
});
|