UNPKG

preact-arco-design

Version:

Arco Design React UI Library.

179 lines (140 loc) 4.56 kB
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 "preact/compat"; import ReactDOM from "preact/compat"; 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 normalizeConfig(_config) { if (_config.isNotice) { var icon = _config.icon; if (!icon && icon !== null) { 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; } } _config.title = React.createElement("span", null, icon, _config.title); _config.hideCancel = true; } else { _config.title = React.createElement("span", null, _config.icon !== null && (_config.icon || React.createElement(IconExclamationCircleFill, null)), _config.title); } return _config; }; function confirm(config, renderFunc) { var div = document.createElement('div'); document.body.appendChild(div); var configProviderProps = getConfigProviderProps(); function render(props) { ReactDOM.render(React.createElement(ConfigProvider, __assign({}, configProviderProps), React.createElement(ConfirmModal, __assign({}, props, { onCancel: onCancel }))), div); } var renderFunction = renderFunc || render; var modalConfig = __assign(__assign({}, config), { visible: false }); var onOk = function onOk() { 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() { var unmountEle = ReactDOM.unmountComponentAtNode(div); if (unmountEle && 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;