Skip to content

Commit b8fb502

Browse files
authored
Merge pull request #1349 from getfider/fix-escape
Fixed stacking up of escape handlers.
2 parents 67ca548 + 0f30e32 commit b8fb502

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

public/components/common/Modal.tsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import "./Modal.scss"
22

3-
import React, { useEffect, useRef } from "react"
3+
import React, { useCallback, useEffect, useRef } from "react"
44
import ReactDOM from "react-dom"
55
import { classSet } from "@fider/services"
66
import { Icon } from "@fider/components"
@@ -24,6 +24,15 @@ interface ModalFooterProps {
2424
const ModalWindow: React.FunctionComponent<ModalWindowProps> = ({ size = "small", canClose = true, center = true, ...props }) => {
2525
const root = useRef<HTMLElement>(document.getElementById("root-modal"))
2626

27+
const keyDown = useCallback(
28+
(event: KeyboardEvent) => {
29+
if (event.code === "Escape") {
30+
close()
31+
}
32+
},
33+
[props.onClose]
34+
)
35+
2736
useEffect(() => {
2837
if (props.isOpen) {
2938
document.body.style.overflow = "hidden"
@@ -32,18 +41,16 @@ const ModalWindow: React.FunctionComponent<ModalWindowProps> = ({ size = "small"
3241
document.body.style.overflow = ""
3342
document.removeEventListener("keydown", keyDown, false)
3443
}
35-
}, [props.isOpen])
44+
45+
return () => {
46+
document.removeEventListener("keydown", keyDown, false)
47+
}
48+
}, [props.isOpen, keyDown])
3649

3750
const swallow = (evt: React.MouseEvent<HTMLDivElement>) => {
3851
evt.stopPropagation()
3952
}
4053

41-
const keyDown = (event: KeyboardEvent) => {
42-
if (event.code === "Escape") {
43-
close()
44-
}
45-
}
46-
4754
const close = () => {
4855
if (canClose) {
4956
props.onClose()

0 commit comments

Comments
 (0)