You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

370 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var React = _interopRequireWildcard(require("react"));
var _rcDrawer = _interopRequireDefault(require("rc-drawer"));
var _getScrollBarSize = _interopRequireDefault(require("rc-util/lib/getScrollBarSize"));
var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons/CloseOutlined"));
var _classnames = _interopRequireDefault(require("classnames"));
var _omit = _interopRequireDefault(require("omit.js"));
var _context = require("../config-provider/context");
var _type = require("../_util/type");
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
var DrawerContext = /*#__PURE__*/React.createContext(null);
var PlacementTypes = (0, _type.tuple)('top', 'right', 'bottom', 'left');
var defaultPushState = {
distance: 180
};
var Drawer = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(Drawer, _React$Component);
var _super = (0, _createSuper2["default"])(Drawer);
function Drawer() {
var _this;
(0, _classCallCheck2["default"])(this, Drawer);
_this = _super.apply(this, arguments);
_this.state = {
push: false
};
_this.push = function () {
if (_this.props.push) {
_this.setState({
push: true
});
}
};
_this.pull = function () {
if (_this.props.push) {
_this.setState({
push: false
});
}
};
_this.onDestroyTransitionEnd = function () {
var isDestroyOnClose = _this.getDestroyOnClose();
if (!isDestroyOnClose) {
return;
}
if (!_this.props.visible) {
_this.destroyClose = true;
_this.forceUpdate();
}
};
_this.getDestroyOnClose = function () {
return _this.props.destroyOnClose && !_this.props.visible;
};
_this.getPushDistance = function () {
var push = _this.props.push;
var distance;
if (typeof push === 'boolean') {
distance = push ? defaultPushState.distance : 0;
} else {
distance = push.distance;
}
return parseFloat(String(distance || 0));
}; // get drawer push width or height
_this.getPushTransform = function (placement) {
var distance = _this.getPushDistance();
if (placement === 'left' || placement === 'right') {
return "translateX(".concat(placement === 'left' ? distance : -distance, "px)");
}
if (placement === 'top' || placement === 'bottom') {
return "translateY(".concat(placement === 'top' ? distance : -distance, "px)");
}
};
_this.getRcDrawerStyle = function () {
var _this$props = _this.props,
zIndex = _this$props.zIndex,
placement = _this$props.placement,
mask = _this$props.mask,
style = _this$props.style;
var push = _this.state.push; // 当无 mask 时,将 width 应用到外层容器上
// 解决 https://github.com/ant-design/ant-design/issues/12401 的问题
var offsetStyle = mask ? {} : _this.getOffsetStyle();
return (0, _extends2["default"])((0, _extends2["default"])({
zIndex: zIndex,
transform: push ? _this.getPushTransform(placement) : undefined
}, offsetStyle), style);
}; // render drawer body dom
_this.renderBody = function () {
var _this$props2 = _this.props,
bodyStyle = _this$props2.bodyStyle,
drawerStyle = _this$props2.drawerStyle,
prefixCls = _this$props2.prefixCls,
visible = _this$props2.visible;
if (_this.destroyClose && !visible) {
return null;
}
_this.destroyClose = false;
var containerStyle = {};
var isDestroyOnClose = _this.getDestroyOnClose();
if (isDestroyOnClose) {
// Increase the opacity transition, delete children after closing.
containerStyle.opacity = 0;
containerStyle.transition = 'opacity .3s';
}
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-wrapper-body"),
style: (0, _extends2["default"])((0, _extends2["default"])({}, containerStyle), drawerStyle),
onTransitionEnd: _this.onDestroyTransitionEnd
}, _this.renderHeader(), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-body"),
style: bodyStyle
}, _this.props.children), _this.renderFooter());
}; // render Provider for Multi-level drawer
_this.renderProvider = function (value) {
_this.parentDrawer = value;
return /*#__PURE__*/React.createElement(_context.ConfigConsumer, null, function (_ref) {
var getPopupContainer = _ref.getPopupContainer,
getPrefixCls = _ref.getPrefixCls;
var _a = _this.props,
customizePrefixCls = _a.prefixCls,
placement = _a.placement,
className = _a.className,
mask = _a.mask,
direction = _a.direction,
visible = _a.visible,
rest = __rest(_a, ["prefixCls", "placement", "className", "mask", "direction", "visible"]);
var prefixCls = getPrefixCls('select', customizePrefixCls);
var drawerClassName = (0, _classnames["default"])(className, (0, _defineProperty2["default"])({
'no-mask': !mask
}, "".concat(prefixCls, "-rtl"), direction === 'rtl'));
var offsetStyle = mask ? _this.getOffsetStyle() : {};
return /*#__PURE__*/React.createElement(DrawerContext.Provider, {
value: (0, _assertThisInitialized2["default"])(_this)
}, /*#__PURE__*/React.createElement(_rcDrawer["default"], (0, _extends2["default"])({
handler: false
}, (0, _omit["default"])(rest, ['zIndex', 'style', 'closable', 'closeIcon', 'destroyOnClose', 'drawerStyle', 'headerStyle', 'bodyStyle', 'footerStyle', 'footer', 'locale', 'title', 'push', 'visible', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'pageHeader', 'autoInsertSpaceInButton', 'width', 'height', 'dropdownMatchSelectWidth', 'getTargetContainer']), {
getContainer: // 有可能为 false所以不能直接判断
rest.getContainer === undefined && getPopupContainer ? function () {
return getPopupContainer(document.body);
} : rest.getContainer
}, offsetStyle, {
prefixCls: prefixCls,
open: visible,
showMask: mask,
placement: placement,
style: _this.getRcDrawerStyle(),
className: drawerClassName
}), _this.renderBody()));
});
};
return _this;
}
(0, _createClass2["default"])(Drawer, [{
key: "componentDidMount",
value: function componentDidMount() {
// fix: delete drawer in child and re-render, no push started.
// <Drawer>{show && <Drawer />}</Drawer>
var visible = this.props.visible;
if (visible && this.parentDrawer) {
this.parentDrawer.push();
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(preProps) {
var visible = this.props.visible;
if (preProps.visible !== visible && this.parentDrawer) {
if (visible) {
this.parentDrawer.push();
} else {
this.parentDrawer.pull();
}
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
// unmount drawer in child, clear push.
if (this.parentDrawer) {
this.parentDrawer.pull();
this.parentDrawer = null;
}
}
}, {
key: "getOffsetStyle",
value: function getOffsetStyle() {
var _this$props3 = this.props,
placement = _this$props3.placement,
width = _this$props3.width,
height = _this$props3.height,
visible = _this$props3.visible,
mask = _this$props3.mask; // https://github.com/ant-design/ant-design/issues/24287
if (!visible && !mask) {
return {};
}
var offsetStyle = {};
if (placement === 'left' || placement === 'right') {
offsetStyle.width = width;
} else {
offsetStyle.height = height;
}
return offsetStyle;
}
}, {
key: "renderHeader",
value: function renderHeader() {
var _this$props4 = this.props,
title = _this$props4.title,
prefixCls = _this$props4.prefixCls,
closable = _this$props4.closable,
headerStyle = _this$props4.headerStyle;
if (!title && !closable) {
return null;
}
var headerClassName = title ? "".concat(prefixCls, "-header") : "".concat(prefixCls, "-header-no-title");
return /*#__PURE__*/React.createElement("div", {
className: headerClassName,
style: headerStyle
}, title && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-title")
}, title), closable && this.renderCloseIcon());
}
}, {
key: "renderFooter",
value: function renderFooter() {
var _this$props5 = this.props,
footer = _this$props5.footer,
footerStyle = _this$props5.footerStyle,
prefixCls = _this$props5.prefixCls;
if (!footer) {
return null;
}
var footerClassName = "".concat(prefixCls, "-footer");
return /*#__PURE__*/React.createElement("div", {
className: footerClassName,
style: footerStyle
}, footer);
}
}, {
key: "renderCloseIcon",
value: function renderCloseIcon() {
var _this$props6 = this.props,
closable = _this$props6.closable,
_this$props6$closeIco = _this$props6.closeIcon,
closeIcon = _this$props6$closeIco === void 0 ? /*#__PURE__*/React.createElement(_CloseOutlined["default"], null) : _this$props6$closeIco,
prefixCls = _this$props6.prefixCls,
onClose = _this$props6.onClose;
return closable &&
/*#__PURE__*/
// eslint-disable-next-line react/button-has-type
React.createElement("button", {
onClick: onClose,
"aria-label": "Close",
className: "".concat(prefixCls, "-close"),
style: {
'--scroll-bar': "".concat((0, _getScrollBarSize["default"])(), "px")
}
}, closeIcon);
}
}, {
key: "render",
value: function render() {
return /*#__PURE__*/React.createElement(DrawerContext.Consumer, null, this.renderProvider);
}
}]);
return Drawer;
}(React.Component);
Drawer.defaultProps = {
width: 256,
height: 256,
closable: true,
placement: 'right',
maskClosable: true,
mask: true,
level: null,
keyboard: true,
push: defaultPushState
};
var _default = (0, _context.withConfigConsumer)({
prefixCls: 'drawer'
})(Drawer);
exports["default"] = _default;