modo-mobile
Version:
A mobile UI toolkit, based on React
194 lines (165 loc) • 7.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _rcAnimate = require('rc-animate');
var _rcAnimate2 = _interopRequireDefault(_rcAnimate);
var _titleBar = require('./title-bar');
var _titleBar2 = _interopRequireDefault(_titleBar);
var _view = require('../view');
var _view2 = _interopRequireDefault(_view);
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 Popup = function (_React$Component) {
(0, _inherits3['default'])(Popup, _React$Component);
function Popup() {
(0, _classCallCheck3['default'])(this, Popup);
var _this = (0, _possibleConstructorReturn3['default'])(this, (Popup.__proto__ || Object.getPrototypeOf(Popup)).apply(this, arguments));
_this.handlePreventScroll = function (isBind) {
var handler = isBind ? 'addEventListener' : 'removeEventListener';
if (_this.maskRef) {
_this.maskRef[handler]('touchmove', _this.handlePreventDefault, false);
}
// if (this.boxRef) {
// this.boxRef[handler]('touchmove', this.handlePreventDefault, false);
// }
_this.handlePreventScrollExclude(isBind, null);
};
_this.handlePreventScrollExclude = function (isBind, preventScrollExclude) {
var handler = isBind ? 'addEventListener' : 'removeEventListener';
preventScrollExclude = preventScrollExclude || _this.props.preventScrollExclude;
var excluder = preventScrollExclude ? typeof preventScrollExclude === 'string' ? _this.boxRef.querySelector(preventScrollExclude) : preventScrollExclude : null;
if (excluder) {
excluder[handler]('touchmove', _this.handleStopImmediatePropagation, false);
}
};
_this.handleOpen = function () {
if (_this.props.preventScroll) {
_this.handlePreventScroll(true);
}
};
_this.handleClose = function (e) {
var onClose = _this.props.onClose;
if (_this.props.preventScroll) {
_this.handlePreventScroll(false);
}
if (onClose) {
onClose(e);
}
};
_this.handleMaskClick = function (e) {
if (_this.props.maskClosable) {
_this.handleClose(e);
}
};
_this.handleOnEnd = function (key, exists) {
var onAnimateEnd = _this.props.onAnimateEnd;
if (onAnimateEnd) onAnimateEnd(exists, key);
};
return _this;
}
(0, _createClass3['default'])(Popup, [{
key: 'componentDidUpdate',
value: function componentDidUpdate(prevProps) {
if (this.props.visible && !prevProps.visible) {
this.handleOpen();
}
if (this.props.preventScrollExclude !== prevProps.preventScrollExclude) {
this.handlePreventScrollExclude(false, this.props.preventScrollExclude);
this.handlePreventScrollExclude(true, prevProps.preventScrollExclude);
}
}
}, {
key: 'handlePreventDefault',
value: function handlePreventDefault(e) {
e.preventDefault();
}
}, {
key: 'handleStopImmediatePropagation',
value: function handleStopImmediatePropagation(e) {
e.stopImmediatePropagation();
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
prefixCls = _props.prefixCls,
visible = _props.visible,
children = _props.children,
hasMask = _props.hasMask,
position = _props.position,
destroyed = _props.destroyed;
var transtion = function () {
switch (position) {
case 'bottom':
return 'move-down';
case 'top':
return 'move-up';
case 'left':
return 'move-left';
case 'right':
return 'move-right';
default:
return 'fade';
}
}();
var maskNode = hasMask && React.createElement(
_rcAnimate2['default'],
{ component: '', transitionName: 'fade', showProp: 'show' },
visible || !destroyed ? React.createElement(
_view2['default'],
{ show: visible },
React.createElement('div', { ref: function ref(e) {
return _this2.maskRef = e;
}, className: prefixCls + '-mask', onClick: this.handleMaskClick })
) : null
);
return React.createElement(
'div',
{ className: prefixCls + ' ' + prefixCls + '-' + position },
maskNode,
React.createElement(
_rcAnimate2['default'],
{ component: '', transitionName: transtion, showProp: 'show', onEnd: this.handleOnEnd },
visible || !destroyed ? React.createElement(
_view2['default'],
{ show: visible },
React.createElement(
'div',
{ className: prefixCls + '-box', ref: function ref(e) {
return _this2.boxRef = e;
} },
children
)
) : null
)
);
}
}]);
return Popup;
}(React.Component);
Popup.TitleBar = _titleBar2['default'];
Popup.defaultProps = {
closable: true,
hasMask: true,
maskClosable: true,
destroyed: false,
position: 'center',
prefixCls: 'm-popup',
preventScroll: false,
preventScrollExclude: '',
visible: false
};
exports['default'] = Popup;
module.exports = exports['default'];