UNPKG

ant-design-vue

Version:

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

242 lines (196 loc) 8.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.destroyFns = void 0; var _vue = require("vue"); var _classNames2 = _interopRequireDefault(require("../_util/classNames")); var _vcDialog = _interopRequireDefault(require("../vc-dialog")); var _vueTypes = _interopRequireDefault(require("../_util/vue-types")); var _addEventListener = _interopRequireDefault(require("../vc-util/Dom/addEventListener")); var _locale = require("./locale"); var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/CloseOutlined")); var _button = _interopRequireDefault(require("../button")); var _buttonTypes = _interopRequireDefault(require("../button/buttonTypes")); var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver")); var _propsUtil = require("../_util/props-util"); var _initDefaultProps = _interopRequireDefault(require("../_util/props-util/initDefaultProps")); var _configProvider = require("../config-provider"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var ButtonProps = (0, _buttonTypes.default)(); var ButtonType = ButtonProps.type; var mousePosition = null; // ref: https://github.com/ant-design/ant-design/issues/15795 var getClickPosition = function getClickPosition(e) { mousePosition = { x: e.pageX, y: e.pageY }; // 100ms 内发生过点击事件,则从点击位置动画展示 // 否则直接 zoom 展示 // 这样可以兼容非点击方式展开 setTimeout(function () { return mousePosition = null; }, 100); }; // 只有点击事件支持从鼠标位置动画展开 if (typeof window !== 'undefined' && window.document && window.document.documentElement) { (0, _addEventListener.default)(document.documentElement, 'click', getClickPosition, true); } function noop() {} var modalProps = { prefixCls: _vueTypes.default.string, /** 对话框是否可见*/ visible: _vueTypes.default.looseBool, /** 确定按钮 loading*/ confirmLoading: _vueTypes.default.looseBool, /** 标题*/ title: _vueTypes.default.any, /** 是否显示右上角的关闭按钮*/ closable: _vueTypes.default.looseBool, closeIcon: _vueTypes.default.any, /** 点击确定回调*/ onOk: { type: Function }, /** 点击模态框右上角叉、取消按钮、Props.maskClosable 值为 true 时的遮罩层或键盘按下 Esc 时的回调*/ onCancel: { type: Function }, afterClose: _vueTypes.default.func.def(noop), /** 垂直居中 */ centered: _vueTypes.default.looseBool, /** 宽度*/ width: _vueTypes.default.oneOfType([_vueTypes.default.string, _vueTypes.default.number]), /** 底部内容*/ footer: _vueTypes.default.any, /** 确认按钮文字*/ okText: _vueTypes.default.any, /** 确认按钮类型*/ okType: ButtonType, /** 取消按钮文字*/ cancelText: _vueTypes.default.any, icon: _vueTypes.default.any, /** 点击蒙层是否允许关闭*/ maskClosable: _vueTypes.default.looseBool, /** 强制渲染 Modal*/ forceRender: _vueTypes.default.looseBool, okButtonProps: _vueTypes.default.shape(_buttonTypes.default).loose, cancelButtonProps: _vueTypes.default.shape(_buttonTypes.default).loose, destroyOnClose: _vueTypes.default.looseBool, wrapClassName: _vueTypes.default.string, maskTransitionName: _vueTypes.default.string, transitionName: _vueTypes.default.string, getContainer: _vueTypes.default.func, zIndex: _vueTypes.default.number, bodyStyle: _vueTypes.default.style, maskStyle: _vueTypes.default.style, mask: _vueTypes.default.looseBool, keyboard: _vueTypes.default.looseBool, wrapProps: _vueTypes.default.object, focusTriggerAfterClose: _vueTypes.default.looseBool }; var destroyFns = []; exports.destroyFns = destroyFns; var _default2 = (0, _vue.defineComponent)({ name: 'AModal', inheritAttrs: false, props: (0, _initDefaultProps.default)(modalProps, { width: 520, transitionName: 'zoom', maskTransitionName: 'fade', confirmLoading: false, visible: false, okType: 'primary' }), emits: ['update:visible', 'cancel', 'change', 'ok'], setup: function setup() { return { configProvider: (0, _vue.inject)('configProvider', _configProvider.defaultConfigProvider) }; }, data: function data() { return { sVisible: !!this.visible }; }, watch: { visible: function visible(val) { this.sVisible = val; } }, methods: { handleCancel: function handleCancel(e) { this.$emit('update:visible', false); this.$emit('cancel', e); this.$emit('change', false); }, handleOk: function handleOk(e) { this.$emit('ok', e); }, renderFooter: function renderFooter(locale) { var _this = this; var okType = this.okType, confirmLoading = this.confirmLoading; var cancelBtnProps = _extends({ onClick: this.handleCancel }, this.cancelButtonProps || {}); var okBtnProps = _extends({ onClick: this.handleOk, type: okType, loading: confirmLoading }, this.okButtonProps || {}); return (0, _vue.createVNode)("div", null, [(0, _vue.createVNode)(_button.default, cancelBtnProps, { default: function _default() { return [(0, _propsUtil.getComponent)(_this, 'cancelText') || locale.cancelText]; } }), (0, _vue.createVNode)(_button.default, okBtnProps, { default: function _default() { return [(0, _propsUtil.getComponent)(_this, 'okText') || locale.okText]; } })]); } }, render: function render() { var customizePrefixCls = this.prefixCls, visible = this.sVisible, wrapClassName = this.wrapClassName, centered = this.centered, getContainer = this.getContainer, $attrs = this.$attrs; var children = (0, _propsUtil.getSlot)(this); var _this$configProvider = this.configProvider, getPrefixCls = _this$configProvider.getPrefixCls, getContextPopupContainer = _this$configProvider.getPopupContainer; var prefixCls = getPrefixCls('modal', customizePrefixCls); var defaultFooter = (0, _vue.createVNode)(_LocaleReceiver.default, { "componentName": "Modal", "defaultLocale": (0, _locale.getConfirmLocale)(), "children": this.renderFooter }, null); var closeIcon = (0, _propsUtil.getComponent)(this, 'closeIcon'); var closeIconToRender = (0, _vue.createVNode)("span", { "class": "".concat(prefixCls, "-close-x") }, [closeIcon || (0, _vue.createVNode)(_CloseOutlined.default, { "class": "".concat(prefixCls, "-close-icon") }, null)]); var footer = (0, _propsUtil.getComponent)(this, 'footer'); var title = (0, _propsUtil.getComponent)(this, 'title'); var dialogProps = _extends(_extends(_extends({}, this.$props), $attrs), { getContainer: getContainer === undefined ? getContextPopupContainer : getContainer, prefixCls: prefixCls, wrapClassName: (0, _classNames2.default)(_defineProperty({}, "".concat(prefixCls, "-centered"), !!centered), wrapClassName), title: title, footer: footer === undefined ? defaultFooter : footer, visible: visible, mousePosition: mousePosition, closeIcon: closeIconToRender, onClose: this.handleCancel }); return (0, _vue.createVNode)(_vcDialog.default, dialogProps, { default: function _default() { return [children]; } }); } }); exports.default = _default2;