{"version":3,"file":"ActionButton.cjs","sources":["../../../../../../packages/components/button/src/ActionButton.tsx"],"sourcesContent":["import type { ExtractPropTypes, PropType } from 'vue';\nimport type { LegacyButtonType } from './interface';\nimport type { ButtonProps } from './props';\nimport { useDestroyed } from '@antdv/hooks';\nimport { findDOMNode, objectType } from '@antdv/utils';\nimport { defineComponent, onBeforeUnmount, onMounted, shallowRef } from 'vue';\nimport Button from './Button';\nimport { convertLegacyProps } from './utils';\n\nconst actionButtonProps = {\n  type: {\n    type: String as PropType<LegacyButtonType>,\n  },\n  actionFn: Function as PropType<(...args: any[]) => any | PromiseLike<any>>,\n  close: Function,\n  autofocus: Boolean,\n  prefixCls: String,\n  buttonProps: objectType<ButtonProps>(),\n  emitEvent: Boolean,\n  quitOnNullishReturnValue: Boolean,\n};\n\nexport type ActionButtonProps = ExtractPropTypes<typeof actionButtonProps>;\n\nfunction isThenable<T>(thing?: PromiseLike<T>): boolean {\n  return !!(thing && thing.then);\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'ActionButton',\n  props: actionButtonProps,\n  setup(props, { slots }) {\n    const clickedRef = shallowRef<boolean>(false);\n    const buttonRef = shallowRef();\n    const loading = shallowRef(false);\n    let timeoutId: any;\n    const isDestroyed = useDestroyed();\n    onMounted(() => {\n      if (props.autofocus)\n        timeoutId = setTimeout(() => findDOMNode(buttonRef.value)?.focus?.());\n    });\n    onBeforeUnmount(() => {\n      clearTimeout(timeoutId);\n    });\n\n    const onInternalClose = (...args: any[]) => {\n      props.close?.(...args);\n    };\n\n    const handlePromiseOnOk = (returnValueOfOnOk?: PromiseLike<any>) => {\n      if (!isThenable(returnValueOfOnOk))\n        return;\n\n      loading.value = true;\n      returnValueOfOnOk!.then(\n        (...args: any[]) => {\n          if (!isDestroyed.value)\n            loading.value = false;\n\n          onInternalClose(...args);\n          clickedRef.value = false;\n        },\n        (e: Error) => {\n          // See: https://github.com/ant-design/ant-design/issues/6183\n          if (!isDestroyed.value)\n            loading.value = false;\n\n          clickedRef.value = false;\n          return Promise.reject(e);\n        },\n      );\n    };\n\n    const onClick = (e: MouseEvent) => {\n      const { actionFn } = props;\n      if (clickedRef.value)\n        return;\n\n      clickedRef.value = true;\n      if (!actionFn) {\n        onInternalClose();\n        return;\n      }\n      let returnValueOfOnOk: PromiseLike<any>;\n      if (props.emitEvent) {\n        returnValueOfOnOk = actionFn(e);\n        if (props.quitOnNullishReturnValue && !isThenable(returnValueOfOnOk)) {\n          clickedRef.value = false;\n          onInternalClose(e);\n          return;\n        }\n      } else if (actionFn.length) {\n        returnValueOfOnOk = actionFn(props.close);\n        // https://github.com/ant-design/ant-design/issues/23358\n        clickedRef.value = false;\n      } else {\n        returnValueOfOnOk = actionFn();\n        if (!returnValueOfOnOk) {\n          onInternalClose();\n          return;\n        }\n      }\n      handlePromiseOnOk(returnValueOfOnOk);\n    };\n    return () => {\n      const { type, prefixCls, buttonProps } = props;\n      return (\n        <Button\n          {...convertLegacyProps(type)}\n          onClick={onClick}\n          loading={loading.value}\n          prefixCls={prefixCls}\n          {...buttonProps}\n          ref={buttonRef}\n          v-slots={slots}\n        >\n        </Button>\n      );\n    };\n  },\n});\n"],"names":["actionButtonProps","type","String","actionFn","Function","close","autofocus","Boolean","prefixCls","buttonProps","objectType","emitEvent","quitOnNullishReturnValue","isThenable","thing","then","defineComponent","compatConfig","MODE","name","props","setup","slots","clickedRef","shallowRef","buttonRef","loading","timeoutId","isDestroyed","useDestroyed","onMounted","setTimeout","findDOMNode","value","focus","onBeforeUnmount","clearTimeout","onInternalClose","args","handlePromiseOnOk","returnValueOfOnOk","e","Promise","reject","onClick","length","_createVNode","Button","convertLegacyProps"],"mappings":"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"}