yqcloud-ui
Version:
An enterprise-class UI design language and React-based implementation
174 lines (138 loc) • 6.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var React = _interopRequireWildcard(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _button = require('../button');
var _button2 = _interopRequireDefault(_button);
var _LocaleReceiver = require('../locale-provider/LocaleReceiver');
var _LocaleReceiver2 = _interopRequireDefault(_LocaleReceiver);
var _locale = require('./locale');
var _dialog = require('../rc-components/dialog');
var _dialog2 = _interopRequireDefault(_dialog);
var _addEventListener = require('../rc-components/util/Dom/addEventListener');
var _addEventListener2 = _interopRequireDefault(_addEventListener);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var mousePosition = void 0;
var mousePositionEventBinded = void 0;
var Modal = function (_React$Component) {
(0, _inherits3['default'])(Modal, _React$Component);
function Modal() {
(0, _classCallCheck3['default'])(this, Modal);
var _this = (0, _possibleConstructorReturn3['default'])(this, (Modal.__proto__ || Object.getPrototypeOf(Modal)).apply(this, arguments));
_this.handleCancel = function (e) {
var onCancel = _this.props.onCancel;
if (onCancel) {
onCancel(e);
}
};
_this.handleOk = function (e) {
var onOk = _this.props.onOk;
if (onOk) {
onOk(e);
}
};
_this.renderFooter = function (locale) {
var _this$props = _this.props,
okText = _this$props.okText,
okType = _this$props.okType,
cancelText = _this$props.cancelText,
confirmLoading = _this$props.confirmLoading,
funcType = _this$props.funcType;
return React.createElement(
'div',
null,
React.createElement(
_button2['default'],
{ disabled: confirmLoading, onClick: _this.handleCancel, funcType: funcType },
cancelText || locale.cancelText
),
React.createElement(
_button2['default'],
{ type: okType, funcType: funcType, loading: confirmLoading, onClick: _this.handleOk },
okText || locale.okText
)
);
};
return _this;
}
(0, _createClass3['default'])(Modal, [{
key: 'componentDidMount',
value: function componentDidMount() {
if (mousePositionEventBinded) {
return;
}
// 只有点击事件支持从鼠标位置动画展开
(0, _addEventListener2['default'])(document.documentElement, 'click', function (e) {
mousePosition = {
x: e.pageX,
y: e.pageY
};
// 100ms 内发生过点击事件,则从点击位置动画展示
// 否则直接 zoom 展示
// 这样可以兼容非点击方式展开
setTimeout(function () {
return mousePosition = null;
}, 100);
});
mousePositionEventBinded = true;
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
footer = _props.footer,
visible = _props.visible;
var defaultFooter = React.createElement(
_LocaleReceiver2['default'],
{ componentName: 'Modal', defaultLocale: (0, _locale.getConfirmLocale)() },
this.renderFooter
);
return React.createElement(_dialog2['default'], (0, _extends3['default'])({}, this.props, { footer: footer === undefined ? defaultFooter : footer, visible: visible, mousePosition: mousePosition, onClose: this.handleCancel }));
}
}]);
return Modal;
}(React.Component);
exports['default'] = Modal;
Modal.defaultProps = {
prefixCls: 'ant-modal',
width: 520,
transitionName: 'zoom',
maskTransitionName: 'fade',
confirmLoading: false,
visible: false,
okType: 'primary',
center: false
};
Modal.propTypes = {
prefixCls: _propTypes2['default'].string,
onOk: _propTypes2['default'].func,
onCancel: _propTypes2['default'].func,
okText: _propTypes2['default'].node,
cancelText: _propTypes2['default'].node,
width: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].string]),
confirmLoading: _propTypes2['default'].bool,
visible: _propTypes2['default'].bool,
align: _propTypes2['default'].object,
footer: _propTypes2['default'].node,
title: _propTypes2['default'].node,
closable: _propTypes2['default'].bool,
transitionName: _propTypes2['default'].string,
funcType: _propTypes2['default'].string,
center: _propTypes2['default'].bool
};
module.exports = exports['default'];