{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/modal/src/useModal/index.tsx"],"sourcesContent":["import type { VueNode } from '@antdv/types';\nimport type { Ref } from 'vue';\nimport type { HookModalRef, ModalFuncProps, ModalFuncWithRef, ModalStaticFunctions } from '../interface';\nimport {\n  computed,\n  defineComponent,\n  isRef,\n  shallowRef,\n  unref,\n  watch,\n} from 'vue';\nimport { withConfirm, withError, withInfo, withSuccess, withWarn } from '../confirm';\nimport destroyFns from '../destroyFns';\nimport HookModal from './HookModal';\n\nlet uuid = 0;\n\ninterface ElementsHolderRef {\n  addModal: (modal: () => VueNode) => () => void\n}\n\nconst ElementsHolder = defineComponent({\n  name: 'ElementsHolder',\n  inheritAttrs: false,\n  setup(_, { expose }) {\n    const modals = shallowRef<Array<() => VueNode>>([]);\n    const addModal = (modal: () => VueNode) => {\n      modals.value.push(modal);\n      modals.value = modals.value.slice();\n      return () => {\n        modals.value = modals.value.filter(currentModal => currentModal !== modal);\n      };\n    };\n\n    expose({ addModal });\n    return () => {\n      return modals.value.map(modal => modal());\n    };\n  },\n});\n\nfunction useModal(): readonly [\n  Omit<ModalStaticFunctions<ModalFuncWithRef>, 'warn'>,\n  () => VueNode,\n] {\n  const holderRef = shallowRef<ElementsHolderRef>(null);\n  // ========================== Effect ==========================\n  const actionQueue = shallowRef([]);\n  watch(\n    actionQueue,\n    () => {\n      if (actionQueue.value.length) {\n        const cloneQueue = [...actionQueue.value];\n        cloneQueue.forEach((action) => {\n          action();\n        });\n        actionQueue.value = [];\n      }\n    },\n    {\n      immediate: true,\n    },\n  );\n\n  // =========================== Hook ===========================\n  const getConfirmFunc = (withFunc: (config: ModalFuncProps) => ModalFuncProps) =>\n    function hookConfirm(config: Ref<ModalFuncProps> | ModalFuncProps) {\n      uuid += 1;\n      const open = shallowRef(true);\n      const modalRef = shallowRef<HookModalRef>(null);\n      const configRef = shallowRef(unref(config));\n      const updateConfig = shallowRef({});\n      const updateAction = (newConfig: ModalFuncProps) => {\n        configRef.value = {\n          ...configRef.value,\n          ...newConfig,\n        };\n      };\n      watch(\n        () => config,\n        (val) => {\n          updateAction({\n            ...(isRef(val) ? val.value : val),\n            ...updateConfig.value,\n          });\n        },\n      );\n\n      const destroyAction = (...args: any[]) => {\n        open.value = false;\n        const triggerCancel = args.some(param => param && param.triggerCancel);\n        if (configRef.value.onCancel && triggerCancel)\n          configRef.value.onCancel(() => {}, ...args.slice(1));\n      };\n\n      let closeFunc: Function | undefined;\n      const modal = () => (\n        <HookModal\n          key={`modal-${uuid}`}\n          config={withFunc(configRef.value)}\n          ref={modalRef}\n          open={open.value}\n          destroyAction={destroyAction}\n          afterClose={() => {\n            closeFunc?.();\n          }}\n        />\n      );\n\n      closeFunc = holderRef.value?.addModal(modal);\n\n      if (closeFunc)\n        destroyFns.push(closeFunc);\n\n      const destroy = () => {\n        if (modalRef.value)\n          destroyAction();\n        else\n          actionQueue.value = [...actionQueue.value, destroyAction];\n      };\n\n      const update = (newConfig: ModalFuncProps) => {\n        updateConfig.value = newConfig;\n        if (modalRef.value)\n          updateAction(newConfig);\n        else\n          actionQueue.value = [...actionQueue.value, () => updateAction(newConfig)];\n      };\n      return {\n        destroy,\n        update,\n      };\n    };\n\n  const fns = computed(() => ({\n    info: getConfirmFunc(withInfo),\n    success: getConfirmFunc(withSuccess),\n    error: getConfirmFunc(withError),\n    warning: getConfirmFunc(withWarn),\n    confirm: getConfirmFunc(withConfirm),\n  }));\n  const holderKey = Symbol('modalHolderKey');\n  return [fns.value, () => <ElementsHolder key={holderKey} ref={holderRef} />] as const;\n}\n\nexport default useModal;\n"],"names":["uuid","ElementsHolder","name","inheritAttrs","setup","_","expose","modals","shallowRef","addModal","modal","value","push","slice","filter","currentModal","map","useModal","holderRef","actionQueue","watch","length","cloneQueue","forEach","action","immediate","getConfirmFunc","withFunc","hookConfirm","config","open","modalRef","configRef","unref","updateConfig","updateAction","newConfig","val","isRef","destroyAction","args","triggerCancel","some","param","onCancel","closeFunc","_createVNode","HookModal","afterClose","destroyFns","destroy","update","fns","computed","info","withInfo","success","withSuccess","error","withError","warning","withWarn","confirm","withConfirm","holderKey","Symbol"],"mappings":"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"}