tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 11.9 kB
Source Map (JSON)
{"version":3,"file":"plugin.mjs","sources":["../../../components/message/plugin.tsx"],"sourcesContent":["/**\n * Vue.prototype.$message = MessagePlugin;\n *\n * this.$message({ theme: 'info', default: '这是信息', duration: 3000 })\n * this.$message.info('这是信息')\n * this.$message.info('这是信息', 3000)\n * this.$message.info({ content: '这是信息', duration: 3000 })\n * this.$message.success({ content: '这是信息', duration: 3000 })\n * this.$message.warning()\n * this.$message.error()\n * this.$message.question()\n * this.$message.loading()\n * 上述函数返回值:promise: Promise<{close: Function}>\n *\n * // close all message\n * this.$message.closeAll()\n *\n * // close one message. 参数 p 为 this.$message 系列函数返回值,promise: Promise<{close: Function}>\n * this.$message.close(p)\n *\n * // close one message.\n * const msg = this.$message.info({ content: '这是信息', duration: 0 })\n * msg.then(instance => instance.close())\n *\n */\nimport { App, AppContext, createVNode, isVNode, nextTick, Plugin, render, VNode } from 'vue';\nimport { isObject, isString } from 'lodash-es';\nimport { getAttach } from '@tdesign/shared-utils';\nimport MessageList, { DEFAULT_Z_INDEX } from './message-list';\n\nimport type { AttachNodeReturnValue } from '../common';\nimport type {\n MessageCloseAllMethod,\n MessageCloseMethod,\n MessageErrorMethod,\n MessageInfoMethod,\n MessageInstance,\n MessageLoadingMethod,\n MessageMethod,\n MessageOptions,\n MessageQuestionMethod,\n MessageSuccessMethod,\n MessageWarningMethod,\n} from './type';\n\n// 存储不同 attach 和 不同 placement 消息列表实例\nconst instanceMap: Map<AttachNodeReturnValue, Record<string, VNode>> = new Map();\n\nfunction handleParams(params: MessageOptions): MessageOptions {\n const options: MessageOptions = {\n duration: 3000,\n attach: 'body',\n zIndex: DEFAULT_Z_INDEX,\n placement: 'top',\n ...params,\n };\n options.content = params.content;\n return options;\n}\n\nconst MessageFunction = (props: MessageOptions, context?: AppContext): Promise<MessageInstance> => {\n const options = handleParams(props);\n const { attach, placement } = options;\n const attachDom = getAttach(attach);\n if (!instanceMap.get(attachDom)) {\n instanceMap.set(attachDom, {});\n }\n const p = instanceMap.get(attachDom)[placement];\n let mgKey: number;\n if (!p || !attachDom.contains(p.el as HTMLElement)) {\n const wrapper = document.createElement('div');\n\n const instance = createVNode(MessageList, {\n zIndex: options.zIndex,\n placement: options.placement,\n });\n\n // eslint-disable-next-line no-underscore-dangle\n if (context ?? MessagePlugin._context) {\n // eslint-disable-next-line no-underscore-dangle\n instance.appContext = context ?? MessagePlugin._context;\n }\n\n attachDom.appendChild(wrapper);\n render(instance, wrapper);\n\n mgKey = instance.component.exposed.add(options);\n instanceMap.get(attachDom)[placement] = instance;\n } else {\n mgKey = p.component.exposed.add(options);\n }\n // 返回最新消息的 Element\n return new Promise((resolve) => {\n const ins = instanceMap.get(attachDom)[placement];\n nextTick(() => {\n const msg: Array<MessageInstance> = ins.component.exposed.messageList.value;\n resolve(msg?.find((mg) => (mg as any).$?.vnode?.key === mgKey));\n });\n });\n};\n\nconst showThemeMessage: MessageMethod = (theme, params, duration, context) => {\n let options: MessageOptions = { theme };\n\n if (isVNode(params)) {\n options.content = () => params;\n } else if (isString(params)) {\n options.content = params;\n } else if (isObject(params) && !(params instanceof Array)) {\n options = { ...options, ...params };\n }\n\n (duration || duration === 0) && (options.duration = duration);\n return MessageFunction(options, context);\n};\n\ninterface ExtraApi {\n info: MessageInfoMethod;\n success: MessageSuccessMethod;\n warning: MessageWarningMethod;\n error: MessageErrorMethod;\n question: MessageQuestionMethod;\n loading: MessageLoadingMethod;\n close: MessageCloseMethod;\n closeAll: MessageCloseAllMethod;\n}\n\nexport type MessagePluginType = Plugin & ExtraApi & MessageMethod;\n\nconst extraApi: ExtraApi = {\n info: (params, duration, context) => showThemeMessage('info', params, duration, context),\n success: (params, duration, context) => showThemeMessage('success', params, duration, context),\n warning: (params, duration, context) => showThemeMessage('warning', params, duration, context),\n error: (params, duration, context) => showThemeMessage('error', params, duration, context),\n question: (params, duration, context) => showThemeMessage('question', params, duration, context),\n loading: (params, duration, context) => showThemeMessage('loading', params, duration, context),\n close: (promise) => {\n promise.then((instance) => instance?.close());\n },\n closeAll: () => {\n if (instanceMap instanceof Map) {\n instanceMap.forEach((attach) => {\n Object.keys(attach).forEach((placement) => {\n const instance = attach[placement];\n instance.component.exposed.removeAll();\n });\n });\n }\n },\n};\n\nexport const MessagePlugin = showThemeMessage as MessagePluginType & {\n _context?: AppContext;\n};\n\nMessagePlugin.install = (app: App): void => {\n app.config.globalProperties.$message = showThemeMessage;\n // 这样定义后,可以通过 this.$message 调用插件\n Object.keys(extraApi).forEach((funcName: keyof ExtraApi) => {\n app.config.globalProperties.$message[funcName] = extraApi[funcName];\n });\n // eslint-disable-next-line no-underscore-dangle\n MessagePlugin._context = app._context;\n};\n\n/**\n * 这样定义后,用户可以直接引入方法然后调用,示例如下:\n * import { showMessage } from 'message/index.ts';\n * showMessage();\n */\nObject.keys(extraApi).forEach((funcName: keyof ExtraApi) => {\n // @ts-ignore\n // TODO https://github.com/microsoft/TypeScript/issues/32693\n MessagePlugin[funcName] = extraApi[funcName];\n});\n\nexport default MessagePlugin;\n"],"names":["instanceMap","Map","handleParams","params","options","_objectSpread","duration","attach","zIndex","DEFAULT_Z_INDEX","placement","content","MessageFunction","props","context","attachDom","getAttach","get","set","p","mgKey","contains","el","wrapper","document","createElement","instance","createVNode","MessageList","MessagePlugin","_context","appContext","appendChild","render","component","exposed","add","Promise","resolve","ins","nextTick","msg","messageList","value","find","mg","_mg$$","$","vnode","key","showThemeMessage","theme","isVNode","isString","isObject","Array","extraApi","info","success","warning","error","question","loading","close","promise","then","closeAll","forEach","Object","keys","removeAll","install","app","config","globalProperties","$message","funcName"],"mappings":"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"}