const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const Button = require('stremio/common/Button'); const Icon = require('stremio-icons/dom'); const { Modal } = require('stremio-router'); const styles = require('./styles'); const ModalDialog = ({ className, title, buttons, children, dataset, onCloseRequest, ...props }) => { const onModalDialogContainerMouseDown = React.useCallback((event) => { event.nativeEvent.closeModalDialogPrevented = true; }, []); const closeButtonOnClick = React.useCallback((event) => { if (typeof onCloseRequest === 'function') { onCloseRequest({ type: 'close', dataset: dataset, reactEvent: event, nativeEvent: event.nativeEvent }); } }, [dataset, onCloseRequest]); React.useEffect(() => { const onCloseEvent = (event) => { if (!event.closeModalDialogPrevented && typeof onCloseRequest === 'function') { const closeEvent = { type: 'close', dataset: dataset, nativeEvent: event }; switch (event.type) { case 'resize': onCloseRequest(closeEvent); break; case 'keydown': if (event.key === 'Escape') { onCloseRequest(closeEvent); } break; case 'mousedown': if (event.target !== document.documentElement) { onCloseRequest(closeEvent); } break; } } }; window.addEventListener('resize', onCloseEvent); window.addEventListener('keydown', onCloseEvent); window.addEventListener('mousedown', onCloseEvent); return () => { window.removeEventListener('resize', onCloseEvent); window.removeEventListener('keydown', onCloseEvent); window.removeEventListener('mousedown', onCloseEvent); }; }, [dataset, onCloseRequest]); return (
{ typeof title === 'string' && title.length > 0 ?
{title}
: null }
{children}
{ Array.isArray(buttons) && buttons.length > 0 ?
{buttons.map(({ className, label, icon, props }, index) => ( ))}
: null }
); }; ModalDialog.propTypes = { className: PropTypes.string, title: PropTypes.string, buttons: PropTypes.arrayOf(PropTypes.shape({ className: PropTypes.string, label: PropTypes.string, icon: PropTypes.string, props: PropTypes.object })), children: PropTypes.oneOfType([ PropTypes.arrayOf(PropTypes.node), PropTypes.node ]), dataset: PropTypes.object, onCloseRequest: PropTypes.func }; module.exports = ModalDialog;