import React from 'react'; import PropTypes from 'prop-types'; import ReactModal from 'react-modal'; import Draggable from 'react-draggable'; import { useModal } from '../../contextProviders'; import Icon from '../Icon'; import Typography from '../Typography'; import './Modal.css'; if (typeof document !== 'undefined') { ReactModal.setAppElement(document.getElementById('root')); } const Modal = ({ closeButton, shouldCloseOnEsc, isOpen, title, onClose, children, shouldCloseOnOverlayClick, movable = false, containerDimensions = null, contentDimensions = null, }) => { const { hide } = useModal(); const handleClose = () => { hide(); }; const renderHeader = () => title && (
{title} {closeButton && ( )}
); const modalContent = ( <> {renderHeader()}
{children}
); return ( {movable ? (
{modalContent}
) : ( modalContent )}
); }; Modal.defaultProps = { shouldCloseOnEsc: true, shouldCloseOnOverlayClick: true, movable: false, containerDimensions: null, contentDimensions: null, }; Modal.propTypes = { closeButton: PropTypes.bool, shouldCloseOnEsc: PropTypes.bool, isOpen: PropTypes.bool, title: PropTypes.string, onClose: PropTypes.func, children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired, shouldCloseOnOverlayClick: PropTypes.bool, movable: PropTypes.bool, containerDimensions: PropTypes.string, contentDimensions: PropTypes.string, }; export default Modal;