| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
- import { createVNode as _createVNode, resolveDirective as _resolveDirective } from "vue";
- import { onMounted, ref, defineComponent, onBeforeUnmount } from 'vue';
- import Button from '../button';
- import { convertLegacyProps } from '../button/buttonTypes';
- import useDestroyed from './hooks/useDestroyed';
- var actionButtonProps = {
- type: {
- type: String
- },
- actionFn: Function,
- close: Function,
- autofocus: Boolean,
- prefixCls: String,
- buttonProps: Object,
- emitEvent: Boolean,
- quitOnNullishReturnValue: Boolean
- };
- function isThenable(thing) {
- return !!(thing && !!thing.then);
- }
- export default defineComponent({
- compatConfig: {
- MODE: 3
- },
- name: 'ActionButton',
- props: actionButtonProps,
- setup: function setup(props, _ref) {
- var slots = _ref.slots;
- var clickedRef = ref(false);
- var buttonRef = ref();
- var loading = ref(false);
- var timeoutId;
- var isDestroyed = useDestroyed();
- onMounted(function () {
- if (props.autofocus) {
- timeoutId = setTimeout(function () {
- var _buttonRef$value$$el;
- return (_buttonRef$value$$el = buttonRef.value.$el) === null || _buttonRef$value$$el === void 0 ? void 0 : _buttonRef$value$$el.focus();
- });
- }
- });
- onBeforeUnmount(function () {
- clearTimeout(timeoutId);
- });
- var handlePromiseOnOk = function handlePromiseOnOk(returnValueOfOnOk) {
- var close = props.close;
- if (!isThenable(returnValueOfOnOk)) {
- return;
- }
- loading.value = true;
- returnValueOfOnOk.then(function () {
- if (!isDestroyed.value) {
- loading.value = false;
- }
- close.apply(void 0, arguments);
- clickedRef.value = false;
- }, 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
- if (!isDestroyed.value) {
- loading.value = false;
- }
- clickedRef.value = false;
- });
- };
- var onClick = function onClick(e) {
- var actionFn = props.actionFn,
- _props$close = props.close,
- close = _props$close === void 0 ? function () {} : _props$close;
- if (clickedRef.value) {
- return;
- }
- clickedRef.value = true;
- if (!actionFn) {
- close();
- return;
- }
- var returnValueOfOnOk;
- if (props.emitEvent) {
- returnValueOfOnOk = actionFn(e);
- if (props.quitOnNullishReturnValue && !isThenable(returnValueOfOnOk)) {
- clickedRef.value = false;
- close(e);
- return;
- }
- } else if (actionFn.length) {
- returnValueOfOnOk = actionFn(close);
- // https://github.com/ant-design/ant-design/issues/23358
- clickedRef.value = false;
- } else {
- returnValueOfOnOk = actionFn();
- if (!returnValueOfOnOk) {
- close();
- return;
- }
- }
- handlePromiseOnOk(returnValueOfOnOk);
- };
- return function () {
- var type = props.type,
- prefixCls = props.prefixCls,
- buttonProps = props.buttonProps;
- return _createVNode(Button, _objectSpread(_objectSpread(_objectSpread({}, convertLegacyProps(type)), {}, {
- "onClick": onClick,
- "loading": loading.value,
- "prefixCls": prefixCls
- }, buttonProps), {}, {
- "ref": buttonRef
- }), slots);
- };
- }
- });
|