import * as React from 'react'; import { createPortal } from 'react-dom'; import { ConfirmationDialog, Props as ConfirmationDialogProps, } from './ConfirmationDialog'; import { LocalizerType } from '../types/Util'; export type OwnProps = { readonly i18n: LocalizerType; readonly onClose: () => unknown; }; export type Props = OwnProps & ConfirmationDialogProps; export const ConfirmationModal = React.memo( // tslint:disable-next-line max-func-body-length ({ i18n, onClose, children, ...rest }: Props) => { const [root, setRoot] = React.useState(null); React.useEffect(() => { const div = document.createElement('div'); document.body.appendChild(div); setRoot(div); return () => { document.body.removeChild(div); setRoot(null); }; }, []); React.useEffect(() => { const handler = (event: KeyboardEvent) => { if (event.key === 'Escape') { onClose(); event.preventDefault(); event.stopPropagation(); } }; document.addEventListener('keydown', handler); return () => { document.removeEventListener('keydown', handler); }; }, [onClose]); const handleCancel = React.useCallback( (e: React.MouseEvent) => { if (e.target === e.currentTarget) { onClose(); } }, [onClose] ); return root ? createPortal(
{children}
, root ) : null; } );