91 lines
2.3 KiB
Java
91 lines
2.3 KiB
Java
![]() |
import _mergeJSXProps from 'babel-helper-vue-jsx-merge-props';
|
||
|
import PropTypes from '../_util/vue-types';
|
||
|
import Button from '../button';
|
||
|
import BaseMixin from '../_util/BaseMixin';
|
||
|
import buttonTypes from '../button/buttonTypes';
|
||
|
var ButtonType = buttonTypes().type;
|
||
|
var ActionButtonProps = {
|
||
|
type: ButtonType,
|
||
|
actionFn: PropTypes.func,
|
||
|
closeModal: PropTypes.func,
|
||
|
autoFocus: PropTypes.bool,
|
||
|
buttonProps: PropTypes.object
|
||
|
};
|
||
|
|
||
|
export default {
|
||
|
mixins: [BaseMixin],
|
||
|
props: ActionButtonProps,
|
||
|
data: function data() {
|
||
|
return {
|
||
|
loading: false
|
||
|
};
|
||
|
},
|
||
|
mounted: function mounted() {
|
||
|
var _this = this;
|
||
|
|
||
|
if (this.autoFocus) {
|
||
|
this.timeoutId = setTimeout(function () {
|
||
|
return _this.$el.focus();
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
beforeDestroy: function beforeDestroy() {
|
||
|
clearTimeout(this.timeoutId);
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
onClick: function onClick() {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var actionFn = this.actionFn,
|
||
|
closeModal = this.closeModal;
|
||
|
|
||
|
if (actionFn) {
|
||
|
var ret = void 0;
|
||
|
if (actionFn.length) {
|
||
|
ret = actionFn(closeModal);
|
||
|
} else {
|
||
|
ret = actionFn();
|
||
|
if (!ret) {
|
||
|
closeModal();
|
||
|
}
|
||
|
}
|
||
|
if (ret && ret.then) {
|
||
|
this.setState({ loading: true });
|
||
|
ret.then(function () {
|
||
|
// It's unnecessary to set loading=false, for the Modal will be unmounted after close.
|
||
|
// this.setState({ loading: false });
|
||
|
closeModal.apply(undefined, arguments);
|
||
|
}, function (e) {
|
||
|
// Emit error when catch promise reject
|
||
|
// eslint-disable-next-line no-console
|
||
|
console.error(e);
|
||
|
// See: https://github.com/ant-design/ant-design/issues/6183
|
||
|
_this2.setState({ loading: false });
|
||
|
});
|
||
|
}
|
||
|
} else {
|
||
|
closeModal();
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
render: function render() {
|
||
|
var h = arguments[0];
|
||
|
var type = this.type,
|
||
|
$slots = this.$slots,
|
||
|
loading = this.loading,
|
||
|
buttonProps = this.buttonProps;
|
||
|
|
||
|
return h(
|
||
|
Button,
|
||
|
_mergeJSXProps([{
|
||
|
attrs: { type: type, loading: loading },
|
||
|
on: {
|
||
|
'click': this.onClick
|
||
|
}
|
||
|
}, buttonProps]),
|
||
|
[$slots['default']]
|
||
|
);
|
||
|
}
|
||
|
};
|