@@ -96,15 +96,21 @@ Modal.propTypes = {
96
96
function hideModal ( modalRef ) {
97
97
const body = document . querySelector ( 'body' ) ;
98
98
99
- body . classList . remove ( 'modal-open' ) ;
100
99
modalRef . current . style . display = 'none' ;
101
100
modalRef . current . classList . remove ( 'show' ) ;
101
+
102
+ if ( getModals ( ) . length === 0 ) {
103
+ hideModalBackdrop ( ) ;
104
+ body . classList . remove ( 'modal-open' ) ;
105
+ }
102
106
}
103
107
104
108
function showModal ( modalRef ) {
105
109
const body = document . querySelector ( 'body' ) ;
106
110
107
111
body . classList . add ( 'modal-open' ) ;
112
+ showModalBackdrop ( ) ;
113
+
108
114
modalRef . current . style . display = 'block' ;
109
115
modalRef . current . classList . add ( 'show' ) ;
110
116
modalRef . current . focus ( ) ;
@@ -117,3 +123,36 @@ function renderObjectOrFunction(content, params) {
117
123
118
124
return content ;
119
125
}
126
+
127
+ function showModalBackdrop ( ) {
128
+ const backdrop = getModalBackdrop ( ) ;
129
+
130
+ backdrop . classList . remove ( 'd-none' ) ;
131
+ }
132
+
133
+ function hideModalBackdrop ( ) {
134
+ const backdrop = getModalBackdrop ( ) ;
135
+
136
+ backdrop . classList . add ( 'd-none' ) ;
137
+ }
138
+
139
+ function getModalBackdrop ( ) {
140
+ const body = document . querySelector ( 'body' ) ;
141
+ let backdrop = document . querySelector ( '.modal-backdrop' ) ;
142
+
143
+ if ( ! backdrop ) {
144
+ backdrop = document . createElement ( 'div' ) ;
145
+
146
+ backdrop . classList . add ( 'modal-backdrop' ) ;
147
+ backdrop . classList . add ( 'fade' ) ;
148
+ backdrop . classList . add ( 'show' ) ;
149
+ backdrop . classList . add ( 'd-none' ) ;
150
+ body . appendChild ( backdrop ) ;
151
+ }
152
+
153
+ return backdrop ;
154
+ }
155
+
156
+ function getModals ( ) {
157
+ return document . querySelectorAll ( '#modal-portals .modal.show' ) ;
158
+ }
0 commit comments