element-plus
Version:
A Component Library for Vue 3
1 lines • 13.4 kB
Source Map (JSON)
{"version":3,"file":"method.mjs","sources":["../../../../../../packages/components/message/src/method.ts"],"sourcesContent":["import { createVNode, isVNode, render } from 'vue'\nimport {\n debugWarn,\n hasOwn,\n isBoolean,\n isClient,\n isElement,\n isFunction,\n isNumber,\n isString,\n} from '@element-plus/utils'\nimport { messageConfig } from '@element-plus/components/config-provider'\nimport MessageConstructor from './message.vue'\nimport {\n MESSAGE_DEFAULT_PLACEMENT,\n messageDefaults,\n messagePlacement,\n messageTypes,\n} from './message'\nimport { getOrCreatePlacementInstances, placementInstances } 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 MessagePlacement,\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 normalizeAppendTo = (normalized: MessageOptions) => {\n const appendTo = normalized.appendTo\n if (!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 'ElMessage',\n 'the appendTo option is not an HTMLElement. Falling back to document.body.'\n )\n appendTo = document.body\n }\n normalized.appendTo = appendTo\n }\n}\n\nconst normalizePlacement = (normalized: MessageOptions) => {\n // if placement is not passed and global has config, use global config\n if (\n !normalized.placement &&\n isString(messageConfig.placement) &&\n messageConfig.placement\n ) {\n normalized.placement = messageConfig.placement as\n | MessagePlacement\n | undefined\n }\n // if placement is not passed and global has no config, use default config\n if (!normalized.placement) {\n normalized.placement = MESSAGE_DEFAULT_PLACEMENT\n }\n // if placement is not valid, use default config\n if (!messagePlacement.includes(normalized.placement!)) {\n debugWarn(\n 'ElMessage',\n `Invalid placement: ${normalized.placement}. Falling back to '${MESSAGE_DEFAULT_PLACEMENT}'.`\n )\n normalized.placement = MESSAGE_DEFAULT_PLACEMENT\n }\n}\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: MessageOptions = {\n ...messageDefaults,\n ...options,\n }\n\n normalizeAppendTo(normalized)\n normalizePlacement(normalized)\n\n // When grouping is configured globally,\n // if grouping is manually set when calling message individually and it is not equal to the default value,\n // the global configuration cannot override the current setting. default => false\n if (isBoolean(messageConfig.grouping) && !normalized.grouping) {\n normalized.grouping = messageConfig.grouping\n }\n if (isNumber(messageConfig.duration) && normalized.duration === 3000) {\n normalized.duration = messageConfig.duration\n }\n if (isNumber(messageConfig.offset) && normalized.offset === 16) {\n normalized.offset = messageConfig.offset\n }\n if (isBoolean(messageConfig.showClose) && !normalized.showClose) {\n normalized.showClose = messageConfig.showClose\n }\n if (isBoolean(messageConfig.plain) && !normalized.plain) {\n normalized.plain = messageConfig.plain\n }\n\n return normalized as MessageParamsNormalized\n}\n\nconst closeMessage = (instance: MessageContext) => {\n const placement = instance.props.placement || MESSAGE_DEFAULT_PLACEMENT\n const instances = placementInstances[placement]\n\n const idx = instances.indexOf(instance)\n if (idx === -1) return\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 id = `message_${seed++}`\n const userOnClose = options.onClose\n\n const container = document.createElement('div')\n\n const props = {\n ...options,\n // now the zIndex will be used inside the message.vue component instead of here.\n // zIndex: nextIndex() + 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!.close()\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 const normalized = normalizeOptions(options)\n const instances = getOrCreatePlacementInstances(\n normalized.placement || MESSAGE_DEFAULT_PLACEMENT\n )\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 if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {\n return { close: () => undefined }\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 placement in placementInstances) {\n if (hasOwn(placementInstances, placement)) {\n // Create a copy of instances to avoid modification during iteration\n const instances: MessageContext[] = [...placementInstances[placement]]\n for (const instance of instances) {\n if (!type || type === instance.props.type) {\n instance.handler.close()\n }\n }\n }\n }\n}\n\nexport function closeAllByPlacement(placement: MessagePlacement) {\n if (!placementInstances[placement]) return\n // Create a copy of instances to avoid modification during iteration\n const instances = [...placementInstances[placement]]\n instances.forEach((instance) => instance.handler.close())\n}\n\nmessage.closeAll = closeAll\nmessage.closeAllByPlacement = closeAllByPlacement\nmessage._context = null\n\nexport default message as Message\n"],"names":["appendTo","MessageConstructor","instance"],"mappings":"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"}