{"version":3,"file":"useMessage.cjs","sources":["../../../../../../packages/components/message/src/useMessage.tsx"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { VNode } from 'vue';\nimport type { HolderProps } from './holder';\nimport type {\n  ConfigOptions,\n  HolderRef,\n  MessageInstance,\n  MessageType,\n  NoticeType,\n  TypeOpen,\n} from './interface';\nimport type { MessageArgsProps } from './props';\nimport { classNames, wrapPromiseFn } from '@antdv/utils';\nimport { shallowRef } from 'vue';\nimport Holder from './holder';\n\nimport { PureContent } from './PurePanel';\n\n// ==============================================================================\n// ==                                   Hook                                   ==\n// ==============================================================================\nlet keyIndex = 0;\n\nexport function useInternalMessage(\n  messageConfig?: HolderProps,\n): readonly [MessageInstance, () => VNode] {\n  const holderRef = shallowRef<HolderRef>(null);\n  const holderKey = Symbol('messageHolderKey');\n  // ================================ API ================================\n\n  // Wrap with notification content\n  // >>> close\n  const close = (key: Key) => {\n    holderRef.value?.close(key);\n  };\n\n  // >>> Open\n  const open = (config: MessageArgsProps): MessageType => {\n    if (!holderRef.value) {\n      const fakeResult: any = () => {};\n      fakeResult.then = () => {};\n      return fakeResult;\n    }\n\n    const { open: originOpen, prefixCls, hashId } = holderRef.value;\n    const noticePrefixCls = `${prefixCls}-notice`;\n    const { content, icon, type, key, class: className, onClose, ...restConfig } = config;\n\n    let mergedKey: Key = key!;\n    if (mergedKey === undefined || mergedKey === null) {\n      keyIndex += 1;\n      mergedKey = `antd-message-${keyIndex}`;\n    }\n\n    return wrapPromiseFn((resolve) => {\n      originOpen({\n        ...restConfig,\n        key: mergedKey,\n        content: () => (\n          <PureContent\n            prefixCls={prefixCls}\n            type={type}\n            icon={typeof icon === 'function' ? icon() : icon}\n          >\n            {typeof content === 'function' ? content() : content}\n          </PureContent>\n        ),\n        placement: 'top',\n        // @ts-expect-error\n        class: classNames(type && `${noticePrefixCls}-${type}`, hashId, className),\n        onClose: () => {\n          onClose?.();\n          resolve();\n        },\n      });\n\n      // Return close function\n      return () => {\n        close(mergedKey);\n      };\n    });\n  };\n\n  // >>> destroy\n  const destroy = (key?: Key) => {\n    if (key !== undefined)\n      close(key);\n    else\n      holderRef.value?.destroy();\n  };\n\n  const wrapAPI = {\n    open,\n    destroy,\n  } as MessageInstance;\n\n  const keys: NoticeType[] = ['info', 'success', 'warning', 'error', 'loading'];\n  keys.forEach((type) => {\n    const typeOpen: TypeOpen = (jointContent, duration, onClose) => {\n      let config: MessageArgsProps;\n      if (jointContent && typeof jointContent === 'object' && 'content' in jointContent) {\n        config = jointContent;\n      } else {\n        config = {\n          content: jointContent as VNode,\n        };\n      }\n\n      // Params\n      let mergedDuration: number | undefined;\n      let mergedOnClose: VoidFunction | undefined;\n      if (typeof duration === 'function') {\n        mergedOnClose = duration;\n      } else {\n        mergedDuration = duration;\n        mergedOnClose = onClose;\n      }\n\n      const mergedConfig = {\n        onClose: mergedOnClose,\n        duration: mergedDuration,\n        ...config,\n        type,\n      };\n\n      return open(mergedConfig);\n    };\n\n    wrapAPI[type] = typeOpen;\n  });\n\n  // ============================== Return ===============================\n  return [wrapAPI, () => <Holder key={holderKey} {...messageConfig} ref={holderRef} />] as const;\n}\n\nexport default function useMessage(messageConfig?: ConfigOptions) {\n  return useInternalMessage(messageConfig);\n}\n"],"names":["keyIndex","useInternalMessage","messageConfig","holderRef","shallowRef","holderKey","Symbol","close","key","value","open","config","fakeResult","then","originOpen","prefixCls","hashId","noticePrefixCls","content","icon","type","class","className","onClose","restConfig","mergedKey","undefined","wrapPromiseFn","resolve","_createVNode","PureContent","default","placement","classNames","destroy","wrapAPI","keys","forEach","typeOpen","jointContent","duration","mergedDuration","mergedOnClose","mergedConfig","Holder","useMessage"],"mappings":"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"}