@hooks-plus/use-modal
Version:
63 lines (61 loc) • 2.55 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var src_exports = {};
__export(src_exports, {
default: () => src_default
});
module.exports = __toCommonJS(src_exports);
var import_jsx_runtime = require("react/jsx-runtime");
var import_ahooks = require("ahooks");
var import_react = require("react");
var import_antd = require("antd");
function useModal(defaultRender, modalProps = {}) {
const [open, setOpen] = (0, import_react.useState)(false);
const [props, setProps] = (0, import_react.useState)({});
const mergedProps = { ...modalProps, ...props };
const { runAsync: okService, loading } = (0, import_ahooks.useRequest)(async (e) => {
await mergedProps.onOk?.(e);
}, {
manual: true
});
const onProxyCancel = async (e) => {
await mergedProps.onCancel?.(e);
setOpen(false);
};
const onProxyOk = (0, import_ahooks.useLockFn)(async (e) => {
await okService?.(e);
setOpen(false);
});
const { state, ...rest } = mergedProps;
const context = (0, import_jsx_runtime.jsx)(import_antd.Modal, { maskClosable: false, destroyOnClose: true, ...rest, confirmLoading: loading || mergedProps.confirmLoading, open, width: mergedProps.width || 520, onCancel: onProxyCancel, onOk: onProxyOk, children: mergedProps.children || defaultRender && (typeof defaultRender === "function" ? defaultRender(state, mergedProps) : defaultRender) });
const updateProps = (0, import_react.useCallback)((props2) => {
if (typeof props2 == "function") {
setProps((prevState) => {
const _props = props2(prevState);
setOpen(!!_props.open);
return { ..._props };
});
} else {
setOpen(!!props2.open);
setProps({ ...props2 });
}
}, [setProps, setOpen]);
return [context, updateProps, open];
}
var src_default = useModal;