UNPKG

ps-frame-father

Version:

An enterprise-class UI design language and React components implementation

133 lines (112 loc) 4.8 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _propTypes = _interopRequireDefault(require("prop-types")); require("./index.css"); /** * Drawer 抽屉组件 * @param {visible} bool 抽屉是否可见 * @param {closable} bool 是否显示右上角的关闭按钮 * @param {destroyOnClose} bool 关闭时销毁里面的子元素 * @param {getContainer} HTMLElement 指定 Drawer 挂载的 HTML 节点, false 为挂载在当前 dom * @param {maskClosable} bool 点击蒙层是否允许关闭抽屉 * @param {mask} bool 是否展示遮罩 * @param {drawerStyle} object 用来设置抽屉弹出层样式 * @param {width} number|string 弹出层宽度 * @param {zIndex} number 弹出层层级 * @param {placement} string 抽屉方向 * @param {onClose} string 点击关闭时的回调 */ function Drawer(props) { var _props$closable = props.closable, closable = _props$closable === void 0 ? true : _props$closable, destroyOnClose = props.destroyOnClose, _props$getContainer = props.getContainer, getContainer = _props$getContainer === void 0 ? document.body : _props$getContainer, _props$maskClosable = props.maskClosable, maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable, _props$mask = props.mask, mask = _props$mask === void 0 ? true : _props$mask, drawerStyle = props.drawerStyle, _props$width = props.width, width = _props$width === void 0 ? '300px' : _props$width, _props$zIndex = props.zIndex, zIndex = _props$zIndex === void 0 ? 10 : _props$zIndex, _props$placement = props.placement, placement = _props$placement === void 0 ? 'right' : _props$placement, onClose = props.onClose, children = props.children; var _useState = (0, _react.useState)(props.visible), _useState2 = (0, _slicedToArray2.default)(_useState, 2), visible = _useState2[0], setVisible = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), isDesChild = _useState4[0], setIsDesChild = _useState4[1]; var handleClose = function handleClose() { onClose && onClose(); setVisible(function (prev) { if (getContainer !== false && prev) { getContainer.style.overflow = 'auto'; } return false; }); if (destroyOnClose) { setIsDesChild(true); } }; (0, _react.useEffect)(function () { setVisible(function () { if (getContainer !== false && props.visible) { getContainer.style.overflow = 'hidden'; } return props.visible; }); setIsDesChild(false); }, [props.visible, getContainer]); var childDom = /*#__PURE__*/_react.default.createElement("div", { className: "xDrawerWrap", style: { position: getContainer === false ? 'absolute' : 'fixed', width: visible ? '100%' : '0', zIndex: zIndex } }, !!mask && /*#__PURE__*/_react.default.createElement("div", { className: "xDrawerMask", onClick: maskClosable ? handleClose : null }), /*#__PURE__*/_react.default.createElement("div", { className: "xDrawerContent", style: (0, _objectSpread3.default)((0, _defineProperty2.default)({ width: width }, placement, visible ? 0 : '-100%'), drawerStyle) }, isDesChild ? null : children, !!closable && /*#__PURE__*/_react.default.createElement("span", { className: "xCloseBtn", onClick: handleClose }, "X"))); return getContainer === false ? childDom : /*#__PURE__*/_reactDom.default.createPortal(childDom, getContainer); } Drawer.propTypes = { visible: _propTypes.default.bool, closable: _propTypes.default.bool, destroyOnClose: _propTypes.default.bool, getContainer: _propTypes.default.element, maskClosable: _propTypes.default.bool, mask: _propTypes.default.bool, drawerStyle: _propTypes.default.object, width: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), zIndex: _propTypes.default.number, placement: _propTypes.default.string, onClose: _propTypes.default.func }; var _default = Drawer; exports.default = _default;