ether-admin/node_modules/ant-design-vue/lib/drawer/index.js

416 lines
14 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
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 _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
var _type = require("../_util/type");
var _omit = _interopRequireDefault(require("../_util/omit"));
var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
var _style = _interopRequireDefault(require("./style"));
var _Compact = require("../space/Compact");
var _isNumeric = _interopRequireDefault(require("../_util/isNumeric"));
var _transition = require("../_util/transition");
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;
};
const PlacementTypes = ['top', 'right', 'bottom', 'left'];
const SizeTypes = ['default', 'large'];
const defaultPushState = {
distance: 180
};
const drawerProps = () => ({
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: {
type: [String, Function, Boolean, Object],
default: undefined
},
maskClosable: {
type: Boolean,
default: undefined
},
mask: {
type: Boolean,
default: undefined
},
maskStyle: (0, _type.objectType)(),
rootClassName: String,
rootStyle: (0, _type.objectType)(),
size: {
type: String
},
drawerStyle: (0, _type.objectType)(),
headerStyle: (0, _type.objectType)(),
bodyStyle: (0, _type.objectType)(),
contentWrapperStyle: {
type: Object,
default: undefined
},
title: _vueTypes.default.any,
/** @deprecated Please use `open` instead */
visible: {
type: Boolean,
default: undefined
},
open: {
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: (0, _type.objectType)(),
level: _vueTypes.default.any,
levelMove: {
type: [Number, Array, Function]
},
handle: _vueTypes.default.any,
/** @deprecated Use `@afterVisibleChange` instead */
afterVisibleChange: Function,
/** @deprecated Please use `@afterOpenChange` instead */
onAfterVisibleChange: Function,
onAfterOpenChange: Function,
/** @deprecated Please use `onUpdate:open` instead */
'onUpdate:visible': Function,
'onUpdate:open': Function,
onClose: Function
});
exports.drawerProps = drawerProps;
const Drawer = (0, _vue.defineComponent)({
compatConfig: {
MODE: 3
},
name: 'ADrawer',
inheritAttrs: false,
props: (0, _propsUtil.initDefaultProps)(drawerProps(), {
closable: true,
placement: 'right',
maskClosable: true,
mask: true,
level: null,
keyboard: true,
push: defaultPushState
}),
slots: Object,
// emits: ['update:visible', 'close', 'afterVisibleChange'],
setup(props, _ref) {
let {
emit,
slots,
attrs
} = _ref;
const sPush = (0, _vue.shallowRef)(false);
const destroyClose = (0, _vue.shallowRef)(false);
const vcDrawer = (0, _vue.shallowRef)(null);
const load = (0, _vue.shallowRef)(false);
const visible = (0, _vue.shallowRef)(false);
const mergedOpen = (0, _vue.computed)(() => {
var _a;
return (_a = props.open) !== null && _a !== void 0 ? _a : props.visible;
});
(0, _vue.watch)(mergedOpen, () => {
if (mergedOpen.value) {
load.value = true;
} else {
visible.value = false;
}
}, {
immediate: true
});
(0, _vue.watch)([mergedOpen, load], () => {
if (mergedOpen.value && load.value) {
visible.value = true;
}
}, {
immediate: true
});
const parentDrawerOpts = (0, _vue.inject)('parentDrawerOpts', null);
const {
prefixCls,
getPopupContainer,
direction
} = (0, _useConfigInject.default)('drawer', props);
const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
const getContainer = (0, _vue.computed)(() =>
// 有可能为 false所以不能直接判断
props.getContainer === undefined && (getPopupContainer === null || getPopupContainer === void 0 ? void 0 : getPopupContainer.value) ? () => getPopupContainer.value(document.body) : props.getContainer);
(0, _devWarning.default)(!props.afterVisibleChange, 'Drawer', '`afterVisibleChange` prop is deprecated, please use `@afterVisibleChange` event instead');
// ========================== Warning ===========================
if (process.env.NODE_ENV !== 'production') {
[['visible', 'open'], ['onUpdate:visible', 'onUpdate:open'], ['onAfterVisibleChange', 'onAfterOpenChange']].forEach(_ref2 => {
let [deprecatedName, newName] = _ref2;
(0, _devWarning.default)(!props[deprecatedName], 'Drawer', `\`${deprecatedName}\` is deprecated, please use \`${newName}\` instead.`);
});
}
const setPush = () => {
sPush.value = true;
};
const setPull = () => {
sPush.value = false;
(0, _vue.nextTick)(() => {
domFocus();
});
};
(0, _vue.provide)('parentDrawerOpts', {
setPush,
setPull
});
(0, _vue.onMounted)(() => {
if (mergedOpen.value && parentDrawerOpts) {
parentDrawerOpts.setPush();
}
});
(0, _vue.onUnmounted)(() => {
if (parentDrawerOpts) {
parentDrawerOpts.setPull();
}
});
(0, _vue.watch)(visible, () => {
if (parentDrawerOpts) {
if (visible.value) {
parentDrawerOpts.setPush();
} else {
parentDrawerOpts.setPull();
}
}
}, {
flush: 'post'
});
const 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);
};
const close = e => {
emit('update:visible', false);
emit('update:open', false);
emit('close', e);
};
const afterVisibleChange = open => {
var _a;
if (!open) {
if (destroyClose.value === false) {
// set true only once
destroyClose.value = true;
}
if (props.destroyOnClose) {
load.value = false;
}
}
(_a = props.afterVisibleChange) === null || _a === void 0 ? void 0 : _a.call(props, open);
emit('afterVisibleChange', open);
emit('afterOpenChange', open);
};
const pushTransform = (0, _vue.computed)(() => {
const {
push,
placement
} = props;
let 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(${placement === 'left' ? distance : -distance}px)`;
}
if (placement === 'top' || placement === 'bottom') {
return `translateY(${placement === 'top' ? distance : -distance}px)`;
}
return null;
});
// ============================ Size ============================
const mergedWidth = (0, _vue.computed)(() => {
var _a;
return (_a = props.width) !== null && _a !== void 0 ? _a : props.size === 'large' ? 736 : 378;
});
const mergedHeight = (0, _vue.computed)(() => {
var _a;
return (_a = props.height) !== null && _a !== void 0 ? _a : props.size === 'large' ? 736 : 378;
});
const offsetStyle = (0, _vue.computed)(() => {
// https://github.com/ant-design/ant-design/issues/24287
const {
mask,
placement
} = props;
if (!visible.value && !mask) {
return {};
}
const val = {};
if (placement === 'left' || placement === 'right') {
val.width = (0, _isNumeric.default)(mergedWidth.value) ? `${mergedWidth.value}px` : mergedWidth.value;
} else {
val.height = (0, _isNumeric.default)(mergedHeight.value) ? `${mergedHeight.value}px` : mergedHeight.value;
}
return val;
});
const wrapperStyle = (0, _vue.computed)(() => {
const {
zIndex,
contentWrapperStyle
} = props;
const val = offsetStyle.value;
return [{
zIndex,
transform: sPush.value ? pushTransform.value : undefined
}, (0, _extends2.default)({}, contentWrapperStyle), val];
});
const renderHeader = prefixCls => {
const {
closable,
headerStyle
} = props;
const extra = (0, _propsUtil.getPropsSlot)(slots, props, 'extra');
const title = (0, _propsUtil.getPropsSlot)(slots, props, 'title');
if (!title && !closable) {
return null;
}
return (0, _vue.createVNode)("div", {
"class": (0, _classNames.default)(`${prefixCls}-header`, {
[`${prefixCls}-header-close-only`]: closable && !title && !extra
}),
"style": headerStyle
}, [(0, _vue.createVNode)("div", {
"class": `${prefixCls}-header-title`
}, [renderCloseIcon(prefixCls), title && (0, _vue.createVNode)("div", {
"class": `${prefixCls}-title`
}, [title])]), extra && (0, _vue.createVNode)("div", {
"class": `${prefixCls}-extra`
}, [extra])]);
};
const renderCloseIcon = prefixCls => {
var _a;
const {
closable
} = props;
const $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": `${prefixCls}-close`
}, [$closeIcon === undefined ? (0, _vue.createVNode)(_CloseOutlined.default, null, null) : $closeIcon]);
};
const renderBody = prefixCls => {
var _a;
if (destroyClose.value && !props.forceRender && !load.value) {
return null;
}
const {
bodyStyle,
drawerStyle
} = props;
return (0, _vue.createVNode)("div", {
"class": `${prefixCls}-wrapper-body`,
"style": drawerStyle
}, [renderHeader(prefixCls), (0, _vue.createVNode)("div", {
"key": "body",
"class": `${prefixCls}-body`,
"style": bodyStyle
}, [(_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)]), renderFooter(prefixCls)]);
};
const renderFooter = prefixCls => {
const footer = (0, _propsUtil.getPropsSlot)(slots, props, 'footer');
if (!footer) {
return null;
}
const footerClassName = `${prefixCls}-footer`;
return (0, _vue.createVNode)("div", {
"class": footerClassName,
"style": props.footerStyle
}, [footer]);
};
const drawerClassName = (0, _vue.computed)(() => (0, _classNames.default)({
'no-mask': !props.mask,
[`${prefixCls.value}-rtl`]: direction.value === 'rtl'
}, props.rootClassName, hashId.value));
// =========================== Motion ===========================
const maskMotion = (0, _vue.computed)(() => {
return (0, _transition.getTransitionProps)((0, _transition.getTransitionName)(prefixCls.value, 'mask-motion'));
});
const panelMotion = motionPlacement => {
return (0, _transition.getTransitionProps)((0, _transition.getTransitionName)(prefixCls.value, `panel-motion-${motionPlacement}`));
};
return () => {
const {
width,
height,
placement,
mask,
forceRender
} = props,
rest = __rest(props, ["width", "height", "placement", "mask", "forceRender"]);
const vcDrawerProps = (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({}, attrs), (0, _omit.default)(rest, ['size', 'closeIcon', 'closable', 'destroyOnClose', 'drawerStyle', 'headerStyle', 'bodyStyle', 'title', 'push', 'onAfterVisibleChange', 'onClose', 'onUpdate:visible', 'onUpdate:open', 'visible'])), {
forceRender,
onClose: close,
afterVisibleChange,
handler: false,
prefixCls: prefixCls.value,
open: visible.value,
showMask: mask,
placement,
ref: vcDrawer
});
return wrapSSR((0, _vue.createVNode)(_Compact.NoCompactStyle, null, {
default: () => [(0, _vue.createVNode)(_vcDrawer.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, vcDrawerProps), {}, {
"maskMotion": maskMotion.value,
"motion": panelMotion,
"width": mergedWidth.value,
"height": mergedHeight.value,
"getContainer": getContainer.value,
"rootClassName": drawerClassName.value,
"rootStyle": props.rootStyle,
"contentWrapperStyle": wrapperStyle.value
}), {
handler: props.handle ? () => props.handle : slots.handle,
default: () => renderBody(prefixCls.value)
})]
}));
};
}
});
var _default = exports.default = (0, _type.withInstall)(Drawer);