UNPKG

@rc-component/trigger

Version:

base abstract trigger component for react

83 lines (77 loc) 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _useOffsetStyle = _interopRequireDefault(require("../hooks/useOffsetStyle")); var _classnames = _interopRequireDefault(require("classnames")); var _motion = _interopRequireDefault(require("@rc-component/motion")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } const UniqueBody = props => { const { prefixCls, isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY, arrowPos, popupSize, motion, uniqueBgClassName, uniqueBgStyle } = props; const bodyCls = `${prefixCls}-unique-body`; const [motionVisible, setMotionVisible] = _react.default.useState(false); // ========================= Styles ========================= const offsetStyle = (0, _useOffsetStyle.default)(isMobile, ready, open, align, offsetR, offsetB, offsetX, offsetY); // Cache for offsetStyle when ready is true const cachedOffsetStyleRef = _react.default.useRef(offsetStyle); // Update cached offset style when ready is true if (ready) { cachedOffsetStyleRef.current = offsetStyle; } // Apply popup size if available const sizeStyle = {}; if (popupSize) { sizeStyle.width = popupSize.width; sizeStyle.height = popupSize.height; } // ========================= Render ========================= return /*#__PURE__*/_react.default.createElement(_motion.default, _extends({ motionAppear: true, motionEnter: true, motionLeave: true, removeOnLeave: false, leavedClassName: `${bodyCls}-hidden` }, motion, { visible: open, onVisibleChanged: nextVisible => { setMotionVisible(nextVisible); } }), ({ className: motionClassName, style: motionStyle }) => { const cls = (0, _classnames.default)(bodyCls, motionClassName, uniqueBgClassName, { [`${bodyCls}-visible`]: motionVisible }); return /*#__PURE__*/_react.default.createElement("div", { className: cls, style: { '--arrow-x': `${arrowPos?.x || 0}px`, '--arrow-y': `${arrowPos?.y || 0}px`, ...cachedOffsetStyleRef.current, ...sizeStyle, ...motionStyle, ...uniqueBgStyle } }); }); }; var _default = exports.default = UniqueBody;