{"version":3,"file":"ActionButton.mjs","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","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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"}