ActionButton.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');
  6. var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
  7. var _vueTypes = require('../_util/vue-types');
  8. var _vueTypes2 = _interopRequireDefault(_vueTypes);
  9. var _button = require('../button');
  10. var _button2 = _interopRequireDefault(_button);
  11. var _BaseMixin = require('../_util/BaseMixin');
  12. var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
  13. var _buttonTypes = require('../button/buttonTypes');
  14. var _buttonTypes2 = _interopRequireDefault(_buttonTypes);
  15. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  16. var ButtonType = (0, _buttonTypes2['default'])().type;
  17. var ActionButtonProps = {
  18. type: ButtonType,
  19. actionFn: _vueTypes2['default'].func,
  20. closeModal: _vueTypes2['default'].func,
  21. autoFocus: _vueTypes2['default'].bool,
  22. buttonProps: _vueTypes2['default'].object
  23. };
  24. exports['default'] = {
  25. mixins: [_BaseMixin2['default']],
  26. props: ActionButtonProps,
  27. data: function data() {
  28. return {
  29. loading: false
  30. };
  31. },
  32. mounted: function mounted() {
  33. var _this = this;
  34. if (this.autoFocus) {
  35. this.timeoutId = setTimeout(function () {
  36. return _this.$el.focus();
  37. });
  38. }
  39. },
  40. beforeDestroy: function beforeDestroy() {
  41. clearTimeout(this.timeoutId);
  42. },
  43. methods: {
  44. onClick: function onClick() {
  45. var _this2 = this;
  46. var actionFn = this.actionFn,
  47. closeModal = this.closeModal;
  48. if (actionFn) {
  49. var ret = void 0;
  50. if (actionFn.length) {
  51. ret = actionFn(closeModal);
  52. } else {
  53. ret = actionFn();
  54. if (!ret) {
  55. closeModal();
  56. }
  57. }
  58. if (ret && ret.then) {
  59. this.setState({ loading: true });
  60. ret.then(function () {
  61. // It's unnecessary to set loading=false, for the Modal will be unmounted after close.
  62. // this.setState({ loading: false });
  63. closeModal.apply(undefined, arguments);
  64. }, function (e) {
  65. // Emit error when catch promise reject
  66. // eslint-disable-next-line no-console
  67. console.error(e);
  68. // See: https://github.com/ant-design/ant-design/issues/6183
  69. _this2.setState({ loading: false });
  70. });
  71. }
  72. } else {
  73. closeModal();
  74. }
  75. }
  76. },
  77. render: function render() {
  78. var h = arguments[0];
  79. var type = this.type,
  80. $slots = this.$slots,
  81. loading = this.loading,
  82. buttonProps = this.buttonProps;
  83. return h(
  84. _button2['default'],
  85. (0, _babelHelperVueJsxMergeProps2['default'])([{
  86. attrs: { type: type, loading: loading },
  87. on: {
  88. 'click': this.onClick
  89. }
  90. }, buttonProps]),
  91. [$slots['default']]
  92. );
  93. }
  94. };