UNPKG

zarm

Version:

基于 React 的移动端UI库

169 lines (143 loc) 6.83 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _bem = require("@zarm-design/bem"); var React = _interopRequireWildcard(require("react")); var _configProvider = require("../config-provider"); var _mask = _interopRequireDefault(require("../mask")); var _transition = _interopRequireDefault(require("../transition")); var _trigger = _interopRequireDefault(require("../trigger")); var _dom = require("../utils/dom"); var _hooks = require("../utils/hooks"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) { if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } } return n.default = e, t && t.set(e, n), n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var TRANSITION_NAMES = { top: 'move-down', bottom: 'move-up', center: 'fade', left: 'move-left', right: 'move-right' }; var Popup = /*#__PURE__*/React.forwardRef(function (props, ref) { var width = props.width, destroy = props.destroy, forceRender = props.forceRender, visible = props.visible, animationType = props.animationType, animationDuration = props.animationDuration, lockScroll = props.lockScroll, direction = props.direction, mask = props.mask, maskClassName = props.maskClassName, maskStyle = props.maskStyle, maskColor = props.maskColor, maskOpacity = props.maskOpacity, afterOpen = props.afterOpen, afterClose = props.afterClose, onOpen = props.onOpen, onClose = props.onClose, onMaskClick = props.onMaskClick, onEsc = props.onEsc, children = props.children; var _React$useContext = React.useContext(_configProvider.ConfigContext), prefixCls = _React$useContext.prefixCls, globalMountContainer = _React$useContext.mountContainer; var nodeRef = React.useRef(null); var maskRef = React.useRef(null); var bem = (0, _bem.createBEM)('popup', { prefixCls: prefixCls }); (0, _hooks.useLockScroll)(visible && lockScroll); var handleEsc = React.useCallback(function () { onEsc === null || onEsc === void 0 ? void 0 : onEsc(); }, []); var handleClick = function handleClick(event) { var _maskRef$current; event.stopPropagation(); if (nodeRef.current !== event.target && nodeRef.current.contains(event.target)) { return; } (_maskRef$current = maskRef.current) === null || _maskRef$current === void 0 ? void 0 : _maskRef$current.click(); }; var transitionName = animationType !== null && animationType !== void 0 ? animationType : TRANSITION_NAMES[direction]; React.useImperativeHandle(ref, function () { return nodeRef.current; }); return /*#__PURE__*/React.createElement(_trigger.default, { visible: visible, onClose: handleEsc }, mask && /*#__PURE__*/React.createElement(_mask.default, { ref: maskRef, className: maskClassName, style: maskStyle, visible: visible, color: maskColor, opacity: maskOpacity, animationDuration: animationDuration, mountContainer: props.mountContainer, forceRender: forceRender, destroy: destroy, onClick: function onClick(e) { e.stopPropagation(); onMaskClick && onMaskClick(e); } }), /*#__PURE__*/React.createElement(_transition.default, { nodeRef: nodeRef, visible: visible, tranisitionName: "".concat(prefixCls, "-").concat(transitionName), duration: animationDuration, forceRender: forceRender, destroy: destroy, onEnter: function onEnter() { afterOpen === null || afterOpen === void 0 ? void 0 : afterOpen(); }, onEnterActive: function onEnterActive() { onOpen === null || onOpen === void 0 ? void 0 : onOpen(); }, onLeaveActive: function onLeaveActive() { onClose === null || onClose === void 0 ? void 0 : onClose(); }, onLeaveEnd: function onLeaveEnd() { afterClose === null || afterClose === void 0 ? void 0 : afterClose(); } }, function (_ref, setNodeRef) { var _props$mountContainer; var className = _ref.className, style = _ref.style; var display = style.display, restStyle = (0, _objectWithoutProperties2.default)(style, ["display"]); return (0, _dom.renderToContainer)((_props$mountContainer = props.mountContainer) !== null && _props$mountContainer !== void 0 ? _props$mountContainer : globalMountContainer, /*#__PURE__*/React.createElement("div", { className: bem('wrapper', [{ center: direction === 'center' }, props.className]), style: _objectSpread(_objectSpread({}, props.style), {}, { display: display }), onClick: handleClick }, /*#__PURE__*/React.createElement("div", { ref: setNodeRef, className: bem([(0, _defineProperty2.default)({}, "".concat(direction), !!direction), className]), style: _objectSpread(_objectSpread({}, restStyle), {}, { width: width }) }, children))); })); }); Popup.displayName = 'Popup'; Popup.defaultProps = { visible: false, mask: true, direction: 'bottom', destroy: true, lockScroll: true }; var _default = Popup; exports.default = _default;