fleet/frontend/components/Modal/Modal.tsx
Martavis Parker cfb1474eb8
Auth Redux Removal (#4924)
* all login methods no longer use redux

* removed redux from registration

* redirect user from registration

* removed redux from sso invite

* removed redundant component

* refactored user settings page

* removed redux from logout

* cleaned up unused redux calls

* lint fixes

* removed test

* removed old config interface

* fixed registration bug

* team permission fix

* removed remaining redux references from pages - #4436

* better way to set config
2022-04-07 09:08:00 -07:00

57 lines
1.3 KiB
TypeScript

import React, { useContext, useEffect } from "react";
import classnames from "classnames";
import { NotificationContext } from "context/notification";
const baseClass = "modal";
export interface IModalProps {
children: JSX.Element;
onExit: () => void;
title: string | JSX.Element;
className?: string;
}
const Modal = ({
children,
onExit,
title,
className,
}: IModalProps): JSX.Element => {
const { hideFlash } = useContext(NotificationContext);
useEffect(() => {
const closeWithEscapeKey = (e: KeyboardEvent) => {
if (e.key === "Escape") {
onExit();
}
};
hideFlash();
document.addEventListener("keydown", closeWithEscapeKey);
return () => {
document.removeEventListener("keydown", closeWithEscapeKey);
};
}, []);
const modalContainerClassName = classnames(
`${baseClass}__modal_container`,
className
);
return (
<div className={`${baseClass}__background`}>
<div className={modalContainerClassName}>
<div className={`${baseClass}__header`}>
<span>{title}</span>
<div className={`${baseClass}__ex`}>
<button className="button button--unstyled" onClick={onExit} />
</div>
</div>
<div className={`${baseClass}__content`}>{children}</div>
</div>
</div>
);
};
export default Modal;