UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

187 lines (184 loc) 7.82 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["width", "height", "size", "closable", "mask", "push", "closeIcon", "bodyStyle", "drawerStyle", "className", "visible", "open", "children", "style", "title", "headerStyle", "onClose", "footer", "footerStyle", "prefixCls", "getContainer", "extra", "afterVisibleChange", "afterOpenChange", "drawerPadding"]; import classNames from 'classnames'; import RcDrawer from 'rc-drawer'; import * as React from 'react'; import { ConfigContext } from "../config-provider"; import { NoFormStyle } from "../form/context"; import { getTransitionName } from "../_util/motion"; import { tuple } from "../_util/type"; import warning from "../_util/warning"; import IconFont from "../icon-font"; import Button from "../button"; import { assign } from 'lodash'; var SizeTypes = tuple('default', 'large', 'vlarge'); var defaultPushState = { distance: 120 }; function Drawer(props) { var width = props.width, height = props.height, _props$size = props.size, size = _props$size === void 0 ? 'default' : _props$size, _props$closable = props.closable, closable = _props$closable === void 0 ? true : _props$closable, _props$mask = props.mask, mask = _props$mask === void 0 ? true : _props$mask, _props$push = props.push, push = _props$push === void 0 ? defaultPushState : _props$push, _props$closeIcon = props.closeIcon, closeIcon = _props$closeIcon === void 0 ? /*#__PURE__*/React.createElement(IconFont, { type: "icon-a-tongyongaRX" }) : _props$closeIcon, bodyStyle = props.bodyStyle, drawerStyle = props.drawerStyle, className = props.className, visible = props.visible, open = props.open, children = props.children, style = props.style, title = props.title, headerStyle = props.headerStyle, onClose = props.onClose, footer = props.footer, footerStyle = props.footerStyle, customizePrefixCls = props.prefixCls, customizeGetContainer = props.getContainer, extra = props.extra, afterVisibleChange = props.afterVisibleChange, _afterOpenChange = props.afterOpenChange, _props$drawerPadding = props.drawerPadding, drawerPadding = _props$drawerPadding === void 0 ? 24 : _props$drawerPadding, rest = _objectWithoutProperties(props, _excluded); var _React$useContext = React.useContext(ConfigContext), getPopupContainer = _React$useContext.getPopupContainer, getPrefixCls = _React$useContext.getPrefixCls, direction = _React$useContext.direction; var prefixCls = getPrefixCls('drawer', customizePrefixCls); var getContainer = // 有可能为 false,所以不能直接判断 customizeGetContainer === undefined && getPopupContainer ? function () { return getPopupContainer(document.body); } : customizeGetContainer; var closeIconNode = closable && /*#__PURE__*/React.createElement(Button, { type: "text", shape: "circle", onClick: onClose, "aria-label": "Close", className: "".concat(prefixCls, "-close") }, closeIcon); [['visible', 'open'], ['afterVisibleChange', 'afterOpenChange']].forEach(function (_ref) { var _ref2 = _slicedToArray(_ref, 2), deprecatedName = _ref2[0], newName = _ref2[1]; warning(!(deprecatedName in props), 'Drawer', "`".concat(deprecatedName, "` is deprecated which will be removed in next major version, please use `").concat(newName, "` instead.")); }); function renderHeader() { if (!title && !closable) { return null; } return /*#__PURE__*/React.createElement("div", { className: classNames("".concat(prefixCls, "-header"), _defineProperty({}, "".concat(prefixCls, "-header-close-only"), closable && !title && !extra)), style: headerStyle }, /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-header-title") }, closeIconNode, title && /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-title") }, title)), extra && /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-extra") }, extra)); } function renderFooter() { if (!footer) { return null; } var footerClassName = "".concat(prefixCls, "-footer"); return /*#__PURE__*/React.createElement("div", { className: footerClassName, style: footerStyle }, footer); } var drawerClassName = classNames(_defineProperty({ 'no-mask': !mask }, "".concat(prefixCls, "-rtl"), direction === 'rtl'), 'lm_drawer', className); // ============================ Size ============================ var mergedWidth = React.useMemo(function () { return width !== null && width !== void 0 ? width : size === 'large' ? 720 : size === 'vlarge' ? 1152 : 440; }, [width, size]); var mergedHeight = React.useMemo(function () { return height !== null && height !== void 0 ? height : size === 'large' ? 720 : size === 'vlarge' ? 1152 : 440; }, [height, size]); // =========================== Motion =========================== var maskMotion = { motionName: getTransitionName(prefixCls, 'mask-motion'), motionAppear: true, motionEnter: true, motionLeave: true, motionDeadline: 500 }; var panelMotion = function panelMotion(motionPlacement) { return { motionName: getTransitionName(prefixCls, "panel-motion-".concat(motionPlacement)), motionAppear: true, motionEnter: true, motionLeave: true, motionDeadline: 500 }; }; // =========================== Render =========================== return /*#__PURE__*/React.createElement(NoFormStyle, { status: true, override: true }, /*#__PURE__*/React.createElement(RcDrawer, _extends({ prefixCls: prefixCls, onClose: onClose }, rest, { open: open || visible, mask: mask, push: size === 'vlarge' ? { distance: 0 } : push, width: mergedWidth, height: mergedHeight, rootClassName: drawerClassName, getContainer: getContainer, afterOpenChange: function afterOpenChange(isOpen) { _afterOpenChange === null || _afterOpenChange === void 0 ? void 0 : _afterOpenChange(isOpen); afterVisibleChange === null || afterVisibleChange === void 0 ? void 0 : afterVisibleChange(isOpen); }, maskMotion: maskMotion, motion: panelMotion, rootStyle: style, contentWrapperStyle: assign(_objectSpread({}, rest.contentWrapperStyle), drawerPadding ? rest.placement === 'top' ? { top: "".concat(drawerPadding, "px"), right: "".concat(drawerPadding, "px"), left: "".concat(drawerPadding, "px") } : rest.placement === 'left' ? { top: "".concat(drawerPadding, "px"), left: "".concat(drawerPadding, "px"), bottom: "".concat(drawerPadding, "px") } : rest.placement === 'bottom' ? { bottom: "".concat(drawerPadding, "px"), right: "".concat(drawerPadding, "px"), left: "".concat(drawerPadding, "px") } : { top: "".concat(drawerPadding, "px"), right: "".concat(drawerPadding, "px"), bottom: "".concat(drawerPadding, "px") } : {}) }), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-wrapper-body"), style: _objectSpread({}, drawerStyle) }, renderHeader(), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-body"), style: bodyStyle }, children), renderFooter()))); } if (process.env.NODE_ENV !== 'production') { Drawer.displayName = 'Drawer'; } export default Drawer;