1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 () {
// 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']]
);
}
};