| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- "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);
|