pitaya-launcher/src/components/launcher/app-item.js

47 lines
1.2 KiB
JavaScript
Raw Normal View History

2015-08-27 22:52:30 +02:00
var React = require('react');
var logger = require('../../util/logger');
var AppIcon = require('../common/app-icon.js');
2015-08-27 22:52:30 +02:00
var MIN_CLICK_DELTATIME = 2000;
2015-08-27 22:52:30 +02:00
module.exports = React.createClass({
getInitialState: function() {
return {
lastClickTimestamp: 0
};
},
2015-08-27 22:52:30 +02:00
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;
}
2015-08-27 22:52:30 +02:00
evt.preventDefault();
this.setState({ lastClickTimestamp: Date.now() });
2015-08-27 22:52:30 +02:00
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} />
2015-08-27 22:52:30 +02:00
<span className="app-label">{this.props.item.label}</span>
</li>
);
}
});