Skip to content

Commit c65cc04

Browse files
authored
Merge pull request #364 from avinxshKD/fix/modal-escape-focus-race
fix: modal escape key, timer race, scroll lock
2 parents 8551412 + 5b233b2 commit c65cc04

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

src/component/modals/ParentModal.jsx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect } from 'react';
1+
import React, { useState, useEffect, useRef } from 'react';
22
import ReactModal from 'react-modal';
33
import './parent-modal.css';
44

@@ -9,31 +9,34 @@ const Modal = ({
99
}) => {
1010
const [curClass, setCurClass] = useState('');
1111
const [isOpen, setIsOpen] = useState(ModelOpen);
12-
const [stid, setStid] = useState(null);
12+
const stid = useRef(null);
1313
useEffect(() => {
1414
if (ModelOpen === true) {
1515
setIsOpen(true);
1616
setCurClass('closing');
17-
clearTimeout(stid);
18-
setStid(setTimeout(() => {
17+
clearTimeout(stid.current);
18+
document.body.style.overflow = 'hidden';
19+
stid.current = setTimeout(() => {
1920
setIsOpen(true);
2021
setCurClass('');
21-
}, 20));
22+
}, 20);
2223
} else {
2324
setCurClass('closing');
24-
clearTimeout(stid);
25-
setStid(setTimeout(() => {
25+
clearTimeout(stid.current);
26+
document.body.style.overflow = '';
27+
stid.current = setTimeout(() => {
2628
setIsOpen(false);
27-
}, 400));
29+
}, 400);
2830
}
31+
return () => clearTimeout(stid.current);
2932
}, [ModelOpen]);
3033

3134
if (!isOpen) return '';
3235
return (
3336
<ReactModal
3437
isOpen={isOpen}
3538
contentLabel="onRequestClose Example"
36-
// onRequestClose={closeModal} // prevent modal from closing when clicked outside
39+
onRequestClose={closeModal}
3740
className="Modal"
3841
overlayClassName={`Overlay ${curClass}`}
3942
>

0 commit comments

Comments
 (0)