diff --git a/frontend/components/modals/Modal/Modal.tsx b/frontend/components/modals/Modal/Modal.tsx index bc56fdec04..2a7c532303 100644 --- a/frontend/components/modals/Modal/Modal.tsx +++ b/frontend/components/modals/Modal/Modal.tsx @@ -1,4 +1,4 @@ -import React, { Component } from "react"; +import React, { useEffect } from "react"; import classnames from "classnames"; const baseClass = "modal"; @@ -10,28 +10,39 @@ interface IModalProps { className?: string; } -class Modal extends Component { - render(): JSX.Element { - const { children, className, onExit, title } = this.props; - const modalContainerClassName = classnames( - `${baseClass}__modal_container`, - className - ); +const Modal = ({ children, onExit, title, className }: IModalProps) => { + useEffect(() => { + const closeWithEscapeKey = (e: KeyboardEvent) => { + if (e.key === "Escape") { + onExit(); + } + }; - return ( -
-
-
- {title} -
-
+ document.addEventListener("keydown", closeWithEscapeKey); + + return () => { + document.removeEventListener("keydown", closeWithEscapeKey); + }; + }, []); + + const modalContainerClassName = classnames( + `${baseClass}__modal_container`, + className + ); + + return ( +
+
+
+ {title} +
+
-
{children}
+
{children}
- ); - } -} +
+ ); +}; export default Modal;