zent
Version:
一套前端设计语言和基于React的实现
399 lines (321 loc) • 13.4 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports['default'] = undefined;
var _class2, _temp3;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _zentPopover = require('zent-popover');
var _zentPopover2 = _interopRequireDefault(_zentPopover);
var _zentButton = require('zent-button');
var _zentButton2 = _interopRequireDefault(_zentButton);
var _classnames = require('zent-utils/classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _noop = require('zent-utils/lodash/noop');
var _noop2 = _interopRequireDefault(_noop);
var _isFunction = require('zent-utils/lodash/isFunction');
var _isFunction2 = _interopRequireDefault(_isFunction);
var _isPromise = require('zent-utils/isPromise');
var _isPromise2 = _interopRequireDefault(_isPromise);
var _NoneTrigger = require('./NoneTrigger');
var _NoneTrigger2 = _interopRequireDefault(_NoneTrigger);
var _position = require('./position');
var _position2 = _interopRequireDefault(_position);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Trigger = _zentPopover2['default'].Trigger,
withPopover = _zentPopover2['default'].withPopover;
var stateMap = {
onConfirm: 'confirmPending',
onCancel: 'cancelPending'
};
var PopAction = function (_Component) {
_inherits(PopAction, _Component);
function PopAction() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, PopAction);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PopAction.__proto__ || Object.getPrototypeOf(PopAction)).call.apply(_ref, [this].concat(args))), _this), _this.handleConfirm = function () {
_this.handleClick('onConfirm');
}, _this.handleCancel = function () {
_this.handleClick('onCancel');
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(PopAction, [{
key: 'handleClick',
// 支持异步的回调函数
// onConfirm/onCancel异步等待的时候要禁用用户关闭
value: function handleClick(callbackName) {
var callback = this.props[callbackName];
var popover = this.props.popover;
if (!(0, _isFunction2['default'])(callback)) {
return popover.close();
}
var changePending = this.props.changePending;
var stateKey = stateMap[callbackName];
var startClose = function startClose() {
changePending(stateKey, true);
};
var finishClose = function finishClose() {
changePending(stateKey, false, popover.close);
};
if (callback.length >= 1) {
startClose();
return callback(finishClose);
}
var maybePromise = callback();
if ((0, _isPromise2['default'])(maybePromise)) {
startClose();
maybePromise.then(finishClose)['catch'](function () {
return changePending(stateKey, false, popover.close);
});
} else {
popover.close();
}
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
prefix = _props.prefix,
type = _props.type,
onConfirm = _props.onConfirm,
onCancel = _props.onCancel,
confirmText = _props.confirmText,
cancelText = _props.cancelText,
confirmPending = _props.confirmPending,
cancelPending = _props.cancelPending;
if (!onConfirm && !onCancel) {
return null;
}
return _react2['default'].createElement(
'div',
{ className: prefix + '-pop-buttons' },
_react2['default'].createElement(
_zentButton2['default'],
{ loading: confirmPending, disabled: cancelPending, size: 'small', type: type, onClick: this.handleConfirm },
confirmText
),
_react2['default'].createElement(
_zentButton2['default'],
{ loading: cancelPending, disabled: confirmPending, size: 'small', onClick: this.handleCancel },
cancelText
)
);
}
}]);
return PopAction;
}(_react.Component);
var BoundPopAction = withPopover(PopAction);
var Pop = (_temp3 = _class2 = function (_Component2) {
_inherits(Pop, _Component2);
function Pop() {
var _ref2;
var _temp2, _this2, _ret2;
_classCallCheck(this, Pop);
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, (_ref2 = Pop.__proto__ || Object.getPrototypeOf(Pop)).call.apply(_ref2, [this].concat(args))), _this2), _this2.state = {
confirmPending: false,
cancelPending: false
}, _this2.changePending = function (key, pending, callback) {
if (_this2.isUnmounted) {
return;
}
_this2.setState(_defineProperty({}, key, pending), callback);
}, _temp2), _possibleConstructorReturn(_this2, _ret2);
}
_createClass(Pop, [{
key: 'renderContent',
value: function renderContent() {
var _props2 = this.props,
prefix = _props2.prefix,
content = _props2.content,
header = _props2.header,
onConfirm = _props2.onConfirm,
onCancel = _props2.onCancel,
confirmText = _props2.confirmText,
cancelText = _props2.cancelText,
type = _props2.type;
var _state = this.state,
confirmPending = _state.confirmPending,
cancelPending = _state.cancelPending;
return _react2['default'].createElement(
_zentPopover2['default'].Content,
null,
header && _react2['default'].createElement(
'div',
{ className: prefix + '-pop-header' },
header
),
_react2['default'].createElement(
'div',
{ className: prefix + '-pop-inner' },
content,
_react2['default'].createElement(BoundPopAction, {
prefix: prefix,
onConfirm: onConfirm,
onCancel: onCancel,
confirmText: confirmText,
cancelText: cancelText,
confirmPending: confirmPending,
cancelPending: cancelPending,
changePending: this.changePending,
type: type
})
),
_react2['default'].createElement('i', { className: prefix + '-pop-arrow' })
);
}
}, {
key: 'renderTrigger',
value: function renderTrigger() {
var _props3 = this.props,
trigger = _props3.trigger,
visible = _props3.visible,
onVisibleChange = _props3.onVisibleChange,
closeOnClickOutside = _props3.closeOnClickOutside,
isOutside = _props3.isOutside,
mouseLeaveDelay = _props3.mouseLeaveDelay,
mouseEnterDelay = _props3.mouseEnterDelay,
children = _props3.children;
if (trigger === 'click') {
return _react2['default'].createElement(
Trigger.Click,
{ autoClose: closeOnClickOutside, isOutside: isOutside },
children
);
}
if (trigger === 'hover') {
return _react2['default'].createElement(
Trigger.Hover,
{ showDelay: mouseEnterDelay, hideDelay: mouseLeaveDelay, isOutside: isOutside },
children
);
}
if (trigger === 'focus') {
return _react2['default'].createElement(
Trigger.Focus,
null,
children
);
}
if (trigger === 'none') {
return _react2['default'].createElement(
_NoneTrigger2['default'],
{ visible: visible, onVisibleChange: onVisibleChange },
children
);
}
return null;
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.isUnmounted = true;
}
}, {
key: 'render',
value: function render() {
var _props4 = this.props,
className = _props4.className,
wrapperClassName = _props4.wrapperClassName,
trigger = _props4.trigger,
visible = _props4.visible,
prefix = _props4.prefix,
block = _props4.block,
onShow = _props4.onShow,
onClose = _props4.onClose,
position = _props4.position,
centerArrow = _props4.centerArrow,
onBeforeClose = _props4.onBeforeClose,
onBeforeShow = _props4.onBeforeShow;
var onVisibleChange = this.props.onVisibleChange;
if (trigger === 'none') {
onVisibleChange = onVisibleChange || _noop2['default'];
}
var _state2 = this.state,
confirmPending = _state2.confirmPending,
cancelPending = _state2.cancelPending;
var closePending = confirmPending || cancelPending;
return _react2['default'].createElement(
_zentPopover2['default'],
{
visible: closePending ? true : visible,
onVisibleChange: closePending ? _noop2['default'] : onVisibleChange,
prefix: prefix,
wrapperClassName: (0, _classnames2['default'])(prefix + '-pop-wrapper', wrapperClassName),
className: (0, _classnames2['default'])(prefix + '-pop', className),
cushion: 10,
position: (0, _position2['default'])(position, centerArrow),
display: block ? 'block' : 'inline-block',
onShow: onShow,
onClose: onClose,
onBeforeClose: onBeforeClose,
onBeforeShow: onBeforeShow
},
this.renderTrigger(),
this.renderContent()
);
}
}]);
return Pop;
}(_react.Component), _class2.propTypes = {
trigger: _react.PropTypes.oneOf(['click', 'hover', 'focus', 'none']),
position: _react.PropTypes.oneOf(['left-top', 'left-center', 'left-bottom', 'right-top', 'right-center', 'right-bottom', 'top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right']),
// 是否按小箭头居中对齐trigger来定位
centerArrow: _react.PropTypes.bool,
// trigger是否块级显示
block: _react.PropTypes.bool,
content: _react.PropTypes.node,
header: _react.PropTypes.node,
// confirm形式相关
onConfirm: _react.PropTypes.func,
onCancel: _react.PropTypes.func,
confirmText: _react.PropTypes.string,
cancelText: _react.PropTypes.string,
type: _react.PropTypes.oneOf(['primary', 'default', 'danger', 'success']),
// 打开之后的回调函数
onShow: _react.PropTypes.func,
// 关闭之后的回调函数
onClose: _react.PropTypes.func,
// 打开/关闭前的回调函数,只有用户触发的操作才会调用;通过外部改变`visible`不会触发
onBeforeShow: _react.PropTypes.func,
onBeforeClose: _react.PropTypes.func,
visible: _react.PropTypes.bool,
onVisibleChange: _react.PropTypes.func,
// 只有trigger为hover时才有效
mouseLeaveDelay: _react.PropTypes.number,
mouseEnterDelay: _react.PropTypes.number,
// 只有trigger为click时才有效
closeOnClickOutside: _react.PropTypes.bool,
isClickOutside: _react.PropTypes.func,
prefix: _react.PropTypes.string,
className: _react.PropTypes.string,
wrapperClassName: _react.PropTypes.string
}, _class2.defaultProps = {
trigger: 'none',
position: 'top-center',
centerArrow: false,
block: false,
confirmText: '确定',
cancelText: '取消',
type: 'primary',
closeOnClickOutside: true,
mouseLeaveDelay: 200,
mouseEnterDelay: 200,
className: '',
wrapperClassName: '',
prefix: 'zent'
}, _temp3);
exports['default'] = Pop;
module.exports = exports['default'];
;