dora-ui
Version:
A React.js Mobile UI Library
111 lines (88 loc) • 2.62 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _reactDom = _interopRequireDefault(require("react-dom"));
var _content = _interopRequireDefault(require("./content"));
var _config = require("./config");
var _utils = require("../utils");
// 容器节点
var container; // 当前正在展示的Toast类型
var currentToastType; // 是否存在正在展示的toast
var isShowing = false;
/**
* 创建容器节点
*/
var createContainer = function createContainer() {
container = document.createElement('div');
container.className = 'dora-toast-container';
document.body.appendChild(container);
};
/**
* 销毁toast
*/
var destroy = function destroy(type, onClose) {
if (container && (type === currentToastType || typeof type === 'undefined')) {
_reactDom.default.unmountComponentAtNode(container);
}
isShowing = false;
typeof onClose === 'function' && onClose();
};
/**
* 核心展示方法
* @param type toast类型
* @param content toast内容
* @param duration 持续时间
* @param onClose 关闭后回调方法
* @param mask 是否展示mask
*/
var show = function show(type, content, duration, onClose, mask) {
if (!_utils.isBrowser || isShowing) return;
isShowing = true;
currentToastType = type;
!container && createContainer();
_reactDom.default.render(_react.default.createElement(_content.default, {
container: container,
type: type,
content: content,
mask: mask,
duration: duration,
onClose: function (_onClose) {
function onClose() {
return _onClose.apply(this, arguments);
}
onClose.toString = function () {
return _onClose.toString();
};
return onClose;
}(function () {
destroy(currentToastType, onClose);
})
}), container);
};
/**
* 生成固定类型toast方法
* @param type toast类型
*/
var createFn = function createFn(type) {
var fn = function fn(content, duration, onClose, mask) {
show(type, content, duration, onClose, mask);
};
return fn;
};
var Toast = {
useIcons: _content.default.useIcons,
success: createFn(_config.TOAST_TYPES.SUCCESS),
error: createFn(_config.TOAST_TYPES.ERROR),
info: createFn(_config.TOAST_TYPES.INFO),
loading: createFn(_config.TOAST_TYPES.LOADING),
loaded: function loaded() {
destroy(_config.TOAST_TYPES.LOADING);
},
destroy: destroy
};
var _default = Toast;
exports.default = _default;