Skip to content

Commit 1249eff

Browse files
committed
[fixed] OverlayTrigger passes onClick prop to child
1 parent eca9809 commit 1249eff

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/OverlayTrigger.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,16 @@ const OverlayTrigger = React.createClass({
9090
},
9191

9292
render() {
93+
let child = React.Children.only(this.props.children);
9394
if (this.props.trigger === 'manual') {
94-
return React.Children.only(this.props.children);
95+
return child;
9596
}
9697

9798
let props = {};
9899

100+
props.onClick = createChainedFunction(child.props.onClick, this.props.onClick);
99101
if (isOneOf('click', this.props.trigger)) {
100-
props.onClick = createChainedFunction(this.toggle, this.props.onClick);
102+
props.onClick = createChainedFunction(this.toggle, props.onClick);
101103
}
102104

103105
if (isOneOf('hover', this.props.trigger)) {
@@ -111,7 +113,7 @@ const OverlayTrigger = React.createClass({
111113
}
112114

113115
return cloneElement(
114-
React.Children.only(this.props.children),
116+
child,
115117
props
116118
);
117119
},

test/OverlayTriggerSpec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
import ReactTestUtils from 'react/lib/ReactTestUtils';
3+
import OverlayTrigger from '../src/OverlayTrigger';
4+
5+
describe('OverlayTrigger', function() {
6+
it('Should create OverlayTrigger element', function() {
7+
let instance = ReactTestUtils.renderIntoDocument(
8+
<OverlayTrigger overlay={<div>test</div>}>
9+
<button>button</button>
10+
</OverlayTrigger>
11+
);
12+
let overlayTrigger = instance.getDOMNode();
13+
assert.equal(overlayTrigger.nodeName, 'BUTTON');
14+
});
15+
16+
it('Should pass OverlayTrigger onClick prop to child', function() {
17+
let called = false;
18+
let callback = function() {
19+
called = true;
20+
};
21+
let instance = ReactTestUtils.renderIntoDocument(
22+
<OverlayTrigger overlay={<div>test</div>} onClick={callback}>
23+
<button>button</button>
24+
</OverlayTrigger>
25+
);
26+
let overlayTrigger = instance.getDOMNode();
27+
ReactTestUtils.Simulate.click(overlayTrigger);
28+
assert.equal(called, true);
29+
});
30+
});

0 commit comments

Comments
 (0)