diff --git a/src/addons/TransitionablePortal/TransitionablePortal.js b/src/addons/TransitionablePortal/TransitionablePortal.js
index 9ab8d8b60d..cdb44c48ec 100644
--- a/src/addons/TransitionablePortal/TransitionablePortal.js
+++ b/src/addons/TransitionablePortal/TransitionablePortal.js
@@ -58,9 +58,17 @@ export default class TransitionablePortal extends Component {
handleTransitionHide = (nothing, data) => {
debug('handleTransitionHide()')
const { portalOpen } = this.state
+ const { open } = this.props
this.setState({ transitionVisible: false })
- _.invoke(this.props, 'onClose', null, { ...data, portalOpen: false, transitionVisible: false })
+
+ if (_.isUndefined(open) || open) {
+ _.invoke(this.props, 'onClose', null, {
+ ...data,
+ portalOpen: false,
+ transitionVisible: false,
+ })
+ }
_.invoke(this.props, 'onHide', null, { ...data, portalOpen, transitionVisible: false })
}
diff --git a/test/specs/addons/TransitionablePortal/TransitionablePortal-test.js b/test/specs/addons/TransitionablePortal/TransitionablePortal-test.js
index 79d9f23a63..56ef7d7bc2 100644
--- a/test/specs/addons/TransitionablePortal/TransitionablePortal-test.js
+++ b/test/specs/addons/TransitionablePortal/TransitionablePortal-test.js
@@ -83,6 +83,17 @@ describe('TransitionablePortal', () => {
}, done)
})
+ it('is not called if portal already closed ', () => {
+ const onClose = sandbox.spy()
+
+ wrapperMount(
+ ,
+ )
+
+ wrapper.setProps({ open: false })
+ onClose.should.not.have.been.called()
+ })
+
it('changes `portalOpen` to false', () => {
wrapperMount(