/** * Close button for popup dialog boxes * It creates an event handler such that pressing Esc will close the binded popup * * Should only be used in other React components, otherwise it may not be properly * unmounted */ import * as React from "react"; import * as ReactDOM from "react-dom"; import { removeElement } from "../../../utils/uiHelpers/removeElement"; import { IPopupButtonProps, PopupButton } from "./PopupButton"; export interface IPopupCloseButtonProps extends IPopupButtonProps { class?: string; popup: HTMLElement | string; style?: any; text: string; onClose: () => void; } export class PopupCloseButton extends PopupButton { constructor(props: IPopupCloseButtonProps) { super(props); this.closePopup = this.closePopup.bind(this); } closePopup(): void { if(this.props.onClose) this.props.onClose(); let popup: HTMLElement | null; if (typeof this.props.popup === "string") { popup = document.getElementById(this.props.popup); } else { popup = this.props.popup; } // TODO Check if this is okay? This is essentially calling to unmount a // parent component if (popup instanceof HTMLElement) { // Removes everything inside the wrapper container ReactDOM.unmountComponentAtNode(popup); removeElement(popup); // Removes the wrapper container } } render(): React.ReactNode { const className = this.props.class ? this.props.class : "std-button"; return ( ) } }