@@ -16,12 +16,10 @@ const createPortal = isReact16
16
16
: ReactDOM . unstable_renderSubtreeIntoContainer ;
17
17
18
18
function getParentElement ( parentSelector ) {
19
- return parentSelector ( ) || Modal . defaultProps . parentSelector ;
19
+ return parentSelector ( ) ;
20
20
}
21
21
22
22
class Modal extends Component {
23
- state = Object . assign ( { } , Modal . defaultProps ) ;
24
-
25
23
static setAppElement ( element ) {
26
24
ariaAppHider . setElement ( element ) ;
27
25
}
@@ -122,45 +120,31 @@ class Modal extends Component {
122
120
! isReact16 && this . renderPortal ( this . props ) ;
123
121
}
124
122
125
- static getDerivedStateFromProps ( newProps , prevState ) {
126
- if ( ! canUseDOM ) return null ;
127
- const { isOpen } = newProps ;
128
- // Stop unnecessary renders if modal is remaining closed
129
- if ( prevState && ! prevState . isOpen && ! isOpen ) return null ;
130
-
131
- const currentParent = getParentElement ( prevState . parentSelector ) ;
132
- const newParent = getParentElement ( newProps . parentSelector ) ;
123
+ getSnapshotBeforeUpdate ( prevProps ) {
124
+ const prevParent = getParentElement ( prevProps . parentSelector ) ;
125
+ const nextParent = getParentElement ( this . props . parentSelector ) ;
126
+ return { prevParent, nextParent } ;
127
+ }
133
128
134
- const enumeratedState = {
135
- isOpen : newProps . isOpen ,
136
- parentSelector : newProps . parentSelector ,
137
- portalClassName : newProps . portalClassName
138
- } ;
129
+ componentDidUpdate ( prevProps , _ , snapshot ) {
130
+ if ( ! canUseDOM ) return ;
131
+ const { isOpen, portalClassName } = this . props ;
139
132
140
- if ( newParent !== currentParent ) {
141
- currentParent . removeChild ( this . node ) ;
142
- newParent . appendChild ( this . node ) ;
133
+ if ( prevProps . portalClassName !== portalClassName ) {
134
+ this . node . className = portalClassName ;
143
135
}
144
136
145
- const newState = Object . assign ( prevState , enumeratedState ) ;
146
- ! isReact16 && this . renderPortal ( newProps ) ;
147
- return newState ;
148
- }
137
+ // Stop unnecessary renders if modal is remaining closed
138
+ if ( ! prevProps . isOpen && ! isOpen ) return ;
149
139
150
- getSnapshotBeforeUpdate ( prevProps , prevState ) {
151
- if ( ! canUseDOM ) {
152
- return null ;
153
- } else {
154
- this . node . className = prevState . portalClassName ;
155
- return prevState . portalClassName ;
140
+ const { prevParent, nextParent } = snapshot ;
141
+ if ( nextParent !== prevParent ) {
142
+ prevParent . removeChild ( this . node ) ;
143
+ nextParent . appendChild ( this . node ) ;
156
144
}
157
- }
158
145
159
- /*eslint-disable no-unused-vars*/
160
- componentDidUpdate ( prevProps , prevState ) {
161
- // Just to satisfy polyfilling
146
+ ! isReact16 && this . renderPortal ( this . props ) ;
162
147
}
163
- /*eslint-enable no-unused-vars*/
164
148
165
149
componentWillUnmount ( ) {
166
150
if ( ! canUseDOM || ! this . node || ! this . portal ) return ;
0 commit comments