{"version":3,"file":"method.mjs","sources":["../../../../../../packages/components/message/src/method.ts"],"sourcesContent":["import { createVNode, render } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport {\n  debugWarn,\n  isElement,\n  isFunction,\n  isNumber,\n  isString,\n  isVNode,\n} from '@bigin/utils'\nimport { useZIndex } from '@bigin/hooks'\nimport { messageConfig } from '@bigin/components/config-provider/src/config-provider'\nimport MessageConstructor from './message.vue'\nimport { messageDefaults, messageTypes } from './message'\nimport { instances } from './instance'\n\nimport type { MessageContext } from './instance'\nimport type { AppContext } from 'vue'\nimport type {\n  Message,\n  MessageFn,\n  MessageHandler,\n  MessageOptions,\n  MessageParams,\n  MessageParamsNormalized,\n  messageType,\n} from './message'\n\nlet seed = 1\n\n// TODO: Since Notify.ts is basically the same like this file. So we could do some encapsulation against them to reduce code duplication.\n\nconst normalizeOptions = (params?: MessageParams) => {\n  const options: MessageOptions =\n    !params || isString(params) || isVNode(params) || isFunction(params)\n      ? { message: params }\n      : params\n\n  const normalized = {\n    ...messageDefaults,\n    ...options,\n  }\n\n  if (!normalized.appendTo) {\n    normalized.appendTo = document.body\n  } else if (isString(normalized.appendTo)) {\n    let appendTo = document.querySelector<HTMLElement>(normalized.appendTo)\n\n    // should fallback to default value with a warning\n    if (!isElement(appendTo)) {\n      debugWarn(\n        'BMessage',\n        'the appendTo option is not an HTMLElement. Falling back to document.body.'\n      )\n      appendTo = document.body\n    }\n\n    normalized.appendTo = appendTo\n  }\n\n  return normalized as MessageParamsNormalized\n}\n\nconst closeMessage = (instance: MessageContext) => {\n  const idx = instances.indexOf(instance)\n  if (idx === -1) return\n\n  instances.splice(idx, 1)\n  const { handler } = instance\n  handler.close()\n}\n\nconst createMessage = (\n  { appendTo, ...options }: MessageParamsNormalized,\n  context?: AppContext | null\n): MessageContext => {\n  const { nextZIndex } = useZIndex()\n\n  const id = `message_${seed++}`\n  const userOnClose = options.onClose\n\n  const container = document.createElement('div')\n\n  const props = {\n    ...options,\n    zIndex: nextZIndex() + options.zIndex,\n    id,\n    onClose: () => {\n      userOnClose?.()\n      closeMessage(instance)\n    },\n\n    // clean message element preventing mem leak\n    onDestroy: () => {\n      // since the element is destroy, then the VNode should be collected by GC as well\n      // we do not want cause any mem leak because we have returned vm as a reference to users\n      // so that we manually set it to false.\n      render(null, container)\n    },\n  }\n  const vnode = createVNode(\n    MessageConstructor,\n    props,\n    isFunction(props.message) || isVNode(props.message)\n      ? {\n          default: isFunction(props.message)\n            ? props.message\n            : () => props.message,\n        }\n      : null\n  )\n  vnode.appContext = context || message._context\n\n  render(vnode, container)\n  // instances will remove this item when close function gets called. So we do not need to worry about it.\n  appendTo.appendChild(container.firstElementChild!)\n\n  const vm = vnode.component!\n\n  const handler: MessageHandler = {\n    // instead of calling the onClose function directly, setting this value so that we can have the full lifecycle\n    // for out component, so that all closing steps will not be skipped.\n    close: () => {\n      vm.exposed!.visible.value = false\n    },\n  }\n\n  const instance: MessageContext = {\n    id,\n    vnode,\n    vm,\n    handler,\n    props: (vnode.component as any).props,\n  }\n\n  return instance\n}\n\nconst message: MessageFn &\n  Partial<Message> & { _context: AppContext | null } = (\n  options = {},\n  context\n) => {\n  if (!isClient) return { close: () => undefined }\n\n  if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {\n    return { close: () => undefined }\n  }\n\n  const normalized = normalizeOptions(options)\n\n  if (normalized.grouping && instances.length) {\n    const instance = instances.find(\n      ({ vnode: vm }) => vm.props?.message === normalized.message\n    )\n    if (instance) {\n      instance.props.repeatNum += 1\n      instance.props.type = normalized.type\n      return instance.handler\n    }\n  }\n\n  const instance = createMessage(normalized, context)\n\n  instances.push(instance)\n  return instance.handler\n}\n\nmessageTypes.forEach((type) => {\n  message[type] = (options = {}, appContext) => {\n    const normalized = normalizeOptions(options)\n    return message({ ...normalized, type }, appContext)\n  }\n})\n\nexport function closeAll(type?: messageType): void {\n  for (const instance of instances) {\n    if (!type || type === instance.props.type) {\n      instance.handler.close()\n    }\n  }\n}\n\nmessage.closeAll = closeAll\nmessage._context = null\n\nexport default message as Message\n"],"names":["instance"],"mappings":"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"}