UNPKG

11.4 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
16var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
18var React = _interopRequireWildcard(require("react"));
19
20var _rcDrawer = _interopRequireDefault(require("rc-drawer"));
21
22var _getScrollBarSize = _interopRequireDefault(require("rc-util/lib/getScrollBarSize"));
23
24var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons/CloseOutlined"));
25
26var _classnames = _interopRequireDefault(require("classnames"));
27
28var _configProvider = require("../config-provider");
29
30var _type = require("../_util/type");
31
32var _useForceUpdate = _interopRequireDefault(require("../_util/hooks/useForceUpdate"));
33
34function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
36function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
38var __rest = void 0 && (void 0).__rest || function (s, e) {
39 var t = {};
40
41 for (var p in s) {
42 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
43 }
44
45 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
46 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
47 }
48 return t;
49};
50
51var DrawerContext = /*#__PURE__*/React.createContext(null);
52var PlacementTypes = (0, _type.tuple)('top', 'right', 'bottom', 'left');
53var defaultPushState = {
54 distance: 180
55};
56var Drawer = /*#__PURE__*/React.forwardRef(function (_a, ref) {
57 var _a$width = _a.width,
58 width = _a$width === void 0 ? 256 : _a$width,
59 _a$height = _a.height,
60 height = _a$height === void 0 ? 256 : _a$height,
61 _a$closable = _a.closable,
62 closable = _a$closable === void 0 ? true : _a$closable,
63 _a$placement = _a.placement,
64 placement = _a$placement === void 0 ? 'right' : _a$placement,
65 _a$maskClosable = _a.maskClosable,
66 maskClosable = _a$maskClosable === void 0 ? true : _a$maskClosable,
67 _a$mask = _a.mask,
68 mask = _a$mask === void 0 ? true : _a$mask,
69 _a$level = _a.level,
70 level = _a$level === void 0 ? null : _a$level,
71 _a$keyboard = _a.keyboard,
72 keyboard = _a$keyboard === void 0 ? true : _a$keyboard,
73 _a$push = _a.push,
74 _push = _a$push === void 0 ? defaultPushState : _a$push,
75 _a$closeIcon = _a.closeIcon,
76 closeIcon = _a$closeIcon === void 0 ? /*#__PURE__*/React.createElement(_CloseOutlined["default"], null) : _a$closeIcon,
77 bodyStyle = _a.bodyStyle,
78 drawerStyle = _a.drawerStyle,
79 prefixCls = _a.prefixCls,
80 className = _a.className,
81 direction = _a.direction,
82 visible = _a.visible,
83 children = _a.children,
84 zIndex = _a.zIndex,
85 destroyOnClose = _a.destroyOnClose,
86 style = _a.style,
87 title = _a.title,
88 headerStyle = _a.headerStyle,
89 onClose = _a.onClose,
90 footer = _a.footer,
91 footerStyle = _a.footerStyle,
92 rest = __rest(_a, ["width", "height", "closable", "placement", "maskClosable", "mask", "level", "keyboard", "push", "closeIcon", "bodyStyle", "drawerStyle", "prefixCls", "className", "direction", "visible", "children", "zIndex", "destroyOnClose", "style", "title", "headerStyle", "onClose", "footer", "footerStyle"]);
93
94 var forceUpdate = (0, _useForceUpdate["default"])();
95
96 var _React$useState = React.useState(false),
97 _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
98 internalPush = _React$useState2[0],
99 setPush = _React$useState2[1];
100
101 var parentDrawer = React.useContext(DrawerContext);
102 var destroyClose = React.useRef(false);
103 React.useEffect(function () {
104 // fix: delete drawer in child and re-render, no push started.
105 // <Drawer>{show && <Drawer />}</Drawer>
106 if (visible && parentDrawer) {
107 parentDrawer.push();
108 }
109
110 return function () {
111 if (parentDrawer) {
112 parentDrawer.pull(); // parentDrawer = null;
113 }
114 };
115 }, []);
116 React.useEffect(function () {
117 if (parentDrawer) {
118 if (visible) {
119 parentDrawer.push();
120 } else {
121 parentDrawer.pull();
122 }
123 }
124 }, [visible]);
125 var operations = React.useMemo(function () {
126 return {
127 push: function push() {
128 if (_push) {
129 setPush(true);
130 }
131 },
132 pull: function pull() {
133 if (_push) {
134 setPush(false);
135 }
136 }
137 };
138 }, [_push]);
139 React.useImperativeHandle(ref, function () {
140 return operations;
141 }, [operations]);
142 var isDestroyOnClose = destroyOnClose && !visible;
143
144 var onDestroyTransitionEnd = function onDestroyTransitionEnd() {
145 if (!isDestroyOnClose) {
146 return;
147 }
148
149 if (!visible) {
150 destroyClose.current = true;
151 forceUpdate();
152 }
153 };
154
155 var getOffsetStyle = function getOffsetStyle() {
156 // https://github.com/ant-design/ant-design/issues/24287
157 if (!visible && !mask) {
158 return {};
159 }
160
161 var offsetStyle = {};
162
163 if (placement === 'left' || placement === 'right') {
164 offsetStyle.width = width;
165 } else {
166 offsetStyle.height = height;
167 }
168
169 return offsetStyle;
170 };
171
172 var getRcDrawerStyle = function getRcDrawerStyle() {
173 // get drawer push width or height
174 var getPushTransform = function getPushTransform(_placement) {
175 var distance;
176
177 if (typeof _push === 'boolean') {
178 distance = _push ? defaultPushState.distance : 0;
179 } else {
180 distance = _push.distance;
181 }
182
183 distance = parseFloat(String(distance || 0));
184
185 if (_placement === 'left' || _placement === 'right') {
186 return "translateX(".concat(_placement === 'left' ? distance : -distance, "px)");
187 }
188
189 if (_placement === 'top' || _placement === 'bottom') {
190 return "translateY(".concat(_placement === 'top' ? distance : -distance, "px)");
191 }
192 }; // 当无 mask 时,将 width 应用到外层容器上
193 // 解决 https://github.com/ant-design/ant-design/issues/12401 的问题
194
195
196 var offsetStyle = mask ? {} : getOffsetStyle();
197 return (0, _extends2["default"])((0, _extends2["default"])({
198 zIndex: zIndex,
199 transform: internalPush ? getPushTransform(placement) : undefined
200 }, offsetStyle), style);
201 };
202
203 function renderCloseIcon() {
204 return closable && /*#__PURE__*/React.createElement("button", {
205 type: "button",
206 onClick: onClose,
207 "aria-label": "Close",
208 className: "".concat(prefixCls, "-close"),
209 style: {
210 '--scroll-bar': "".concat((0, _getScrollBarSize["default"])(), "px")
211 }
212 }, closeIcon);
213 }
214
215 function renderHeader() {
216 if (!title && !closable) {
217 return null;
218 }
219
220 var headerClassName = title ? "".concat(prefixCls, "-header") : "".concat(prefixCls, "-header-no-title");
221 return /*#__PURE__*/React.createElement("div", {
222 className: headerClassName,
223 style: headerStyle
224 }, title && /*#__PURE__*/React.createElement("div", {
225 className: "".concat(prefixCls, "-title")
226 }, title), closable && renderCloseIcon());
227 }
228
229 function renderFooter() {
230 if (!footer) {
231 return null;
232 }
233
234 var footerClassName = "".concat(prefixCls, "-footer");
235 return /*#__PURE__*/React.createElement("div", {
236 className: footerClassName,
237 style: footerStyle
238 }, footer);
239 } // render drawer body dom
240
241
242 var renderBody = function renderBody() {
243 if (destroyClose.current && !visible) {
244 return null;
245 }
246
247 destroyClose.current = false;
248 var containerStyle = {};
249
250 if (isDestroyOnClose) {
251 // Increase the opacity transition, delete children after closing.
252 containerStyle.opacity = 0;
253 containerStyle.transition = 'opacity .3s';
254 }
255
256 return /*#__PURE__*/React.createElement("div", {
257 className: "".concat(prefixCls, "-wrapper-body"),
258 style: (0, _extends2["default"])((0, _extends2["default"])({}, containerStyle), drawerStyle),
259 onTransitionEnd: onDestroyTransitionEnd
260 }, renderHeader(), /*#__PURE__*/React.createElement("div", {
261 className: "".concat(prefixCls, "-body"),
262 style: bodyStyle
263 }, children), renderFooter());
264 };
265
266 var drawerClassName = (0, _classnames["default"])((0, _defineProperty2["default"])({
267 'no-mask': !mask
268 }, "".concat(prefixCls, "-rtl"), direction === 'rtl'), className);
269 var offsetStyle = mask ? getOffsetStyle() : {};
270 return /*#__PURE__*/React.createElement(DrawerContext.Provider, {
271 value: operations
272 }, /*#__PURE__*/React.createElement(_rcDrawer["default"], (0, _extends2["default"])({
273 handler: false
274 }, (0, _extends2["default"])({
275 placement: placement,
276 prefixCls: prefixCls,
277 maskClosable: maskClosable,
278 level: level,
279 keyboard: keyboard,
280 children: children,
281 onClose: onClose
282 }, rest), offsetStyle, {
283 open: visible,
284 showMask: mask,
285 style: getRcDrawerStyle(),
286 className: drawerClassName
287 }), renderBody()));
288});
289Drawer.displayName = 'Drawer';
290var DrawerWrapper = /*#__PURE__*/React.forwardRef(function (props, ref) {
291 var customizePrefixCls = props.prefixCls,
292 customizeGetContainer = props.getContainer;
293
294 var _React$useContext = React.useContext(_configProvider.ConfigContext),
295 getPopupContainer = _React$useContext.getPopupContainer,
296 getPrefixCls = _React$useContext.getPrefixCls,
297 direction = _React$useContext.direction;
298
299 var prefixCls = getPrefixCls('drawer', customizePrefixCls);
300 var getContainer = // 有可能为 false,所以不能直接判断
301 customizeGetContainer === undefined && getPopupContainer ? function () {
302 return getPopupContainer(document.body);
303 } : customizeGetContainer;
304 return /*#__PURE__*/React.createElement(Drawer, (0, _extends2["default"])({}, props, {
305 ref: ref,
306 prefixCls: prefixCls,
307 getContainer: getContainer,
308 direction: direction
309 }));
310});
311DrawerWrapper.displayName = 'DrawerWrapper';
312var _default = DrawerWrapper;
313exports["default"] = _default;
\No newline at end of file