{"version":3,"file":"useNotification.cjs","sources":["../../../../../../packages/vue-components/vc-notification/src/useNotification.tsx"],"sourcesContent":["import type { CSSMotionProps, Key, VueNode } from '@antdv/types';\nimport type { CSSProperties } from 'vue';\nimport type { HolderReadyCallback, NoticeContent } from './HookNotification';\nimport type { NotificationInstance, OpenConfig, Placement } from './Notification';\nimport { shallowRef, watch } from 'vue';\nimport HookNotification, { getUuid } from './HookNotification';\n\nconst defaultGetContainer = () => document.body;\n\ntype OptionalConfig = Partial<OpenConfig>;\n\nexport interface NotificationConfig {\n  prefixCls?: string;\n  /** Customize container. It will repeat call which means you should return same container element. */\n  getContainer?: () => HTMLElement;\n  motion?: CSSMotionProps | ((placement?: Placement) => CSSMotionProps);\n  closeIcon?: VueNode;\n  closable?: boolean;\n  maxCount?: number;\n  duration?: number;\n  /** @private. Config for notification holder style. Safe to remove if refactor */\n  getClassName?: (placement?: Placement) => string;\n  /** @private. Config for notification holder style. Safe to remove if refactor */\n  getStyles?: (placement?: Placement) => CSSProperties;\n  /** @private Trigger when all the notification closed. */\n  onAllRemoved?: VoidFunction;\n  hashId?: string;\n}\n\nexport interface NotificationAPI {\n  open: (config: OptionalConfig) => void;\n  close: (key: Key) => void;\n  destroy: () => void;\n}\n\ninterface OpenTask {\n  type: 'open';\n  config: OpenConfig;\n}\n\ninterface CloseTask {\n  type: 'close';\n  key: Key;\n}\n\ninterface DestroyTask {\n  type: 'destroy';\n}\n\ntype Task = OpenTask | CloseTask | DestroyTask;\n\nlet uniqueKey = 0;\n\nfunction mergeConfig<T>(...objList: Array<Partial<T>>): T {\n  const clone: T = {} as T;\n\n  objList.forEach((obj) => {\n    if (obj) {\n      Object.keys(obj).forEach((key) => {\n        const val = obj[key];\n\n        if (val !== undefined)\n          clone[key] = val;\n      });\n    }\n  });\n\n  return clone;\n}\n\nexport default function useNotification(rootConfig: NotificationConfig = {}) {\n  const {\n    getContainer = defaultGetContainer,\n    motion,\n    prefixCls,\n    maxCount,\n    getClassName,\n    getStyles,\n    onAllRemoved,\n    ...shareConfig\n  } = rootConfig;\n\n  const notices = shallowRef([]);\n  const notificationsRef = shallowRef<NotificationInstance>();\n  const add = (originNotice: NoticeContent, holderCallback?: HolderReadyCallback) => {\n    const key = originNotice.key || getUuid();\n    const notice: NoticeContent & { key: Key; userPassKey?: Key } = {\n      ...originNotice,\n      key,\n    };\n    const noticeIndex = notices.value.map(v => v.notice.key).indexOf(key);\n    const updatedNotices = notices.value.concat();\n    if (noticeIndex !== -1) {\n      updatedNotices.splice(noticeIndex, 1, { notice, holderCallback } as any);\n    } else {\n      if (maxCount && notices.value.length >= maxCount) {\n        notice.key = updatedNotices[0].notice.key as Key;\n        notice.updateMark = getUuid();\n        notice.userPassKey = key;\n        updatedNotices.shift();\n      }\n      updatedNotices.push({ notice, holderCallback } as any);\n    }\n    notices.value = updatedNotices;\n  };\n  const removeNotice = (removeKey: Key) => {\n    notices.value = notices.value.filter(({ notice: { key, userPassKey } }) => {\n      const mergedKey = userPassKey || key;\n      return mergedKey !== removeKey;\n    });\n  };\n\n  const destroy = () => {\n    notices.value = [];\n  };\n\n  const contextHolder = () => (\n    <HookNotification\n      ref={notificationsRef}\n      prefixCls={prefixCls}\n      maxCount={maxCount}\n      notices={notices.value}\n      remove={removeNotice}\n      getClassName={getClassName}\n      getStyles={getStyles}\n      animation={motion}\n      hashId={rootConfig.hashId}\n      onAllRemoved={onAllRemoved}\n      getContainer={getContainer}\n    >\n    </HookNotification>\n  );\n\n  const taskQueue = shallowRef([] as Task[]);\n  // ========================= Refs =========================\n  const api = {\n    open: (config: OpenConfig) => {\n      const mergedConfig = mergeConfig(shareConfig, config);\n      // @ts-expect-error\n      if (mergedConfig.key === null || mergedConfig.key === undefined) {\n        // @ts-expect-error\n        mergedConfig.key = `vc-notification-${uniqueKey}`;\n        uniqueKey += 1;\n      }\n\n      taskQueue.value = [...taskQueue.value, { type: 'open', config: mergedConfig as any }];\n    },\n    close: (key) => {\n      taskQueue.value = [...taskQueue.value, { type: 'close', key }];\n    },\n    destroy: () => {\n      taskQueue.value = [...taskQueue.value, { type: 'destroy' }];\n    },\n  };\n\n  // ======================== Effect ========================\n  watch(taskQueue, () => {\n    // Flush task when node ready\n    if (taskQueue.value.length) {\n      taskQueue.value.forEach((task) => {\n        switch (task.type) {\n          case 'open':\n            // @ts-expect-error\n            add(task.config);\n            break;\n\n          case 'close':\n            removeNotice(task.key);\n            break;\n          case 'destroy':\n            destroy();\n            break;\n        }\n      });\n      taskQueue.value = [];\n    }\n  });\n\n  // ======================== Return ========================\n  return [api, contextHolder] as const;\n}\n"],"names":["defaultGetContainer","document","body","uniqueKey","mergeConfig","objList","clone","forEach","obj","Object","keys","key","val","undefined","useNotification","rootConfig","getContainer","motion","prefixCls","maxCount","getClassName","getStyles","onAllRemoved","shareConfig","notices","shallowRef","notificationsRef","add","originNotice","holderCallback","getUuid","notice","noticeIndex","value","map","v","indexOf","updatedNotices","concat","splice","length","updateMark","userPassKey","shift","push","removeNotice","removeKey","filter","mergedKey","destroy","contextHolder","_createVNode","HookNotification","hashId","taskQueue","api","open","config","mergedConfig","type","close","watch","task"],"mappings":"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"}