@clayui/modal
Version:
ClayModal component
70 lines (69 loc) • 1.86 kB
JavaScript
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
};