123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- "use strict";
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- 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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
- var _classnames = _interopRequireDefault(require("classnames"));
- var _rcMotion = _interopRequireDefault(require("rc-motion"));
- var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
- var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
- var React = _interopRequireWildcard(require("react"));
- var _context = _interopRequireDefault(require("./context"));
- var _DrawerPanel = _interopRequireDefault(require("./DrawerPanel"));
- var _util = require("./util");
- var sentinelStyle = {
- width: 0,
- height: 0,
- overflow: 'hidden',
- outline: 'none',
- position: 'absolute'
- };
- function DrawerPopup(props, ref) {
- var _ref, _pushConfig$distance, _pushConfig;
- var prefixCls = props.prefixCls,
- open = props.open,
- placement = props.placement,
- inline = props.inline,
- push = props.push,
- forceRender = props.forceRender,
- autoFocus = props.autoFocus,
- keyboard = props.keyboard,
- drawerClassNames = props.classNames,
- rootClassName = props.rootClassName,
- rootStyle = props.rootStyle,
- zIndex = props.zIndex,
- className = props.className,
- id = props.id,
- style = props.style,
- motion = props.motion,
- width = props.width,
- height = props.height,
- children = props.children,
- mask = props.mask,
- maskClosable = props.maskClosable,
- maskMotion = props.maskMotion,
- maskClassName = props.maskClassName,
- maskStyle = props.maskStyle,
- afterOpenChange = props.afterOpenChange,
- onClose = props.onClose,
- onMouseEnter = props.onMouseEnter,
- onMouseOver = props.onMouseOver,
- onMouseLeave = props.onMouseLeave,
- onClick = props.onClick,
- onKeyDown = props.onKeyDown,
- onKeyUp = props.onKeyUp,
- styles = props.styles,
- drawerRender = props.drawerRender;
- // ================================ Refs ================================
- var panelRef = React.useRef();
- var sentinelStartRef = React.useRef();
- var sentinelEndRef = React.useRef();
- React.useImperativeHandle(ref, function () {
- return panelRef.current;
- });
- var onPanelKeyDown = function onPanelKeyDown(event) {
- var keyCode = event.keyCode,
- shiftKey = event.shiftKey;
- switch (keyCode) {
- // Tab active
- case _KeyCode.default.TAB:
- {
- if (keyCode === _KeyCode.default.TAB) {
- if (!shiftKey && document.activeElement === sentinelEndRef.current) {
- var _sentinelStartRef$cur;
- (_sentinelStartRef$cur = sentinelStartRef.current) === null || _sentinelStartRef$cur === void 0 || _sentinelStartRef$cur.focus({
- preventScroll: true
- });
- } else if (shiftKey && document.activeElement === sentinelStartRef.current) {
- var _sentinelEndRef$curre;
- (_sentinelEndRef$curre = sentinelEndRef.current) === null || _sentinelEndRef$curre === void 0 || _sentinelEndRef$curre.focus({
- preventScroll: true
- });
- }
- }
- break;
- }
- // Close
- case _KeyCode.default.ESC:
- {
- if (onClose && keyboard) {
- event.stopPropagation();
- onClose(event);
- }
- break;
- }
- }
- };
- // ========================== Control ===========================
- // Auto Focus
- React.useEffect(function () {
- if (open && autoFocus) {
- var _panelRef$current;
- (_panelRef$current = panelRef.current) === null || _panelRef$current === void 0 || _panelRef$current.focus({
- preventScroll: true
- });
- }
- }, [open]);
- // ============================ Push ============================
- var _React$useState = React.useState(false),
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
- pushed = _React$useState2[0],
- setPushed = _React$useState2[1];
- var parentContext = React.useContext(_context.default);
- // Merge push distance
- var pushConfig;
- if (typeof push === 'boolean') {
- pushConfig = push ? {} : {
- distance: 0
- };
- } else {
- pushConfig = push || {};
- }
- var pushDistance = (_ref = (_pushConfig$distance = (_pushConfig = pushConfig) === null || _pushConfig === void 0 ? void 0 : _pushConfig.distance) !== null && _pushConfig$distance !== void 0 ? _pushConfig$distance : parentContext === null || parentContext === void 0 ? void 0 : parentContext.pushDistance) !== null && _ref !== void 0 ? _ref : 180;
- var mergedContext = React.useMemo(function () {
- return {
- pushDistance: pushDistance,
- push: function push() {
- setPushed(true);
- },
- pull: function pull() {
- setPushed(false);
- }
- };
- }, [pushDistance]);
- // ========================= ScrollLock =========================
- // Tell parent to push
- React.useEffect(function () {
- if (open) {
- var _parentContext$push;
- parentContext === null || parentContext === void 0 || (_parentContext$push = parentContext.push) === null || _parentContext$push === void 0 || _parentContext$push.call(parentContext);
- } else {
- var _parentContext$pull;
- parentContext === null || parentContext === void 0 || (_parentContext$pull = parentContext.pull) === null || _parentContext$pull === void 0 || _parentContext$pull.call(parentContext);
- }
- }, [open]);
- // Clean up
- React.useEffect(function () {
- return function () {
- var _parentContext$pull2;
- parentContext === null || parentContext === void 0 || (_parentContext$pull2 = parentContext.pull) === null || _parentContext$pull2 === void 0 || _parentContext$pull2.call(parentContext);
- };
- }, []);
- // ============================ Mask ============================
- var maskNode = /*#__PURE__*/React.createElement(_rcMotion.default, (0, _extends2.default)({
- key: "mask"
- }, maskMotion, {
- visible: mask && open
- }), function (_ref2, maskRef) {
- var motionMaskClassName = _ref2.className,
- motionMaskStyle = _ref2.style;
- return /*#__PURE__*/React.createElement("div", {
- className: (0, _classnames.default)("".concat(prefixCls, "-mask"), motionMaskClassName, drawerClassNames === null || drawerClassNames === void 0 ? void 0 : drawerClassNames.mask, maskClassName),
- style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, motionMaskStyle), maskStyle), styles === null || styles === void 0 ? void 0 : styles.mask),
- onClick: maskClosable && open ? onClose : undefined,
- ref: maskRef
- });
- });
- // =========================== Panel ============================
- var motionProps = typeof motion === 'function' ? motion(placement) : motion;
- var wrapperStyle = {};
- if (pushed && pushDistance) {
- switch (placement) {
- case 'top':
- wrapperStyle.transform = "translateY(".concat(pushDistance, "px)");
- break;
- case 'bottom':
- wrapperStyle.transform = "translateY(".concat(-pushDistance, "px)");
- break;
- case 'left':
- wrapperStyle.transform = "translateX(".concat(pushDistance, "px)");
- break;
- default:
- wrapperStyle.transform = "translateX(".concat(-pushDistance, "px)");
- break;
- }
- }
- if (placement === 'left' || placement === 'right') {
- wrapperStyle.width = (0, _util.parseWidthHeight)(width);
- } else {
- wrapperStyle.height = (0, _util.parseWidthHeight)(height);
- }
- var eventHandlers = {
- onMouseEnter: onMouseEnter,
- onMouseOver: onMouseOver,
- onMouseLeave: onMouseLeave,
- onClick: onClick,
- onKeyDown: onKeyDown,
- onKeyUp: onKeyUp
- };
- var panelNode = /*#__PURE__*/React.createElement(_rcMotion.default, (0, _extends2.default)({
- key: "panel"
- }, motionProps, {
- visible: open,
- forceRender: forceRender,
- onVisibleChanged: function onVisibleChanged(nextVisible) {
- afterOpenChange === null || afterOpenChange === void 0 || afterOpenChange(nextVisible);
- },
- removeOnLeave: false,
- leavedClassName: "".concat(prefixCls, "-content-wrapper-hidden")
- }), function (_ref3, motionRef) {
- var motionClassName = _ref3.className,
- motionStyle = _ref3.style;
- var content = /*#__PURE__*/React.createElement(_DrawerPanel.default, (0, _extends2.default)({
- id: id,
- containerRef: motionRef,
- prefixCls: prefixCls,
- className: (0, _classnames.default)(className, drawerClassNames === null || drawerClassNames === void 0 ? void 0 : drawerClassNames.content),
- style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), styles === null || styles === void 0 ? void 0 : styles.content)
- }, (0, _pickAttrs.default)(props, {
- aria: true
- }), eventHandlers), children);
- return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
- className: (0, _classnames.default)("".concat(prefixCls, "-content-wrapper"), drawerClassNames === null || drawerClassNames === void 0 ? void 0 : drawerClassNames.wrapper, motionClassName),
- style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, wrapperStyle), motionStyle), styles === null || styles === void 0 ? void 0 : styles.wrapper)
- }, (0, _pickAttrs.default)(props, {
- data: true
- })), drawerRender ? drawerRender(content) : content);
- });
- // =========================== Render ===========================
- var containerStyle = (0, _objectSpread2.default)({}, rootStyle);
- if (zIndex) {
- containerStyle.zIndex = zIndex;
- }
- return /*#__PURE__*/React.createElement(_context.default.Provider, {
- value: mergedContext
- }, /*#__PURE__*/React.createElement("div", {
- className: (0, _classnames.default)(prefixCls, "".concat(prefixCls, "-").concat(placement), rootClassName, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-open"), open), "".concat(prefixCls, "-inline"), inline)),
- style: containerStyle,
- tabIndex: -1,
- ref: panelRef,
- onKeyDown: onPanelKeyDown
- }, maskNode, /*#__PURE__*/React.createElement("div", {
- tabIndex: 0,
- ref: sentinelStartRef,
- style: sentinelStyle,
- "aria-hidden": "true",
- "data-sentinel": "start"
- }), panelNode, /*#__PURE__*/React.createElement("div", {
- tabIndex: 0,
- ref: sentinelEndRef,
- style: sentinelStyle,
- "aria-hidden": "true",
- "data-sentinel": "end"
- })));
- }
- var RefDrawerPopup = /*#__PURE__*/React.forwardRef(DrawerPopup);
- if (process.env.NODE_ENV !== 'production') {
- RefDrawerPopup.displayName = 'DrawerPopup';
- }
- var _default = exports.default = RefDrawerPopup;
|