{"version":3,"file":"HookNotification.cjs","sources":["../../../../../../packages/vue-components/vc-notification/src/HookNotification.tsx"],"sourcesContent":["import type { CSSMotionProps, Key, VueNode } from '@antdv/types';\nimport type { CSSProperties } from 'vue';\nimport type { NoticeProps } from './Notice';\nimport { classNames } from '@antdv/utils';\nimport { computed, defineComponent, ref, TransitionGroup, watch } from 'vue';\nimport Portal from '../../portal/src/Portal';\nimport { getTransitionGroupProps } from '../../transition';\nimport Notice from './Notice';\n\nlet seed = 0;\nconst now = Date.now();\n\nexport function getUuid() {\n  const id = seed;\n  seed += 1;\n  return `rcNotification_${now}_${id}`;\n}\n\nexport type Placement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n\nexport interface OpenConfig extends NoticeProps {\n  key: Key;\n  placement?: Placement;\n  content?: VueNode;\n  duration?: number | null;\n}\n\nexport type Placements = Partial<Record<Placement, OpenConfig[]>>;\n\nexport interface NoticeContent extends Omit<NoticeProps, 'prefixCls' | 'noticeKey' | 'onClose'> {\n  prefixCls?: string;\n  key?: Key;\n  updateMark?: string;\n  content?: any;\n  onClose?: () => void;\n  style?: CSSProperties;\n  class?: string;\n  placement?: Placement;\n}\n\nexport type NoticeFunc = (noticeProps: NoticeContent) => void;\nexport type HolderReadyCallback = (\n  div: HTMLDivElement,\n  noticeProps: NoticeProps & { key: Key },\n) => void;\n\nexport interface NotificationInstance {\n  notice: NoticeFunc;\n  removeNotice: (key: Key) => void;\n  destroy: () => void;\n  add: (noticeProps: NoticeContent) => void;\n  component: Notification;\n}\n\nexport interface HookNotificationProps {\n  prefixCls?: string;\n  transitionName?: string;\n  animation?: string | CSSMotionProps | ((placement?: Placement) => CSSMotionProps);\n  maxCount?: number;\n  closeIcon?: any;\n  hashId?: string;\n  // Hook Notification\n  remove: (key: Key) => void;\n  notices: NotificationState;\n  getStyles?: (placement?: Placement) => CSSProperties;\n  getClassName?: (placement?: Placement) => string;\n  onAllRemoved?: VoidFunction;\n  getContainer?: () => HTMLElement;\n}\n\ntype NotificationState = Array<{\n  notice: NoticeContent & {\n    userPassKey?: Key;\n  };\n  holderCallback?: HolderReadyCallback;\n}>;\n\nconst Notification = defineComponent<HookNotificationProps>({\n  name: 'HookNotification',\n  inheritAttrs: false,\n  props: [\n    'prefixCls',\n    'transitionName',\n    'animation',\n    'maxCount',\n    'closeIcon',\n    'hashId',\n    'remove',\n    'notices',\n    'getStyles',\n    'getClassName',\n    'onAllRemoved',\n    'getContainer',\n  ] as any,\n  setup(props, { attrs, slots }) {\n    const hookRefs = new Map<Key, HTMLDivElement>();\n    const notices = computed(() => props.notices);\n    const transitionProps = computed(() => {\n      let name = props.transitionName;\n      if (!name && props.animation) {\n        switch (typeof props.animation) {\n          case 'string':\n            name = props.animation;\n            break;\n          case 'function':\n            name = props.animation().name;\n            break;\n          case 'object':\n            name = props.animation.name;\n            break;\n          default:\n            name = `${props.prefixCls}-fade`;\n            break;\n        }\n      }\n      return getTransitionGroupProps(name);\n    });\n\n    const remove = (key: Key) => props.remove(key);\n    const placements = ref({} as Record<Placement, NotificationState>);\n    watch(notices, () => {\n      const nextPlacements = {} as any;\n      // init placements with animation\n      Object.keys(placements.value).forEach((placement) => {\n        nextPlacements[placement] = [];\n      });\n      props.notices.forEach((config) => {\n        const { placement = 'topRight' } = config.notice;\n        if (placement) {\n          nextPlacements[placement] = nextPlacements[placement] || [];\n          nextPlacements[placement].push(config);\n        }\n      });\n      placements.value = nextPlacements;\n    });\n\n    const placementList = computed(() => Object.keys(placements.value) as Placement[]);\n\n    return () => {\n      const { prefixCls, closeIcon = slots.closeIcon?.({ prefixCls }) } = props;\n      const noticeNodes = placementList.value.map((placement) => {\n        const noticesForPlacement = placements.value[placement];\n        const classes = props.getClassName?.(placement);\n        const styles = props.getStyles?.(placement);\n        const noticeNodesForPlacement = noticesForPlacement.map(({ notice, holderCallback }: any, index) => {\n          const updateMark = index === notices.value.length - 1 ? notice.updateMark : undefined;\n          const { key, userPassKey } = notice;\n          const { content } = notice;\n          const noticeProps = {\n            prefixCls,\n            closeIcon: typeof closeIcon === 'function' ? closeIcon({ prefixCls }) : closeIcon,\n            ...(notice as any),\n            ...notice.props,\n            key,\n            noticeKey: userPassKey || key,\n            updateMark,\n            onClose: (noticeKey: Key) => {\n              remove(noticeKey);\n              notice.onClose?.();\n            },\n            onClick: notice.onClick,\n          };\n\n          if (holderCallback) {\n            return (\n              <div\n                key={key}\n                class={`${prefixCls}-hook-holder`}\n                ref={(div: HTMLDivElement) => {\n                  if (typeof key === 'undefined')\n                    return;\n\n                  if (div) {\n                    hookRefs.set(key, div);\n                    holderCallback(div, noticeProps);\n                  } else {\n                    hookRefs.delete(key);\n                  }\n                }}\n              />\n            );\n          }\n\n          return (\n            <Notice {...noticeProps} class={classNames(noticeProps.class, props.hashId)}>\n              {typeof content === 'function' ? content({ prefixCls }) : content}\n            </Notice>\n          );\n        },\n        );\n        const className = {\n          [prefixCls]: 1,\n          [`${prefixCls}-${placement}`]: 1,\n          [attrs.class as string]: !!attrs.class,\n          [props.hashId]: true,\n          [classes]: !!classes,\n        };\n        function onAfterLeave() {\n          if (noticesForPlacement.length > 0)\n            return;\n\n          Reflect.deleteProperty(placements.value, placement);\n          props.onAllRemoved?.();\n        }\n        return (\n          <div\n            key={placement}\n            class={className}\n            style={\n              (attrs.style as CSSProperties)\n              || styles\n              || { top: '65px', left: '50%' }\n            }\n          >\n            <TransitionGroup tag=\"div\" {...transitionProps.value} onAfterLeave={onAfterLeave}>\n              {noticeNodesForPlacement}\n            </TransitionGroup>\n          </div>\n        );\n      });\n      return <Portal getContainer={props.getContainer}>{noticeNodes}</Portal>;\n    };\n  },\n});\n\nexport default Notification;\n"],"names":["seed","now","Date","getUuid","id","Notification","defineComponent","name","inheritAttrs","props","setup","attrs","slots","hookRefs","Map","notices","computed","transitionProps","transitionName","animation","prefixCls","getTransitionGroupProps","remove","key","placements","ref","watch","nextPlacements","Object","keys","value","forEach","placement","config","notice","push","placementList","closeIcon","noticeNodes","map","noticesForPlacement","classes","getClassName","styles","getStyles","noticeNodesForPlacement","holderCallback","index","updateMark","length","undefined","userPassKey","content","noticeProps","noticeKey","onClose","onClick","_createVNode","div","set","delete","Notice","classNames","class","hashId","default","className","onAfterLeave","Reflect","deleteProperty","onAllRemoved","style","top","left","TransitionGroup","Portal","getContainer"],"mappings":"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"}