@trellixio/roaster-coffee
Version:
Beans' product component library
84 lines (78 loc) • 2.33 kB
JavaScript
;
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