1
1
import "./Modal.scss"
2
2
3
- import React , { useEffect , useRef } from "react"
3
+ import React , { useCallback , useEffect , useRef } from "react"
4
4
import ReactDOM from "react-dom"
5
5
import { classSet } from "@fider/services"
6
6
import { Icon } from "@fider/components"
@@ -24,6 +24,15 @@ interface ModalFooterProps {
24
24
const ModalWindow : React . FunctionComponent < ModalWindowProps > = ( { size = "small" , canClose = true , center = true , ...props } ) => {
25
25
const root = useRef < HTMLElement > ( document . getElementById ( "root-modal" ) )
26
26
27
+ const keyDown = useCallback (
28
+ ( event : KeyboardEvent ) => {
29
+ if ( event . code === "Escape" ) {
30
+ close ( )
31
+ }
32
+ } ,
33
+ [ props . onClose ]
34
+ )
35
+
27
36
useEffect ( ( ) => {
28
37
if ( props . isOpen ) {
29
38
document . body . style . overflow = "hidden"
@@ -32,18 +41,16 @@ const ModalWindow: React.FunctionComponent<ModalWindowProps> = ({ size = "small"
32
41
document . body . style . overflow = ""
33
42
document . removeEventListener ( "keydown" , keyDown , false )
34
43
}
35
- } , [ props . isOpen ] )
44
+
45
+ return ( ) => {
46
+ document . removeEventListener ( "keydown" , keyDown , false )
47
+ }
48
+ } , [ props . isOpen , keyDown ] )
36
49
37
50
const swallow = ( evt : React . MouseEvent < HTMLDivElement > ) => {
38
51
evt . stopPropagation ( )
39
52
}
40
53
41
- const keyDown = ( event : KeyboardEvent ) => {
42
- if ( event . code === "Escape" ) {
43
- close ( )
44
- }
45
- }
46
-
47
54
const close = ( ) => {
48
55
if ( canClose ) {
49
56
props . onClose ( )
0 commit comments