Skip to content

Instantly share code, notes, and snippets.

@brigand
Forked from slorber/gist:bb38b4d482818ccbfed7
Last active August 29, 2015 14:13
Show Gist options
  • Save brigand/c648e589b34b1d023ec5 to your computer and use it in GitHub Desktop.
Save brigand/c648e589b34b1d023ec5 to your computer and use it in GitHub Desktop.
var WithStopPropagation = React.createClass({
propTypes: {
children: React.PropTypes.node.isRequired,
eventNames: React.PropTypes.arrayOf(React.PropTypes.string).isRequired
},
eventNameToReactEventName: function(name){
return "on" + name[0].toUpperCase() + name.slice(1);
},
makeEventHandlers: function(names){
var stopProp = function(e){ e.stopPropagation(); },
return names.map(this.eventNameToReactEventName)
.reduce(function(props, name){ props[name] = stopProp; return props }, {});
}
render: function() {
return React.createElement('div', this.makeEventHandlers(this.props.eventNames),
React.Children.only(this.props.children));
}
});
<WithStopPropagation eventNames={["click"]}>
<li className="file-attachment">
<div className="closeIcon" onClick={this.props.onClickOnCloseIcon}><CloseIcon/></div>
<a className="url" target="_blank" href={url}>
<div className="infos"><span className="name">{name}</span></div>
<div className="preview"><AttachmentIcon/></div>
</a>
</li>
</WithStopPropagation>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment