@@ -3,6 +3,7 @@ var ReactDOM = require('react-dom');
33var ExecutionEnvironment = require ( 'exenv' ) ;
44var ModalPortal = React . createFactory ( require ( './ModalPortal' ) ) ;
55var ariaAppHider = require ( '../helpers/ariaAppHider' ) ;
6+ var refCount = require ( '../helpers/refCount' ) ;
67var elementClass = require ( 'element-class' ) ;
78var renderSubtreeIntoContainer = require ( "react-dom" ) . unstable_renderSubtreeIntoContainer ;
89var Assign = require ( 'lodash.assign' ) ;
@@ -61,12 +62,16 @@ var Modal = React.createClass({
6162 this . node = document . createElement ( 'div' ) ;
6263 this . node . className = this . props . portalClassName ;
6364
65+ if ( this . props . isOpen ) refCount . add ( this ) ;
66+
6467 var parent = getParentElement ( this . props . parentSelector ) ;
6568 parent . appendChild ( this . node ) ;
6669 this . renderPortal ( this . props ) ;
6770 } ,
6871
6972 componentWillReceiveProps : function ( newProps ) {
73+ if ( newProps . isOpen ) refCount . add ( this ) ;
74+ if ( ! newProps . isOpen ) refCount . remove ( this ) ;
7075 var currentParent = getParentElement ( this . props . parentSelector ) ;
7176 var newParent = getParentElement ( newProps . parentSelector ) ;
7277
@@ -79,6 +84,8 @@ var Modal = React.createClass({
7984 } ,
8085
8186 componentWillUnmount : function ( ) {
87+ refCount . remove ( this ) ;
88+
8289 if ( this . props . ariaHideApp ) {
8390 ariaAppHider . show ( this . props . appElement ) ;
8491 }
@@ -105,11 +112,13 @@ var Modal = React.createClass({
105112 ReactDOM . unmountComponentAtNode ( this . node ) ;
106113 var parent = getParentElement ( this . props . parentSelector ) ;
107114 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+ }
109118 } ,
110119
111120 renderPortal : function ( props ) {
112- if ( props . isOpen ) {
121+ if ( props . isOpen || refCount . count ( ) > 0 ) {
113122 elementClass ( document . body ) . add ( 'ReactModal__Body--open' ) ;
114123 } else {
115124 elementClass ( document . body ) . remove ( 'ReactModal__Body--open' ) ;
0 commit comments