UNPKG

tdesign-vue-next

Version:
1 lines 10.4 kB
{"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, createApp, nextTick, Plugin, ComponentPublicInstance } from 'vue';\nimport MessageList, { DEFAULT_Z_INDEX } from './message-list';\nimport { getAttach } from '../utils/dom';\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 } from 'lodash-es';\nimport { isString } from 'lodash-es';\n\n// 存储不同 attach 和 不同 placement 消息列表实例\nconst instanceMap: Map<AttachNodeReturnValue, Record<string, ComponentPublicInstance>> = 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): 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) {\n const wrapper = document.createElement('div');\n\n const instance = createApp(MessageList, {\n zIndex: options.zIndex,\n placement: options.placement,\n }).mount(wrapper);\n\n mgKey = instance.add(options);\n instanceMap.get(attachDom)[placement] = instance;\n attachDom.appendChild(wrapper);\n } else {\n mgKey = p.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.messageList;\n resolve(msg?.find((mg) => mg.$?.vnode?.key === mgKey));\n });\n });\n};\n\nconst showThemeMessage: MessageMethod = (theme, params, duration) => {\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);\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) => showThemeMessage('info', params, duration),\n success: (params, duration) => showThemeMessage('success', params, duration),\n warning: (params, duration) => showThemeMessage('warning', params, duration),\n error: (params, duration) => showThemeMessage('error', params, duration),\n question: (params, duration) => showThemeMessage('question', params, duration),\n loading: (params, duration) => showThemeMessage('loading', params, duration),\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.list = [];\n });\n });\n }\n },\n};\n\nexport const MessagePlugin = showThemeMessage as MessagePluginType;\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};\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","attachDom","getAttach","get","set","p","mgKey","wrapper","document","createElement","instance","createApp","MessageList","mount","add","appendChild","Promise","resolve","ins","nextTick","msg","messageList","find","mg","_mg$$","$","vnode","key","showThemeMessage","theme","isString","isObject","Array","extraApi","info","success","warning","error","question","loading","close","promise","then","closeAll","forEach","Object","keys","list","MessagePlugin","install","app","config","globalProperties","$message","funcName"],"mappings":"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"}