UNPKG

react-widget-popup

Version:

``` npm install --save react-widget-popup ```

439 lines (356 loc) 15.7 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Popup = exports.version = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactDom = require("react-dom"); var _classnames3 = _interopRequireDefault(require("classnames")); var _TransitionGroupContext = _interopRequireDefault(require("react-transition-group/TransitionGroupContext")); var _Transition = _interopRequireWildcard(require("react-transition-group/Transition")); var _CSSTransition = _interopRequireDefault(require("react-transition-group/CSSTransition")); function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } var version = "3.4.8"; exports.version = version; var Popup = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2.default)(Popup, _React$Component); var _super = _createSuper(Popup); function Popup() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "transitionStatus", _Transition.EXITED); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "inTransition", false); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "inMaskTransition", false); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "rootInstance", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "popupInstance", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "maskInstance", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "refHandlers", { root: function root(node) { return _this.rootInstance = node; }, popup: function popup(node) { return _this.popupInstance = node; }, mask: function mask(node) { return _this.maskInstance = node; } }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addEndListener", function (_, cb) { var _transition$addEndLis; var transition = _this.props.transition; transition === null || transition === void 0 ? void 0 : (_transition$addEndLis = transition.addEndListener) === null || _transition$addEndLis === void 0 ? void 0 : _transition$addEndLis.call(transition, (0, _reactDom.findDOMNode)(_this.popupInstance), cb); }); return _this; } var _proto = Popup.prototype; _proto.getRootDOM = function getRootDOM() { return (0, _reactDom.findDOMNode)(this.rootInstance); }; _proto.getPopupDOM = function getPopupDOM() { return (0, _reactDom.findDOMNode)(this.popupInstance); }; _proto.getMaskDOM = function getMaskDOM() { return (0, _reactDom.findDOMNode)(this.maskInstance); }; _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) { return nextProps.forceRender || !(_Transition.EXITED === this.transitionStatus && !nextProps.visible); }; _proto.componentDidMount = function componentDidMount() { var _this$props = this.props, lazy = _this$props.lazy, visible = _this$props.visible, mask = _this$props.mask; var rootElement = (0, _reactDom.findDOMNode)(this.rootInstance); var popupElement = (0, _reactDom.findDOMNode)(this.popupInstance); var maskElement = (0, _reactDom.findDOMNode)(this.maskInstance); if (!visible && !lazy) { if (rootElement) { rootElement.style.display = "none"; // @ts-ignore rootElement.__popupHide = true; } if (popupElement) { popupElement.style.display = "none"; // @ts-ignore popupElement.__popupHide = true; } if (maskElement) { maskElement.style.display = "none"; // @ts-ignore maskElement.__popupHide = true; } } if (visible && !mask) { if (maskElement) { maskElement.style.display = "none"; // @ts-ignore maskElement.__popupHide = true; } } }; _proto.onEnter = function onEnter(_ref, isMask, node, appearing) { var _onEnter = _ref.onEnter; var getPosition = this.props.getPosition; var rootElement = (0, _reactDom.findDOMNode)(this.rootInstance); var popupElement = (0, _reactDom.findDOMNode)(this.popupInstance); var maskElement = (0, _reactDom.findDOMNode)(this.maskInstance); if (isMask) { this.inMaskTransition = true; } else { this.inTransition = true; } // if (!destroyOnClose) { //@ts-ignore if (rootElement && rootElement.__popupHide) { rootElement.style.display = ""; //@ts-ignore delete rootElement.__popupHide; } //@ts-ignore if (!isMask && popupElement && popupElement.__popupHide) { popupElement.style.display = ""; //@ts-ignore delete popupElement.__popupHide; } //@ts-ignore if (isMask && maskElement && maskElement.__popupHide) { maskElement.style.display = ""; //@ts-ignore delete maskElement.__popupHide; } // } if (!isMask && getPosition) { var pos = getPosition(node); var transform = function transform(v) { return typeof v === "number" ? v + "px" : v; }; if (pos) { if ("left" in pos) { node.style.left = transform(pos.left); } if ("top" in pos) { node.style.top = transform(pos.top); } if ("right" in pos) { node.style.right = transform(pos.right); } if ("bottom" in pos) { node.style.bottom = transform(pos.bottom); } } } if (_onEnter) { _onEnter(node, appearing); } }; _proto.onEntered = function onEntered(_ref2, isMask, node, appearing) { var _onEntered = _ref2.onEntered; if (isMask) { this.inMaskTransition = false; } else { this.inTransition = false; } if (_onEntered) { _onEntered(node, appearing); } }; _proto.onExit = function onExit(_ref3, isMask, node) { var _onExit = _ref3.onExit; if (isMask) { this.inMaskTransition = true; } else { this.inTransition = true; } if (_onExit) { _onExit(node); } }; _proto.onExited = function onExited(_ref4, isMask, node) { var _onExited = _ref4.onExited; var _this$props2 = this.props, destroyOnClose = _this$props2.destroyOnClose, visible = _this$props2.visible; var rootElement = (0, _reactDom.findDOMNode)(this.rootInstance); var popupElement = (0, _reactDom.findDOMNode)(this.popupInstance); var maskElement = (0, _reactDom.findDOMNode)(this.maskInstance); if (isMask) { this.inMaskTransition = false; } else { this.inTransition = false; } if (!destroyOnClose) { if (!visible && !this.inMaskTransition && !this.inTransition && rootElement) { rootElement.style.display = "none"; // @ts-ignore rootElement.__popupHide = true; } if (!isMask && popupElement) { popupElement.style.display = "none"; // @ts-ignore popupElement.__popupHide = true; } if (isMask && maskElement) { maskElement.style.display = "none"; // @ts-ignore maskElement.__popupHide = true; } } if (_onExited) { _onExited(node); } }; _proto.renderPopupMask = function renderPopupMask() { var _classnames; var _this$props3 = this.props, prefixCls = _this$props3.prefixCls, visible = _this$props3.visible, mask = _this$props3.mask, maskProps = _this$props3.maskProps, maskStyle = _this$props3.maskStyle, maskClassName = _this$props3.maskClassName, maskTransition = _this$props3.maskTransition, lazy = _this$props3.lazy, destroyOnClose = _this$props3.destroyOnClose, fixed = _this$props3.fixed, maskComponent = _this$props3.maskComponent; var MaskComponent = maskComponent; var classes = (0, _classnames3.default)((_classnames = {}, _classnames[prefixCls + "-mask"] = true, _classnames[prefixCls + "-mask-fixed"] = fixed, _classnames), maskProps.className, maskClassName); var TransitionComponent = maskTransition.classNames ? _CSSTransition.default : _Transition.default; return /*#__PURE__*/_react.default.createElement(TransitionComponent, (0, _extends2.default)({ enter: true, exit: true, appear: true, addEndListener: function addEndListener(_, cb) { return maskTransition.timeout == null && cb(); } }, maskTransition, { in: mask && visible, onEnter: this.onEnter.bind(this, maskTransition, true), onEntered: this.onEntered.bind(this, maskTransition, true), onExit: this.onExit.bind(this, maskTransition, true), onExited: this.onExited.bind(this, maskTransition, true), unmountOnExit: destroyOnClose, mountOnEnter: lazy }), /*#__PURE__*/_react.default.createElement(MaskComponent, (0, _extends2.default)({}, maskProps, { ref: this.refHandlers.mask, style: Object.assign({}, maskStyle, {}, maskProps.style), className: classes }))); }; _proto.render = function render() { var _classnames2, _this2 = this; var _this$props4 = this.props, style = _this$props4.style, prefixCls = _this$props4.prefixCls, className = _this$props4.className, fixed = _this$props4.fixed, visible = _this$props4.visible, children = _this$props4.children, lazy = _this$props4.lazy, destroyOnClose = _this$props4.destroyOnClose, rootClassName = _this$props4.rootClassName, rootStyle = _this$props4.rootStyle, rootProps = _this$props4.rootProps, rootComponent = _this$props4.rootComponent, component = _this$props4.component, transition = _this$props4.transition, wrapContent = _this$props4.wrapContent, disableMask = _this$props4.disableMask, childProps = (0, _objectWithoutProperties2.default)(_this$props4, ["style", "prefixCls", "className", "fixed", "visible", "children", "lazy", "destroyOnClose", "rootClassName", "rootStyle", "rootProps", "rootComponent", "component", "transition", "wrapContent", "disableMask"]); var RootComponent = rootComponent; var Component = component; delete childProps.mask; delete childProps.maskProps; delete childProps.maskStyle; delete childProps.maskClassName; delete childProps.maskComponent; delete childProps.maskTransition; delete childProps.getPosition; delete childProps.forceRender; var rootComponentProps = Object.assign({}, rootProps, { className: (0, _classnames3.default)(prefixCls + "-root", rootClassName, rootProps.className), style: Object.assign({}, rootStyle, {}, rootProps.style) }); if (RootComponent === _react.Fragment) { rootComponentProps = {}; } var classes = (0, _classnames3.default)(prefixCls, (_classnames2 = {}, _classnames2[prefixCls + "-fixed"] = fixed, _classnames2), className); var TransitionComponent = transition.classNames ? _CSSTransition.default : _Transition.default; var popup = /*#__PURE__*/_react.default.createElement(RootComponent, (0, _extends2.default)({}, rootComponentProps, { ref: this.refHandlers.root }), !disableMask && this.renderPopupMask(), wrapContent( /*#__PURE__*/_react.default.createElement(TransitionComponent, (0, _extends2.default)({ enter: true, exit: true, appear: true, addEndListener: function addEndListener(_, cb) { return transition.timeout == null && cb(); } }, transition, { in: visible, onEnter: this.onEnter.bind(this, transition, false), onEntered: this.onEntered.bind(this, transition, false), onExit: this.onExit.bind(this, transition, false), onExited: this.onExited.bind(this, transition, false), unmountOnExit: destroyOnClose, mountOnEnter: lazy }), function (status) { _this2.transitionStatus = status; return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, childProps, { ref: _this2.refHandlers.popup, style: style, className: classes }), typeof children === "function" ? children(status) : children); }))); return /*#__PURE__*/_react.default.createElement(_TransitionGroupContext.default.Provider, { value: null }, /*#__PURE__*/_react.default.createElement(_Transition.default, { enter: true, exit: true, appear: true, addEndListener: transition.addEndListener ? this.addEndListener : undefined, timeout: transition.timeout, in: visible, unmountOnExit: destroyOnClose, mountOnEnter: lazy }, function () { return popup; })); }; return Popup; }(_react.default.Component); exports.Popup = Popup; (0, _defineProperty2.default)(Popup, "defaultProps", { prefixCls: "rw-popup", style: {}, className: "", rootClassName: "", rootStyle: {}, rootProps: {}, visible: false, fixed: false, //初始未显示的情况下不渲染组件,作用同react-transition-group的mountOnEnter lazy: true, //当destroyOnClose=false时,visible=false的情况下也会刷新组件 forceRender: false, //popup动画配置参数参考react-transition-group //http://reactcommunity.org/react-transition-group/css-transition transition: {}, //visible=false时移除组件,作用同react-transition-group的unmountOnExit destroyOnClose: true, disableMask: false, mask: false, maskStyle: {}, maskProps: {}, maskClassName: "", //popupMask动画配置参数参考react-transition-group //http://reactcommunity.org/react-transition-group/css-transition maskTransition: {}, component: "div", maskComponent: "div", rootComponent: "div", wrapContent: function wrapContent(node) { return node; } }); var _default = Popup; exports.default = _default;