react-widget-popup
Version:
``` npm install --save react-widget-popup ```
439 lines (356 loc) • 15.7 kB
JavaScript
"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;