UNPKG

@clayui/modal

Version:
70 lines (69 loc) 1.86 kB
import React from "react"; import ClayModal from "./Modal"; import { useModal } from "./useModal"; var Action = /* @__PURE__ */ ((Action2) => { Action2["Close"] = "CLOSE"; Action2["Open"] = "OPEN"; return Action2; })(Action || {}); const initialState = { body: /* @__PURE__ */ React.createElement("div", null), footer: [], onClose: () => { }, visible: false }; function reducer(_state, action) { switch (action.type) { case 1: case "OPEN" /* Open */: return { ...action.payload, visible: true }; case 0: case "CLOSE" /* Close */: return initialState; default: throw new TypeError(); } } const Context = React.createContext([initialState, () => { }]); function ModalProvider({ children, spritemap }) { const [{ visible, ...otherState }, dispatch] = React.useReducer( reducer, initialState ); const { observer, onClose } = useModal({ onClose: () => dispatch({ type: "CLOSE" /* Close */ }) }); const { body, center, footer = [], header, size, status, url } = otherState; const [first, middle, last] = footer; const state = { ...otherState, onClose }; return /* @__PURE__ */ React.createElement(React.Fragment, null, visible && /* @__PURE__ */ React.createElement( ClayModal, { center, observer, size, spritemap, status }, header && /* @__PURE__ */ React.createElement(ClayModal.Header, null, header), /* @__PURE__ */ React.createElement(ClayModal.Body, { url }, body), !!footer.length && /* @__PURE__ */ React.createElement( ClayModal.Footer, { first, last, middle } ) ), /* @__PURE__ */ React.createElement(Context.Provider, { value: [state, dispatch] }, children)); } var Provider_default = ModalProvider; export { Context, Provider_default as default };