Skip to content

Commit 04db149

Browse files
robertklepclaydiffrient
authored andcommitted
[added] Propagate event on close request (#91)
1 parent 7f9bd95 commit 04db149

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

Diff for: lib/components/ModalPortal.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ var ModalPortal = module.exports = React.createClass({
118118
if (event.keyCode == 9 /*tab*/) scopeTab(this.refs.content, event);
119119
if (event.keyCode == 27 /*esc*/) {
120120
event.preventDefault();
121-
this.requestClose();
121+
this.requestClose(event);
122122
}
123123
},
124124

@@ -132,15 +132,15 @@ var ModalPortal = module.exports = React.createClass({
132132

133133
if (this.props.shouldCloseOnOverlayClick) {
134134
if (this.ownerHandlesClose())
135-
this.requestClose();
135+
this.requestClose(event);
136136
else
137137
this.focusContent();
138138
}
139139
},
140140

141-
requestClose: function() {
141+
requestClose: function(event) {
142142
if (this.ownerHandlesClose())
143-
this.props.onRequestClose();
143+
this.props.onRequestClose(event);
144144
},
145145

146146
ownerHandlesClose: function() {

Diff for: specs/Modal.spec.js

+38
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,44 @@ describe('Modal', function () {
272272
ok(hasPropagated)
273273
});
274274
});
275+
276+
it('verify event passing on overlay click', function() {
277+
var requestCloseCallback = sinon.spy();
278+
var modal = renderModal({
279+
isOpen: true,
280+
shouldCloseOnOverlayClick: true,
281+
onRequestClose: requestCloseCallback,
282+
});
283+
equal(modal.props.isOpen, true);
284+
var overlay = TestUtils.scryRenderedDOMComponentsWithClass(modal.portal, 'ReactModal__Overlay');
285+
equal(overlay.length, 1);
286+
Simulate.click(overlay[0]); // click the overlay
287+
ok(requestCloseCallback.called)
288+
// Check if event is passed to onRequestClose callback.
289+
var event = requestCloseCallback.getCall(0).args[0];
290+
ok(event);
291+
ok(event.constructor);
292+
equal(event.constructor.name, 'SyntheticEvent');
293+
});
294+
});
295+
296+
it('should close on Esc key event', function() {
297+
var requestCloseCallback = sinon.spy();
298+
var modal = renderModal({
299+
isOpen: true,
300+
shouldCloseOnOverlayClick: true,
301+
onRequestClose: requestCloseCallback,
302+
});
303+
equal(modal.props.isOpen, true);
304+
assert.doesNotThrow(function() {
305+
Simulate.keyDown(modal.portal.refs.content, {key: "Esc", keyCode: 27, which: 27})
306+
});
307+
ok(requestCloseCallback.called)
308+
// Check if event is passed to onRequestClose callback.
309+
var event = requestCloseCallback.getCall(0).args[0];
310+
ok(event);
311+
ok(event.constructor);
312+
equal(event.constructor.name, 'SyntheticEvent');
275313
});
276314

277315
//it('adds --before-close for animations', function() {

0 commit comments

Comments
 (0)