UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

443 lines (377 loc) 14 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.drawerProps = exports.default = void 0; var _vue = require("vue"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _propsUtil = require("../_util/props-util"); var _classNames = _interopRequireDefault(require("../_util/classNames")); var _vcDrawer = _interopRequireDefault(require("../vc-drawer")); var _vueTypes = _interopRequireDefault(require("../_util/vue-types")); var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/CloseOutlined")); var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject")); var _type = require("../_util/type"); var _omit = _interopRequireDefault(require("../_util/omit")); var _devWarning = _interopRequireDefault(require("../vc-util/devWarning")); 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 PlacementTypes = (0, _type.tuple)('top', 'right', 'bottom', 'left'); var SizeTypes = (0, _type.tuple)('default', 'large'); var defaultPushState = { distance: 180 }; var drawerProps = function drawerProps() { return { autofocus: { type: Boolean, default: undefined }, closable: { type: Boolean, default: undefined }, closeIcon: _vueTypes.default.any, destroyOnClose: { type: Boolean, default: undefined }, forceRender: { type: Boolean, default: undefined }, getContainer: _vueTypes.default.any, maskClosable: { type: Boolean, default: undefined }, mask: { type: Boolean, default: undefined }, maskStyle: { type: Object, default: undefined }, /** @deprecated Use `style` instead */ wrapStyle: { type: Object, default: undefined }, style: { type: Object, default: undefined }, class: _vueTypes.default.any, /** @deprecated Use `class` instead */ wrapClassName: String, size: { type: String }, drawerStyle: { type: Object, default: undefined }, headerStyle: { type: Object, default: undefined }, bodyStyle: { type: Object, default: undefined }, contentWrapperStyle: { type: Object, default: undefined }, title: _vueTypes.default.any, visible: { type: Boolean, default: undefined }, width: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.number]), height: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.number]), zIndex: Number, prefixCls: String, push: _vueTypes.default.oneOfType([_vueTypes.default.looseBool, { type: Object }]), placement: _vueTypes.default.oneOf(PlacementTypes), keyboard: { type: Boolean, default: undefined }, extra: _vueTypes.default.any, footer: _vueTypes.default.any, footerStyle: { type: Object, default: undefined }, level: _vueTypes.default.any, levelMove: { type: [Number, Array, Function] }, handle: _vueTypes.default.any, /** @deprecated Use `@afterVisibleChange` instead */ afterVisibleChange: Function, onAfterVisibleChange: Function, 'onUpdate:visible': Function, onClose: Function }; }; exports.drawerProps = drawerProps; var Drawer = (0, _vue.defineComponent)({ name: 'ADrawer', inheritAttrs: false, props: (0, _propsUtil.initDefaultProps)(drawerProps(), { closable: true, placement: 'right', maskClosable: true, mask: true, level: null, keyboard: true, push: defaultPushState }), slots: ['closeIcon', 'title', 'extra', 'footer', 'handle'], // emits: ['update:visible', 'close', 'afterVisibleChange'], setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots, attrs = _ref.attrs; var sPush = (0, _vue.ref)(false); var destroyClose = (0, _vue.ref)(false); var vcDrawer = (0, _vue.ref)(null); var parentDrawerOpts = (0, _vue.inject)('parentDrawerOpts', null); var _useConfigInject = (0, _useConfigInject2.default)('drawer', props), prefixCls = _useConfigInject.prefixCls; (0, _devWarning.default)(!props.afterVisibleChange, 'Drawer', '`afterVisibleChange` prop is deprecated, please use `@afterVisibleChange` event instead'); (0, _devWarning.default)(props.wrapStyle === undefined, 'Drawer', '`wrapStyle` prop is deprecated, please use `style` instead'); (0, _devWarning.default)(props.wrapClassName === undefined, 'Drawer', '`wrapClassName` prop is deprecated, please use `class` instead'); var setPush = function setPush() { sPush.value = true; }; var setPull = function setPull() { sPush.value = false; (0, _vue.nextTick)(function () { domFocus(); }); }; (0, _vue.provide)('parentDrawerOpts', { setPush: setPush, setPull: setPull }); (0, _vue.onMounted)(function () { var visible = props.visible; if (visible && parentDrawerOpts) { parentDrawerOpts.setPush(); } }); (0, _vue.onUnmounted)(function () { if (parentDrawerOpts) { parentDrawerOpts.setPull(); } }); (0, _vue.watch)(function () { return props.visible; }, function (visible) { if (parentDrawerOpts) { if (visible) { parentDrawerOpts.setPush(); } else { parentDrawerOpts.setPull(); } } }, { flush: 'post' }); var domFocus = function domFocus() { var _a, _b; (_b = (_a = vcDrawer.value) === null || _a === void 0 ? void 0 : _a.domFocus) === null || _b === void 0 ? void 0 : _b.call(_a); }; var close = function close(e) { emit('update:visible', false); emit('close', e); }; var afterVisibleChange = function afterVisibleChange(visible) { var _a; (_a = props.afterVisibleChange) === null || _a === void 0 ? void 0 : _a.call(props, visible); emit('afterVisibleChange', visible); }; var destroyOnClose = (0, _vue.computed)(function () { return props.destroyOnClose && !props.visible; }); var onDestroyTransitionEnd = function onDestroyTransitionEnd() { var isDestroyOnClose = destroyOnClose.value; if (!isDestroyOnClose) { return; } if (!props.visible) { destroyClose.value = true; } }; var pushTransform = (0, _vue.computed)(function () { var push = props.push, placement = props.placement; var distance; if (typeof push === 'boolean') { distance = push ? defaultPushState.distance : 0; } else { distance = push.distance; } distance = parseFloat(String(distance || 0)); 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)"); } return null; }); var offsetStyle = (0, _vue.computed)(function () { // https://github.com/ant-design/ant-design/issues/24287 var visible = props.visible, mask = props.mask, placement = props.placement, _props$size = props.size, size = _props$size === void 0 ? 'default' : _props$size, width = props.width, height = props.height; if (!visible && !mask) { return {}; } var val = {}; if (placement === 'left' || placement === 'right') { var defaultWidth = size === 'large' ? 736 : 378; val.width = typeof width === 'undefined' ? defaultWidth : width; val.width = typeof val.width === 'string' ? val.width : "".concat(val.width, "px"); } else { var defaultHeight = size === 'large' ? 736 : 378; val.height = typeof height === 'undefined' ? defaultHeight : height; val.height = typeof val.height === 'string' ? val.height : "".concat(val.height, "px"); } return val; }); var drawerStyle = (0, _vue.computed)(function () { var zIndex = props.zIndex, wrapStyle = props.wrapStyle, mask = props.mask, style = props.style; var val = mask ? {} : offsetStyle.value; return (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({ zIndex: zIndex, transform: sPush.value ? pushTransform.value : undefined }, val), wrapStyle), style); }); var renderHeader = function renderHeader(prefixCls) { var closable = props.closable, headerStyle = props.headerStyle; var extra = (0, _propsUtil.getPropsSlot)(slots, props, 'extra'); var title = (0, _propsUtil.getPropsSlot)(slots, props, 'title'); if (!title && !closable) { return null; } return (0, _vue.createVNode)("div", { "class": (0, _classNames.default)("".concat(prefixCls, "-header"), (0, _defineProperty2.default)({}, "".concat(prefixCls, "-header-close-only"), closable && !title && !extra)), "style": headerStyle }, [(0, _vue.createVNode)("div", { "class": "".concat(prefixCls, "-header-title") }, [renderCloseIcon(prefixCls), title && (0, _vue.createVNode)("div", { "class": "".concat(prefixCls, "-title") }, [title])]), extra && (0, _vue.createVNode)("div", { "class": "".concat(prefixCls, "-extra") }, [extra])]); }; var renderCloseIcon = function renderCloseIcon(prefixCls) { var _a; var closable = props.closable; var $closeIcon = slots.closeIcon ? (_a = slots.closeIcon) === null || _a === void 0 ? void 0 : _a.call(slots) : props.closeIcon; return closable && (0, _vue.createVNode)("button", { "key": "closer", "onClick": close, "aria-label": "Close", "class": "".concat(prefixCls, "-close") }, [$closeIcon === undefined ? (0, _vue.createVNode)(_CloseOutlined.default, null, null) : null]); }; var renderBody = function renderBody(prefixCls) { var _a; if (destroyClose.value && !props.visible) { return null; } destroyClose.value = false; var bodyStyle = props.bodyStyle, drawerStyle = props.drawerStyle; var containerStyle = {}; var isDestroyOnClose = destroyOnClose.value; if (isDestroyOnClose) { // Increase the opacity transition, delete children after closing. containerStyle.opacity = 0; containerStyle.transition = 'opacity .3s'; } return (0, _vue.createVNode)("div", { "class": "".concat(prefixCls, "-wrapper-body"), "style": (0, _extends2.default)((0, _extends2.default)({}, containerStyle), drawerStyle), "onTransitionend": onDestroyTransitionEnd }, [renderHeader(prefixCls), (0, _vue.createVNode)("div", { "key": "body", "class": "".concat(prefixCls, "-body"), "style": bodyStyle }, [(_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)]), renderFooter(prefixCls)]); }; var renderFooter = function renderFooter(prefixCls) { var footer = (0, _propsUtil.getPropsSlot)(slots, props, 'footer'); if (!footer) { return null; } var footerClassName = "".concat(prefixCls, "-footer"); return (0, _vue.createVNode)("div", { "class": footerClassName, "style": props.footerStyle }, [footer]); }; return function () { var _classnames2; var width = props.width, height = props.height, visible = props.visible, placement = props.placement, mask = props.mask, wrapClassName = props.wrapClassName, className = props.class, rest = __rest(props, ["width", "height", "visible", "placement", "mask", "wrapClassName", "class"]); var val = mask ? offsetStyle.value : {}; var haveMask = mask ? '' : 'no-mask'; var vcDrawerProps = (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({}, attrs), (0, _omit.default)(rest, ['size', 'closeIcon', 'closable', 'destroyOnClose', 'drawerStyle', 'headerStyle', 'bodyStyle', 'title', 'push', 'wrapStyle', 'onAfterVisibleChange', 'onClose', 'onUpdate:visible'])), val), { onClose: close, afterVisibleChange: afterVisibleChange, handler: false, prefixCls: prefixCls.value, open: visible, showMask: mask, placement: placement, class: (0, _classNames.default)((_classnames2 = {}, (0, _defineProperty2.default)(_classnames2, className, className), (0, _defineProperty2.default)(_classnames2, wrapClassName, !!wrapClassName), (0, _defineProperty2.default)(_classnames2, haveMask, !!haveMask), _classnames2)), style: drawerStyle.value, ref: vcDrawer }); return (0, _vue.createVNode)(_vcDrawer.default, vcDrawerProps, { handler: props.handle ? function () { return props.handle; } : slots.handle, default: function _default() { return renderBody(prefixCls.value); } }); }; } }); var _default2 = (0, _type.withInstall)(Drawer); exports.default = _default2;