@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
87 lines (86 loc) • 2.96 kB
JavaScript
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
import React from "react";
import { Dialog } from "./dialog";
import { destroyList } from "../../types";
import { render as reactRender, unmount } from "../../utils/render";
function ConfirmDialog(props) {
return /*#__PURE__*/ React.createElement(Dialog, props, props.content);
}
var confirm = function(config, renderFunc) {
var div = document.createElement('div');
document.body.appendChild(div);
var dialogConfig = _object_spread_props(_object_spread({}, config), {
visible: false
});
var render = function(props, callback) {
reactRender(/*#__PURE__*/ React.createElement(ConfirmDialog, _object_spread_props(_object_spread({}, props), {
onCancel: function() {
return onCancel();
}
})), div);
callback && callback();
};
var renderFunction = renderFunc || render;
var onConfirm = function() {
var _onConfirm = config.onConfirm || config.onConfirm;
var ret = _onConfirm === null || _onConfirm === void 0 ? void 0 : _onConfirm();
if (ret && ret.then) {
renderFunction(dialogConfig);
return ret.then(function() {
onCancel(true);
}, function(e) {
console.error(e);
renderFunction(dialogConfig);
});
}
if (!ret) {
onCancel(true);
}
};
// 如果是promise,那么处理loading和加载完成关闭
dialogConfig.onConfirm = onConfirm;
dialogConfig.visible = true;
renderFunction(dialogConfig);
var destroy = function() {
unmount(div);
if (div === null || div === void 0 ? void 0 : div.parentNode) {
div.parentNode.removeChild(div);
}
for(var i = 0; i < destroyList.length; i++){
var fn = destroyList[i];
if (fn === close) {
destroyList.splice(i, 1);
break;
}
}
};
var onCancel = function(confirm) {
!confirm && config.onCancel && config.onCancel();
dialogConfig.visible = false;
dialogConfig.onClose = function() {
config.onClose && config.onClose();
};
renderFunction(dialogConfig, function() {
destroy();
});
};
var update = function(newConfig) {
dialogConfig = _object_spread({}, dialogConfig, newConfig);
renderFunction(dialogConfig);
};
var close = function() {
dialogConfig.visible = false;
dialogConfig.onClose = function() {
config.onClose && config.onClose();
destroy();
};
renderFunction(dialogConfig);
};
destroyList.push(close);
return {
close: close,
update: update
};
};
export default confirm;