UNPKG

@sms-frontend/components

Version:

SMS Design React UI Library.

141 lines (140 loc) 5.5 kB
"use strict"; 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); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeConfig = void 0; var react_1 = __importDefault(require("react")); var react_dom_1 = __importDefault(require("react-dom")); var modal_1 = __importDefault(require("./modal")); var IconInfoCircleFill_1 = __importDefault(require("../../icon/react-icon-cjs/IconInfoCircleFill")); var IconCheckCircleFill_1 = __importDefault(require("../../icon/react-icon-cjs/IconCheckCircleFill")); var IconExclamationCircleFill_1 = __importDefault(require("../../icon/react-icon-cjs/IconExclamationCircleFill")); var IconCloseCircleFill_1 = __importDefault(require("../../icon/react-icon-cjs/IconCloseCircleFill")); var config_1 = require("./config"); function ConfirmModal(props) { var _a = (0, config_1.getModalConfig)(), prefixCls = _a.prefixCls, simple = _a.simple; return (react_1.default.createElement(modal_1.default, __assign({ prefixCls: prefixCls, simple: simple }, props), props.content)); } // 如果是消息提示型弹出框,那么只有确认按钮 var normalizeConfig = function (_config) { if (_config.isNotice) { var icon = _config.icon; if (!icon && icon !== null) { switch (_config.noticeType) { case 'info': icon = react_1.default.createElement(IconInfoCircleFill_1.default, null); break; case 'success': icon = react_1.default.createElement(IconCheckCircleFill_1.default, null); break; case 'warning': icon = react_1.default.createElement(IconExclamationCircleFill_1.default, null); break; case 'error': icon = react_1.default.createElement(IconCloseCircleFill_1.default, null); break; default: break; } } _config.title = (react_1.default.createElement("span", null, icon, _config.title)); _config.hideCancel = true; } else { _config.title = (react_1.default.createElement("span", null, _config.icon !== null && (_config.icon || react_1.default.createElement(IconExclamationCircleFill_1.default, null)), _config.title)); } return _config; }; exports.normalizeConfig = normalizeConfig; function confirm(config, renderFunc) { var div = document.createElement('div'); document.body.appendChild(div); function render(props) { react_dom_1.default.render(react_1.default.createElement(ConfirmModal, __assign({}, props, { onCancel: onCancel })), 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 = (0, exports.normalizeConfig)(modalConfig); modalConfig.visible = true; renderFunction(modalConfig); function destroy() { var unmountEle = react_dom_1.default.unmountComponentAtNode(div); if (unmountEle && div.parentNode) { div.parentNode.removeChild(div); } for (var i = 0; i < config_1.destroyList.length; i++) { var fn = config_1.destroyList[i]; if (fn === close) { config_1.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 = (0, exports.normalizeConfig)(modalConfig); renderFunction(modalConfig); } function close() { modalConfig.visible = false; modalConfig.afterClose = function () { config.afterClose && config.afterClose(); destroy(); }; renderFunction(modalConfig); } config_1.destroyList.push(close); return { close: close, update: update, }; } exports.default = confirm;