123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- "use strict";
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
- var _classnames = _interopRequireDefault(require("classnames"));
- var _rcMotion = _interopRequireDefault(require("rc-motion"));
- var _rcResizeObserver = _interopRequireDefault(require("rc-resize-observer"));
- var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
- var _ref2 = require("rc-util/lib/ref");
- var React = _interopRequireWildcard(require("react"));
- var _Arrow = _interopRequireDefault(require("./Arrow"));
- var _Mask = _interopRequireDefault(require("./Mask"));
- var _PopupContent = _interopRequireDefault(require("./PopupContent"));
- var Popup = /*#__PURE__*/React.forwardRef(function (props, ref) {
- var popup = props.popup,
- className = props.className,
- prefixCls = props.prefixCls,
- style = props.style,
- target = props.target,
- _onVisibleChanged = props.onVisibleChanged,
- open = props.open,
- keepDom = props.keepDom,
- fresh = props.fresh,
- onClick = props.onClick,
- mask = props.mask,
- arrow = props.arrow,
- arrowPos = props.arrowPos,
- align = props.align,
- motion = props.motion,
- maskMotion = props.maskMotion,
- forceRender = props.forceRender,
- getPopupContainer = props.getPopupContainer,
- autoDestroy = props.autoDestroy,
- Portal = props.portal,
- zIndex = props.zIndex,
- onMouseEnter = props.onMouseEnter,
- onMouseLeave = props.onMouseLeave,
- onPointerEnter = props.onPointerEnter,
- onPointerDownCapture = props.onPointerDownCapture,
- ready = props.ready,
- offsetX = props.offsetX,
- offsetY = props.offsetY,
- offsetR = props.offsetR,
- offsetB = props.offsetB,
- onAlign = props.onAlign,
- onPrepare = props.onPrepare,
- stretch = props.stretch,
- targetWidth = props.targetWidth,
- targetHeight = props.targetHeight;
- var childNode = typeof popup === 'function' ? popup() : popup;
- // We can not remove holder only when motion finished.
- var isNodeVisible = open || keepDom;
- // ======================= Container ========================
- var getPopupContainerNeedParams = (getPopupContainer === null || getPopupContainer === void 0 ? void 0 : getPopupContainer.length) > 0;
- var _React$useState = React.useState(!getPopupContainer || !getPopupContainerNeedParams),
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
- show = _React$useState2[0],
- setShow = _React$useState2[1];
- // Delay to show since `getPopupContainer` need target element
- (0, _useLayoutEffect.default)(function () {
- if (!show && getPopupContainerNeedParams && target) {
- setShow(true);
- }
- }, [show, getPopupContainerNeedParams, target]);
- // ========================= Render =========================
- if (!show) {
- return null;
- }
- // >>>>> Offset
- var AUTO = 'auto';
- var offsetStyle = {
- left: '-1000vw',
- top: '-1000vh',
- right: AUTO,
- bottom: AUTO
- };
- // Set align style
- if (ready || !open) {
- var _experimental;
- var points = align.points;
- var dynamicInset = align.dynamicInset || ((_experimental = align._experimental) === null || _experimental === void 0 ? void 0 : _experimental.dynamicInset);
- var alignRight = dynamicInset && points[0][1] === 'r';
- var alignBottom = dynamicInset && points[0][0] === 'b';
- if (alignRight) {
- offsetStyle.right = offsetR;
- offsetStyle.left = AUTO;
- } else {
- offsetStyle.left = offsetX;
- offsetStyle.right = AUTO;
- }
- if (alignBottom) {
- offsetStyle.bottom = offsetB;
- offsetStyle.top = AUTO;
- } else {
- offsetStyle.top = offsetY;
- offsetStyle.bottom = AUTO;
- }
- }
- // >>>>> Misc
- var miscStyle = {};
- if (stretch) {
- if (stretch.includes('height') && targetHeight) {
- miscStyle.height = targetHeight;
- } else if (stretch.includes('minHeight') && targetHeight) {
- miscStyle.minHeight = targetHeight;
- }
- if (stretch.includes('width') && targetWidth) {
- miscStyle.width = targetWidth;
- } else if (stretch.includes('minWidth') && targetWidth) {
- miscStyle.minWidth = targetWidth;
- }
- }
- if (!open) {
- miscStyle.pointerEvents = 'none';
- }
- return /*#__PURE__*/React.createElement(Portal, {
- open: forceRender || isNodeVisible,
- getContainer: getPopupContainer && function () {
- return getPopupContainer(target);
- },
- autoDestroy: autoDestroy
- }, /*#__PURE__*/React.createElement(_Mask.default, {
- prefixCls: prefixCls,
- open: open,
- zIndex: zIndex,
- mask: mask,
- motion: maskMotion
- }), /*#__PURE__*/React.createElement(_rcResizeObserver.default, {
- onResize: onAlign,
- disabled: !open
- }, function (resizeObserverRef) {
- return /*#__PURE__*/React.createElement(_rcMotion.default, (0, _extends2.default)({
- motionAppear: true,
- motionEnter: true,
- motionLeave: true,
- removeOnLeave: false,
- forceRender: forceRender,
- leavedClassName: "".concat(prefixCls, "-hidden")
- }, motion, {
- onAppearPrepare: onPrepare,
- onEnterPrepare: onPrepare,
- visible: open,
- onVisibleChanged: function onVisibleChanged(nextVisible) {
- var _motion$onVisibleChan;
- motion === null || motion === void 0 || (_motion$onVisibleChan = motion.onVisibleChanged) === null || _motion$onVisibleChan === void 0 || _motion$onVisibleChan.call(motion, nextVisible);
- _onVisibleChanged(nextVisible);
- }
- }), function (_ref, motionRef) {
- var motionClassName = _ref.className,
- motionStyle = _ref.style;
- var cls = (0, _classnames.default)(prefixCls, motionClassName, className);
- return /*#__PURE__*/React.createElement("div", {
- ref: (0, _ref2.composeRef)(resizeObserverRef, ref, motionRef),
- className: cls,
- style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({
- '--arrow-x': "".concat(arrowPos.x || 0, "px"),
- '--arrow-y': "".concat(arrowPos.y || 0, "px")
- }, offsetStyle), miscStyle), motionStyle), {}, {
- boxSizing: 'border-box',
- zIndex: zIndex
- }, style),
- onMouseEnter: onMouseEnter,
- onMouseLeave: onMouseLeave,
- onPointerEnter: onPointerEnter,
- onClick: onClick,
- onPointerDownCapture: onPointerDownCapture
- }, arrow && /*#__PURE__*/React.createElement(_Arrow.default, {
- prefixCls: prefixCls,
- arrow: arrow,
- arrowPos: arrowPos,
- align: align
- }), /*#__PURE__*/React.createElement(_PopupContent.default, {
- cache: !open && !fresh
- }, childNode));
- });
- }));
- });
- if (process.env.NODE_ENV !== 'production') {
- Popup.displayName = 'Popup';
- }
- var _default = exports.default = Popup;
|