tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 11.7 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, nextTick, Plugin, AppContext, createVNode, render, VNode } from 'vue';\nimport MessageList, { DEFAULT_Z_INDEX } from './message-list';\nimport { getAttach } from '@tdesign/shared-utils';\nimport {\n MessageOptions,\n MessageMethod,\n MessageInstance,\n MessageInfoMethod,\n MessageErrorMethod,\n MessageWarningMethod,\n MessageSuccessMethod,\n MessageLoadingMethod,\n MessageQuestionMethod,\n MessageCloseMethod,\n MessageCloseAllMethod,\n} from './type';\nimport { AttachNodeReturnValue } from '../common';\nimport { isObject, isString } from 'lodash-es';\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 if (isString(params)) {\n options.content = params;\n } else if (isObject(params) && !(params instanceof Array)) {\n options = { ...options, ...params };\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","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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"}