// Copyright (C) 2017-2023 Smart code 203358507 const React = require('react'); const { useTranslation } = require('react-i18next'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const { useRouteFocused, useModalsContainer } = require('stremio-router'); const { default: Button } = require('stremio/components/Button'); const { default: Icon } = require('@stremio/stremio-icons/react'); const { Modal } = require('stremio-router'); const styles = require('./styles'); const ModalDialog = ({ className, title, buttons, children, dataset, onCloseRequest, background, ...props }) => { const { t } = useTranslation(); const routeFocused = useRouteFocused(); const modalsContainer = useModalsContainer(); const modalContainerRef = React.useRef(null); const closeButtonOnClick = React.useCallback((event) => { if (typeof onCloseRequest === 'function') { onCloseRequest({ type: 'close', dataset: dataset, reactEvent: event, nativeEvent: event.nativeEvent }); } }, [dataset, onCloseRequest]); const onModalContainerMouseDown = React.useCallback((event) => { if (!event.nativeEvent.closeModalDialogPrevented && typeof onCloseRequest === 'function') { onCloseRequest({ type: 'close', dataset: dataset, reactEvent: event, nativeEvent: event.nativeEvent }); } }, [dataset, onCloseRequest]); const onModalDialogContainerMouseDown = React.useCallback((event) => { event.nativeEvent.closeModalDialogPrevented = true; }, []); React.useEffect(() => { const onKeyDown = (event) => { // its `-2` because focus lock render locking divs around its content if (event.code === 'Escape' && modalsContainer.childNodes[modalsContainer.childElementCount - 2] === modalContainerRef.current) { if (typeof onCloseRequest === 'function') { onCloseRequest({ type: 'close', dataset: dataset, nativeEvent: event }); } } }; if (routeFocused) { window.addEventListener('keydown', onKeyDown); } return () => { window.removeEventListener('keydown', onKeyDown); }; }, [routeFocused, 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, background: 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;