/** * React component for a popup content container * * Takes in a prop for rendering the content inside the popup */ import React, { useEffect } from "react"; interface IProps { content: (props: T) => React.ReactElement; id: string; props: T; removePopup: (id: string) => void; } export function Popup(props: IProps): React.ReactElement { function keyDown(event: KeyboardEvent): void { if (event.key === "Escape") props.removePopup(props.id); } useEffect(() => { document.addEventListener("keydown", keyDown); return () => { document.removeEventListener("keydown", keyDown); }; }); return (
{React.createElement(props.content, props.props)}
); }