zent
Version:
一套前端设计语言和基于React的实现
126 lines (84 loc) • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
exports.closeDialog = closeDialog;
exports['default'] = openDialog;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _noop = require('lodash/noop');
var _noop2 = _interopRequireDefault(_noop);
var _partial = require('lodash/partial');
var _partial2 = _interopRequireDefault(_partial);
var _isBrowser = require('../utils/isBrowser');
var _isBrowser2 = _interopRequireDefault(_isBrowser);
var _uniqueId = require('lodash/uniqueId');
var _uniqueId2 = _interopRequireDefault(_uniqueId);
var _Dialog = require('./Dialog');
var _Dialog2 = _interopRequireDefault(_Dialog);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var dialogInstanceMap = {};
function ensureUniqDialogInstance(dialogId) {
if (dialogInstanceMap[dialogId]) {
throw new Error('Duplicate dialog id found: ' + dialogId);
}
}
function addDialogInstance(dialogId, dialog) {
dialogInstanceMap[dialogId] = dialog;
}
function closeDialog(dialogId) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var dialog = dialogInstanceMap[dialogId];
if (!dialog) {
return;
}
delete dialogInstanceMap[dialogId];
var onClose = dialog.onClose,
container = dialog.container;
var _options$triggerOnClo = options.triggerOnClose,
triggerOnClose = _options$triggerOnClo === undefined ? true : _options$triggerOnClo;
if (triggerOnClose && onClose) {
onClose();
}
_reactDom2['default'].unmountComponentAtNode(container);
}
/*
打开一个dialog,返回值是一个用来关闭dialog的函数。
*/
function openDialog() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!_isBrowser2['default']) return _noop2['default'];
var oldOnClose = options.onClose,
ref = options.ref,
_options$dialogId = options.dialogId,
dialogId = _options$dialogId === undefined ? (0, _uniqueId2['default'])('__zent-dialog__') : _options$dialogId,
parentComponent = options.parentComponent;
ensureUniqDialogInstance(dialogId);
var container = document.createElement('div');
// 确保多次调用close不会报错
var close = function close(evt) {
closeDialog(dialogId, {
triggerOnClose: evt !== false
});
};
var props = (0, _extends3['default'])({}, options, {
visible: true,
onClose: close
});
// 只支持函数形式的ref
if (ref && typeof ref !== 'function') {
delete props.ref;
}
var render = parentComponent ? (0, _partial2['default'])(_reactDom2['default'].unstable_renderSubtreeIntoContainer, parentComponent) : _reactDom2['default'].render;
// 不要依赖render的返回值,以后可能行为会改变
render(_react2['default'].createElement(_Dialog2['default'], props), container);
addDialogInstance(dialogId, {
onClose: oldOnClose,
container: container
});
return close;
}