UNPKG

dora-ui

Version:

A React.js Mobile UI Library

195 lines (165 loc) 7.65 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 = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _reactTransitionGroup = require("react-transition-group"); var _propTypes = _interopRequireDefault(require("prop-types")); var _portal = _interopRequireDefault(require("../portal")); var _utils = require("../utils"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var prefixCls = 'dora-popup'; var positions = ['top', 'right', 'bottom', 'left', 'center']; var Popup = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(Popup, _Component); function Popup() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, Popup); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Popup)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasFirstRendered", false); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleMaskClick", function () { var _this$props = _this.props, onClose = _this$props.onClose, maskClosable = _this$props.maskClosable; if (maskClosable && (0, _utils.isFunction)(onClose)) { onClose(); } }); return _this; } (0, _createClass2.default)(Popup, [{ key: "componentDidMount", value: function componentDidMount() { var _this$props2 = this.props, visible = _this$props2.visible, mask = _this$props2.mask, stopScrollUnderMask = _this$props2.stopScrollUnderMask; if (visible && mask && stopScrollUnderMask) (0, _utils.stopBodyScroll)(true); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this$props3 = this.props, visible = _this$props3.visible, mask = _this$props3.mask, stopScrollUnderMask = _this$props3.stopScrollUnderMask; if (mask && stopScrollUnderMask) { if (prevProps.visible !== visible && visible) (0, _utils.stopBodyScroll)(true); if (prevProps.visible !== visible && !visible) (0, _utils.stopBodyScroll)(false); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { var _this$props4 = this.props, mask = _this$props4.mask, stopScrollUnderMask = _this$props4.stopScrollUnderMask; if (mask && stopScrollUnderMask) { (0, _utils.stopBodyScroll)(false); } } }, { key: "render", value: function render() { var _this$props5 = this.props, visible = _this$props5.visible, mask = _this$props5.mask, position = _this$props5.position, children = _this$props5.children, node = _this$props5.node, wrapClassName = _this$props5.wrapClassName, destroyOnClose = _this$props5.destroyOnClose, contentStyle = _this$props5.contentStyle, transitionDuration = _this$props5.transitionDuration; if (!this.hasFirstRendered && !visible) return null; this.hasFirstRendered = true; var rootCls = (0, _classnames.default)(wrapClassName, prefixCls, "".concat(prefixCls, "__").concat(position), (0, _defineProperty2.default)({}, "".concat(prefixCls, "__mask"), mask)); return _react.default.createElement(_portal.default, { node: node }, _react.default.createElement("div", { className: rootCls }, _react.default.createElement(_reactTransitionGroup.CSSTransition, { in: visible, timeout: 350, classNames: "dora-fade", appear: true }, _react.default.createElement("div", { className: "".concat(prefixCls, "-mask"), onClick: this.handleMaskClick })), _react.default.createElement(_reactTransitionGroup.CSSTransition, { in: visible, timeout: transitionDuration, classNames: this.transitionName, unmountOnExit: destroyOnClose, appear: true }, _react.default.createElement("div", { className: "".concat(prefixCls, "-content"), style: _objectSpread({}, contentStyle) }, children)))); } }, { key: "transitionName", get: function get() { var _this$props6 = this.props, position = _this$props6.position, transitionName = _this$props6.transitionName; if (transitionName) return transitionName; var transitionNames = { bottom: 'dora-slide-up', right: 'dora-slide-left', left: 'dora-slide-right', top: 'dora-slide-down', center: 'dora-fade' }; return transitionNames[position]; } }]); return Popup; }(_react.Component); (0, _defineProperty2.default)(Popup, "propTypes", { node: _propTypes.default.any, visible: _propTypes.default.bool, position: _propTypes.default.oneOf(positions), mask: _propTypes.default.bool, maskClosable: _propTypes.default.bool, onClose: _propTypes.default.func, wrapClassName: _propTypes.default.string, contentStyle: _propTypes.default.object, stopScrollUnderMask: _propTypes.default.bool, destroyOnClose: _propTypes.default.bool, transitionName: _propTypes.default.string, transitionDuration: _propTypes.default.number }); (0, _defineProperty2.default)(Popup, "defaultProps", { visible: false, position: 'center', mask: true, maskClosable: true, onClose: function onClose() {}, wrapClassName: '', contentStyle: {}, stopScrollUnderMask: true, destroyOnClose: false, transitionName: '', transitionDuration: 350 }); var _default = Popup; exports.default = _default;