UNPKG

zent

Version:

一套前端设计语言和基于React的实现

126 lines (84 loc) 3.23 kB
'use strict'; 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; }