UNPKG

@trellixio/roaster-coffee

Version:
84 lines (78 loc) 2.33 kB
'use strict'; var React = require('react'); var Modal = require('../Modal.js'); var events = require('../utils/events.js'); var reducer = require('../utils/reducer.js'); var useModal = require('../utils/useModal.js'); var ModalProviderFooter = require('./ModalProviderFooter.js'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { for (var k in e) { n[k] = e[k]; } } n.default = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); function ModalProvider({ children, modalProps: sharedProps }) { const [state, dispatch] = React__namespace.useReducer(reducer.modalReducer, { props: sharedProps }); const stateRef = React__namespace.useRef(state); stateRef.current = state; const openModal = React__namespace.useCallback( ({ ...props }) => { dispatch({ type: "OPEN", modal: { props } }); }, [dispatch] ); const closeModal = React__namespace.useCallback(() => { dispatch({ type: "CLOSE" }); }, [stateRef, dispatch]); const ctx = React__namespace.useMemo( () => ({ modal: state, openModal, closeModal }), [] ); events.useModalEvents({ openModal, closeModal }); const getModalProps = () => { const modalState = stateRef.current?.props; if (modalState) { const { modalProps: modalProps2, footerProps } = reducer.getModalProviderFooterProps(modalState); return { modalProps: { ...modalProps2 }, children: modalState.children, footer: /* @__PURE__ */ React__namespace.createElement(ModalProviderFooter.ModalProviderFooter, { ...footerProps, labels: modalState.labels || footerProps.labels }) }; } return { modalProps: {}, children: null }; }; const { modalProps, footer, children: modalChildren } = getModalProps(); return /* @__PURE__ */ React__namespace.createElement(useModal.ModalContextProvider, { value: ctx }, /* @__PURE__ */ React__namespace.createElement( Modal.Modal, { footer, ...sharedProps, ...modalProps, opened: modalChildren != null, onClose: () => closeModal() }, modalChildren ), children); } exports.ModalProvider = ModalProvider; //# sourceMappingURL=index.js.map