UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 8.5 kB
{"version":3,"file":"plugin.mjs","sources":["../../src/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 './messageList';\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/isObject';\nimport isString from 'lodash/isString';\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\nconst MessagePlugin: MessagePluginType = showThemeMessage as MessagePluginType;\n\nMessagePlugin.install = (app: App): void => {\n app.config.globalProperties.$message = showThemeMessage;\n // 这样定义后,可以通过 this.$message 调用插件\n Object.keys(extraApi).forEach((funcName) => {\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) => {\n MessagePlugin[funcName] = extraApi[funcName];\n});\n\nexport default MessagePlugin;\n"],"names":["duration","attach","zIndex","placement","options","instanceMap","mgKey","attachDom","nextTick","theme","isString","isObject","info","success","warning","error","question","loading","close","promise","MessagePlugin","app","Object"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAA,WAAA,kBAAA,IAAA,GAAA,EAAA,CAAA;AAEA,SAAA,YAAA,CAAA,MAAA,EAAA;;AAEIA,IAAAA,QAAAA,EAAAA,GAAAA;AACAC,IAAAA,MAAAA,EAAAA,MAAAA;AACAC,IAAAA,MAAAA,EAAAA,eAAAA;AACAC,IAAAA,SAAAA,EAAAA,KAAAA;AAAW,GAAA,EAAA,MAAA,CAAA,CAAA;AAGbC,EAAAA,OAAAA,CAAAA,OAAAA,GAAAA,MAAAA,CAAAA,OAAAA,CAAAA;AACO,EAAA,OAAA,OAAA,CAAA;AACT,CAAA;AAEA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,KAAA,EAAA;AACQ,EAAA,IAAA,OAAA,GAAA,YAAA,CAAA,KAAA,CAAA,CAAA;AACA,EAAA,IAAA,MAAA,GAAA,OAAA,CAAA,MAAA;;AACA,EAAA,IAAA,SAAA,GAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACN,EAAA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,SAAA,CAAA,EAAA;AACcC,IAAAA,WAAAA,CAAAA,GAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,CAAAA;AACd,GAAA;;AAEI,EAAA,IAAA,KAAA,CAAA;;AAEI,IAAA,IAAA,OAAA,GAAA,QAAA,CAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AAEA,IAAA,IAAA,QAAA,GAAA,SAAA,CAAA,WAAA,EAAA;;;AAGN,KAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA;AAEQC,IAAAA,KAAAA,GAAAA,QAAAA,CAAAA,GAAAA,CAAAA,OAAAA,CAAAA,CAAAA;;AAERC,IAAAA,SAAAA,CAAAA,WAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACF,GAAA,MAAA;AACUD,IAAAA,KAAAA,GAAAA,CAAAA,CAAAA,GAAAA,CAAAA,OAAAA,CAAAA,CAAAA;AACV,GAAA;AAEO,EAAA,OAAA,IAAA,OAAA,CAAA,UAAA,OAAA,EAAA;;AAELE,IAAAA,QAAAA,CAAAA,YAAAA;AACE,MAAA,IAAA,GAAA,GAAA,GAAA,CAAA,WAAA,CAAA;;AACmB,QAAA,IAAA,KAAA,CAAA;;AAAiC,OAAA,CAAA,CAAA,CAAA;AACtD,KAAA,CAAA,CAAA;AACF,GAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA;AACM,EAAA,IAAA,OAAA,GAAA;AAA4BC,IAAAA,KAAAA,EAAAA,KAAAA;;AAC5B,EAAA,IAAAC,UAAA,CAAA,MAAA,CAAA,EAAA;;AAEJ,GAAA,MAAA,IAAAC,UAAA,CAAA,MAAA,CAAA,IAAA,EAAA,MAAA,YAAA,KAAA,CAAA,EAAA;;AAEA,GAAA;;;AAGF,CAAA,CAAA;AAeA,IAAA,QAAA,GAAA;AACEC,EAAAA,IAAAA,EAAAA,SAAAA,IAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAAqE,GAAA;AACrEC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAAuE,GAAA;AACvEC,EAAAA,QAAAA,EAAAA,SAAAA,QAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA6E,GAAA;AAC7EC,EAAAA,OAAAA,EAAAA,SAAAA,OAAAA,CAAAA,MAAAA,EAAAA,QAAAA,EAAAA;;AAA2E,GAAA;AAC3EC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,OAAAA,EAAAA;AACEC,IAAAA,OAAAA,CAAAA,IAAAA,CAAAA,UAAAA,QAAAA,EAAAA;;;;;;AAIcd,MAAAA,WAAAA,CAAAA,OAAAA,CAAAA,UAAAA,MAAAA,EAAAA;;AAER,UAAA,IAAA,QAAA,GAAA,MAAA,CAAA,SAAA,CAAA,CAAA;;AAEF,SAAA,CAAA,CAAA;AACF,OAAA,CAAA,CAAA;AACF,KAAA;AACF,GAAA;AACF,CAAA,CAAA;AAEA,IAAA,aAAA,GAAA,iBAAA;AAEAe,aAAAA,CAAAA,OAAAA,GAAAA,UAAAA,GAAAA,EAAAA;AACMC,EAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,GAAAA,gBAAAA,CAAAA;;AAGFA,IAAAA,GAAAA,CAAAA,MAAAA,CAAAA,gBAAAA,CAAAA,QAAAA,CAAAA,QAAAA,CAAAA,GAAAA,QAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACF,GAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAOAC,MAAAA,CAAAA,IAAAA,CAAAA,QAAAA,CAAAA,CAAAA,OAAAA,CAAAA,UAAAA,QAAAA,EAAAA;AACEF,EAAAA,aAAAA,CAAAA,QAAAA,CAAAA,GAAAA,QAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACF,CAAA,CAAA;;;;"}