@arco-design/web-react
Version:
Arco Design React UI Library.
143 lines (142 loc) • 5.13 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import React from 'react';
import { render as ReactDOMRender } from '../_util/react-dom';
import Modal from './modal';
import IconInfoCircleFill from '../../icon/react-icon/IconInfoCircleFill';
import IconCheckCircleFill from '../../icon/react-icon/IconCheckCircleFill';
import IconExclamationCircleFill from '../../icon/react-icon/IconExclamationCircleFill';
import IconCloseCircleFill from '../../icon/react-icon/IconCloseCircleFill';
import { getModalConfig, destroyList, getConfigProviderProps } from './config';
import ConfigProvider from '../ConfigProvider';
function ConfirmModal(props) {
var _a = getModalConfig(), prefixCls = _a.prefixCls, simple = _a.simple;
return (React.createElement(Modal, __assign({ prefixCls: prefixCls, simple: simple }, props), props.content));
}
// 如果是消息提示型弹出框,那么只有确认按钮
export var normalizeConfig = function (_config) {
var icon = _config.icon;
if (!icon && icon !== null) {
icon = React.createElement(IconExclamationCircleFill, null);
if (_config.isNotice) {
switch (_config.noticeType) {
case 'info':
icon = React.createElement(IconInfoCircleFill, null);
break;
case 'success':
icon = React.createElement(IconCheckCircleFill, null);
break;
case 'warning':
icon = React.createElement(IconExclamationCircleFill, null);
break;
case 'error':
icon = React.createElement(IconCloseCircleFill, null);
break;
default:
break;
}
}
}
if (_config.isNotice) {
_config.hideCancel = true;
}
_config.title =
icon === null && _config.title === null ? null : (React.createElement("span", null,
icon,
_config.title));
return _config;
};
function confirm(config, renderFunc) {
var root;
var div = document.createElement('div');
document.body.appendChild(div);
var configProviderProps = getConfigProviderProps();
function render(props) {
var dom = (React.createElement(ConfigProvider, __assign({}, configProviderProps),
React.createElement(ConfirmModal, __assign({}, props, { onCancel: onCancel }))));
if (root) {
root.render(dom);
}
else {
root = ReactDOMRender(dom, div);
}
}
var renderFunction = renderFunc || render;
var modalConfig = __assign(__assign({}, config), { visible: false });
var onOk = function () {
var ret;
var _onOk = config.onOk || config.onConfirm;
if (_onOk) {
ret = _onOk();
}
if (ret && ret.then) {
modalConfig.confirmLoading = true;
renderFunction(modalConfig);
ret.then(function () {
onCancel(true);
}, function (e) {
console.error(e);
modalConfig.confirmLoading = false;
renderFunction(modalConfig);
});
}
if (!ret) {
onCancel(true);
}
};
// 如果是promise,那么处理loading和加载完成关闭
modalConfig.onOk = onOk;
modalConfig = normalizeConfig(modalConfig);
modalConfig.visible = true;
renderFunction(modalConfig);
function destroy() {
root = root === null || root === void 0 ? void 0 : root._unmount();
if (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;
}
}
}
function onCancel(isOnOk) {
!isOnOk && config.onCancel && config.onCancel();
modalConfig.visible = false;
modalConfig.afterClose = function () {
config.afterClose && config.afterClose();
destroy();
};
renderFunction(modalConfig);
}
function update(newConfig) {
modalConfig = __assign(__assign(__assign({}, modalConfig), { title: config.title }), newConfig);
modalConfig = normalizeConfig(modalConfig);
renderFunction(modalConfig);
}
function close() {
modalConfig.visible = false;
modalConfig.afterClose = function () {
config.afterClose && config.afterClose();
destroy();
};
renderFunction(modalConfig);
}
destroyList.push(close);
return {
close: close,
update: update,
};
}
export default confirm;