@@ -3,6 +3,7 @@ var ReactDOM = require('react-dom');
3
3
var ExecutionEnvironment = require ( 'exenv' ) ;
4
4
var ModalPortal = React . createFactory ( require ( './ModalPortal' ) ) ;
5
5
var ariaAppHider = require ( '../helpers/ariaAppHider' ) ;
6
+ var refCount = require ( '../helpers/refCount' ) ;
6
7
var elementClass = require ( 'element-class' ) ;
7
8
var renderSubtreeIntoContainer = require ( "react-dom" ) . unstable_renderSubtreeIntoContainer ;
8
9
var Assign = require ( 'lodash.assign' ) ;
@@ -61,12 +62,16 @@ var Modal = React.createClass({
61
62
this . node = document . createElement ( 'div' ) ;
62
63
this . node . className = this . props . portalClassName ;
63
64
65
+ if ( this . props . isOpen ) refCount . add ( this ) ;
66
+
64
67
var parent = getParentElement ( this . props . parentSelector ) ;
65
68
parent . appendChild ( this . node ) ;
66
69
this . renderPortal ( this . props ) ;
67
70
} ,
68
71
69
72
componentWillReceiveProps : function ( newProps ) {
73
+ if ( newProps . isOpen ) refCount . add ( this ) ;
74
+ if ( ! newProps . isOpen ) refCount . remove ( this ) ;
70
75
var currentParent = getParentElement ( this . props . parentSelector ) ;
71
76
var newParent = getParentElement ( newProps . parentSelector ) ;
72
77
@@ -79,6 +84,8 @@ var Modal = React.createClass({
79
84
} ,
80
85
81
86
componentWillUnmount : function ( ) {
87
+ refCount . remove ( this ) ;
88
+
82
89
if ( this . props . ariaHideApp ) {
83
90
ariaAppHider . show ( this . props . appElement ) ;
84
91
}
@@ -105,11 +112,13 @@ var Modal = React.createClass({
105
112
ReactDOM . unmountComponentAtNode ( this . node ) ;
106
113
var parent = getParentElement ( this . props . parentSelector ) ;
107
114
parent . removeChild ( this . node ) ;
108
- elementClass ( document . body ) . remove ( 'ReactModal__Body--open' ) ;
115
+ if ( refCount . count ( ) === 0 ) {
116
+ elementClass ( document . body ) . remove ( 'ReactModal__Body--open' ) ;
117
+ }
109
118
} ,
110
119
111
120
renderPortal : function ( props ) {
112
- if ( props . isOpen ) {
121
+ if ( props . isOpen || refCount . count ( ) > 0 ) {
113
122
elementClass ( document . body ) . add ( 'ReactModal__Body--open' ) ;
114
123
} else {
115
124
elementClass ( document . body ) . remove ( 'ReactModal__Body--open' ) ;
0 commit comments