|
- 'use strict';
-
- exports.__esModule = true;
-
- var _extends2 = require('babel-runtime/helpers/extends');
-
- var _extends3 = _interopRequireDefault(_extends2);
-
- var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
-
- var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
-
- 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 _react2 = _interopRequireDefault(_react);
-
- var _propTypes = require('prop-types');
-
- var _propTypes2 = _interopRequireDefault(_propTypes);
-
- var _reactDom = require('react-dom');
-
- var _reactDom2 = _interopRequireDefault(_reactDom);
-
- var _rcAlign = require('rc-align');
-
- var _rcAlign2 = _interopRequireDefault(_rcAlign);
-
- var _rcAnimate = require('rc-animate');
-
- var _rcAnimate2 = _interopRequireDefault(_rcAnimate);
-
- var _PopupInner = require('./PopupInner');
-
- var _PopupInner2 = _interopRequireDefault(_PopupInner);
-
- var _LazyRenderBox = require('./LazyRenderBox');
-
- var _LazyRenderBox2 = _interopRequireDefault(_LazyRenderBox);
-
- var _utils = require('./utils');
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
- var Popup = function (_Component) {
- (0, _inherits3['default'])(Popup, _Component);
-
- function Popup(props) {
- (0, _classCallCheck3['default'])(this, Popup);
-
- var _this = (0, _possibleConstructorReturn3['default'])(this, _Component.call(this, props));
-
- _initialiseProps.call(_this);
-
- _this.state = {
- // Used for stretch
- stretchChecked: false,
- targetWidth: undefined,
- targetHeight: undefined
- };
-
- _this.savePopupRef = _utils.saveRef.bind(_this, 'popupInstance');
- _this.saveAlignRef = _utils.saveRef.bind(_this, 'alignInstance');
- return _this;
- }
-
- Popup.prototype.componentDidMount = function componentDidMount() {
- this.rootNode = this.getPopupDomNode();
- this.setStretchSize();
- };
-
- Popup.prototype.componentDidUpdate = function componentDidUpdate() {
- this.setStretchSize();
- };
-
- // Record size if stretch needed
-
-
- Popup.prototype.getPopupDomNode = function getPopupDomNode() {
- return _reactDom2['default'].findDOMNode(this.popupInstance);
- };
-
- // `target` on `rc-align` can accept as a function to get the bind element or a point.
- // ref: https://www.npmjs.com/package/rc-align
-
-
- Popup.prototype.getMaskTransitionName = function getMaskTransitionName() {
- var props = this.props;
- var transitionName = props.maskTransitionName;
- var animation = props.maskAnimation;
- if (!transitionName && animation) {
- transitionName = props.prefixCls + '-' + animation;
- }
- return transitionName;
- };
-
- Popup.prototype.getTransitionName = function getTransitionName() {
- var props = this.props;
- var transitionName = props.transitionName;
- if (!transitionName && props.animation) {
- transitionName = props.prefixCls + '-' + props.animation;
- }
- return transitionName;
- };
-
- Popup.prototype.getClassName = function getClassName(currentAlignClassName) {
- return this.props.prefixCls + ' ' + this.props.className + ' ' + currentAlignClassName;
- };
-
- Popup.prototype.getPopupElement = function getPopupElement() {
- var _this2 = this;
-
- var savePopupRef = this.savePopupRef;
- var _state = this.state,
- stretchChecked = _state.stretchChecked,
- targetHeight = _state.targetHeight,
- targetWidth = _state.targetWidth;
- var _props = this.props,
- align = _props.align,
- visible = _props.visible,
- prefixCls = _props.prefixCls,
- style = _props.style,
- getClassNameFromAlign = _props.getClassNameFromAlign,
- destroyPopupOnHide = _props.destroyPopupOnHide,
- stretch = _props.stretch,
- children = _props.children,
- onMouseEnter = _props.onMouseEnter,
- onMouseLeave = _props.onMouseLeave,
- onMouseDown = _props.onMouseDown,
- onTouchStart = _props.onTouchStart;
-
- var className = this.getClassName(this.currentAlignClassName || getClassNameFromAlign(align));
- var hiddenClassName = prefixCls + '-hidden';
-
- if (!visible) {
- this.currentAlignClassName = null;
- }
-
- var sizeStyle = {};
- if (stretch) {
- // Stretch with target
- if (stretch.indexOf('height') !== -1) {
- sizeStyle.height = targetHeight;
- } else if (stretch.indexOf('minHeight') !== -1) {
- sizeStyle.minHeight = targetHeight;
- }
- if (stretch.indexOf('width') !== -1) {
- sizeStyle.width = targetWidth;
- } else if (stretch.indexOf('minWidth') !== -1) {
- sizeStyle.minWidth = targetWidth;
- }
-
- // Delay force align to makes ui smooth
- if (!stretchChecked) {
- sizeStyle.visibility = 'hidden';
- setTimeout(function () {
- if (_this2.alignInstance) {
- _this2.alignInstance.forceAlign();
- }
- }, 0);
- }
- }
-
- var newStyle = (0, _extends3['default'])({}, sizeStyle, style, this.getZIndexStyle());
-
- var popupInnerProps = {
- className: className,
- prefixCls: prefixCls,
- ref: savePopupRef,
- onMouseEnter: onMouseEnter,
- onMouseLeave: onMouseLeave,
- onMouseDown: onMouseDown,
- onTouchStart: onTouchStart,
- style: newStyle
- };
- if (destroyPopupOnHide) {
- return _react2['default'].createElement(
- _rcAnimate2['default'],
- {
- component: '',
- exclusive: true,
- transitionAppear: true,
- transitionName: this.getTransitionName()
- },
- visible ? _react2['default'].createElement(
- _rcAlign2['default'],
- {
- target: this.getAlignTarget(),
- key: 'popup',
- ref: this.saveAlignRef,
- monitorWindowResize: true,
- align: align,
- onAlign: this.onAlign
- },
- _react2['default'].createElement(
- _PopupInner2['default'],
- (0, _extends3['default'])({
- visible: true
- }, popupInnerProps),
- children
- )
- ) : null
- );
- }
-
- return _react2['default'].createElement(
- _rcAnimate2['default'],
- {
- component: '',
- exclusive: true,
- transitionAppear: true,
- transitionName: this.getTransitionName(),
- showProp: 'xVisible'
- },
- _react2['default'].createElement(
- _rcAlign2['default'],
- {
- target: this.getAlignTarget(),
- key: 'popup',
- ref: this.saveAlignRef,
- monitorWindowResize: true,
- xVisible: visible,
- childrenProps: { visible: 'xVisible' },
- disabled: !visible,
- align: align,
- onAlign: this.onAlign
- },
- _react2['default'].createElement(
- _PopupInner2['default'],
- (0, _extends3['default'])({
- hiddenClassName: hiddenClassName
- }, popupInnerProps),
- children
- )
- )
- );
- };
-
- Popup.prototype.getZIndexStyle = function getZIndexStyle() {
- var style = {};
- var props = this.props;
- if (props.zIndex !== undefined) {
- style.zIndex = props.zIndex;
- }
- return style;
- };
-
- Popup.prototype.getMaskElement = function getMaskElement() {
- var props = this.props;
- var maskElement = void 0;
- if (props.mask) {
- var maskTransition = this.getMaskTransitionName();
- maskElement = _react2['default'].createElement(_LazyRenderBox2['default'], {
- style: this.getZIndexStyle(),
- key: 'mask',
- className: props.prefixCls + '-mask',
- hiddenClassName: props.prefixCls + '-mask-hidden',
- visible: props.visible
- });
- if (maskTransition) {
- maskElement = _react2['default'].createElement(
- _rcAnimate2['default'],
- {
- key: 'mask',
- showProp: 'visible',
- transitionAppear: true,
- component: '',
- transitionName: maskTransition
- },
- maskElement
- );
- }
- }
- return maskElement;
- };
-
- Popup.prototype.render = function render() {
- return _react2['default'].createElement(
- 'div',
- null,
- this.getMaskElement(),
- this.getPopupElement()
- );
- };
-
- return Popup;
- }(_react.Component);
-
- Popup.propTypes = {
- visible: _propTypes2['default'].bool,
- style: _propTypes2['default'].object,
- getClassNameFromAlign: _propTypes2['default'].func,
- onAlign: _propTypes2['default'].func,
- getRootDomNode: _propTypes2['default'].func,
- align: _propTypes2['default'].any,
- destroyPopupOnHide: _propTypes2['default'].bool,
- className: _propTypes2['default'].string,
- prefixCls: _propTypes2['default'].string,
- onMouseEnter: _propTypes2['default'].func,
- onMouseLeave: _propTypes2['default'].func,
- onMouseDown: _propTypes2['default'].func,
- onTouchStart: _propTypes2['default'].func,
- stretch: _propTypes2['default'].string,
- children: _propTypes2['default'].node,
- point: _propTypes2['default'].shape({
- pageX: _propTypes2['default'].number,
- pageY: _propTypes2['default'].number
- })
- };
-
- var _initialiseProps = function _initialiseProps() {
- var _this3 = this;
-
- this.onAlign = function (popupDomNode, align) {
- var props = _this3.props;
- var currentAlignClassName = props.getClassNameFromAlign(align);
- // FIX: https://github.com/react-component/trigger/issues/56
- // FIX: https://github.com/react-component/tooltip/issues/79
- if (_this3.currentAlignClassName !== currentAlignClassName) {
- _this3.currentAlignClassName = currentAlignClassName;
- popupDomNode.className = _this3.getClassName(currentAlignClassName);
- }
- props.onAlign(popupDomNode, align);
- };
-
- this.setStretchSize = function () {
- var _props2 = _this3.props,
- stretch = _props2.stretch,
- getRootDomNode = _props2.getRootDomNode,
- visible = _props2.visible;
- var _state2 = _this3.state,
- stretchChecked = _state2.stretchChecked,
- targetHeight = _state2.targetHeight,
- targetWidth = _state2.targetWidth;
-
-
- if (!stretch || !visible) {
- if (stretchChecked) {
- _this3.setState({ stretchChecked: false });
- }
- return;
- }
-
- var $ele = getRootDomNode();
- if (!$ele) return;
-
- var height = $ele.offsetHeight;
- var width = $ele.offsetWidth;
-
- if (targetHeight !== height || targetWidth !== width || !stretchChecked) {
- _this3.setState({
- stretchChecked: true,
- targetHeight: height,
- targetWidth: width
- });
- }
- };
-
- this.getTargetElement = function () {
- return _this3.props.getRootDomNode();
- };
-
- this.getAlignTarget = function () {
- var point = _this3.props.point;
-
- if (point) {
- return point;
- }
- return _this3.getTargetElement;
- };
- };
-
- exports['default'] = Popup;
- module.exports = exports['default'];
|