UNPKG

tdesign-vue-next

Version:
1 lines 7.98 kB
{"version":3,"file":"plugin.mjs","sources":["../../../components/notification/plugin.ts"],"sourcesContent":["import { App, Plugin, createApp, nextTick, ComponentPublicInstance } from 'vue';\nimport NotificationList from './notification-list';\nimport { getAttach } from '../utils/dom';\nimport {\n NotificationOptions,\n NotificationInstance,\n NotificationMethod,\n NotificationInfoMethod,\n NotificationWarningMethod,\n NotificationErrorMethod,\n NotificationSuccessMethod,\n NotificationCloseMethod,\n NotificationCloseAllMethod,\n} from './type';\nimport { AttachNodeReturnValue } from '../common';\nimport './style';\n\nlet seed = 0;\n// 存储不同 attach 和 不同 placement 消息列表实例\nconst instanceMap: Map<AttachNodeReturnValue, Record<string, ComponentPublicInstance>> = new Map();\n\nconst NotificationFunction = (options: NotificationOptions): Promise<NotificationInstance> => {\n seed += 1;\n const hackOptions = {\n placement: 'top-right',\n zIndex: 6000,\n attach: 'body',\n id: seed,\n ...options,\n };\n hackOptions.content = options.content ? options.content : '';\n\n const attachEl = getAttach(hackOptions.attach);\n\n if (!instanceMap.get(attachEl)) {\n instanceMap.set(attachEl, {});\n }\n let tmpInstance = instanceMap.get(attachEl)[hackOptions.placement];\n if (!tmpInstance) {\n const wrapper = document.createElement('div');\n\n const instance = createApp(NotificationList, {\n placement: hackOptions.placement,\n }).mount(wrapper);\n\n instance.add(hackOptions);\n instanceMap.get(attachEl)[hackOptions.placement] = instance;\n tmpInstance = instance;\n attachEl.appendChild(instance.$el);\n } else {\n tmpInstance.add(hackOptions);\n }\n\n return new Promise((resolve) => {\n const ins = instanceMap.get(attachEl)[hackOptions.placement];\n nextTick(() => {\n const notificationList: NotificationInstance[] = ins.notificationList;\n resolve(notificationList?.find((notify) => notify.$?.vnode?.key === hackOptions.id));\n });\n });\n};\n\nconst showThemeNotification: NotificationMethod = (theme, options) => {\n const hackOptions = { ...options, theme };\n return NotificationFunction(hackOptions);\n};\n\ninterface ExtraApi {\n info: NotificationInfoMethod;\n success: NotificationSuccessMethod;\n warning: NotificationWarningMethod;\n error: NotificationErrorMethod;\n close: NotificationCloseMethod;\n closeAll: NotificationCloseAllMethod;\n}\n\nconst extraApi: ExtraApi = {\n info: (options) => showThemeNotification('info', options),\n success: (options) => showThemeNotification('success', options),\n warning: (options) => showThemeNotification('warning', options),\n error: (options) => showThemeNotification('error', options),\n close: (promise) => {\n promise.then((instance) => instance.close());\n },\n closeAll: () => {\n instanceMap.forEach((attach) => {\n Object.keys(attach).forEach((placement) => {\n attach[placement].removeAll();\n });\n });\n },\n};\n\nexport type NotificationPluginType = Plugin & ExtraApi & NotificationMethod;\n\nconst NotificationPlugin: NotificationPluginType = showThemeNotification as NotificationPluginType;\n\nNotificationPlugin.install = (app: App) => {\n app.config.globalProperties.$notify = showThemeNotification;\n Object.keys(extraApi).forEach((funcName: keyof ExtraApi) => {\n app.config.globalProperties.$notify[funcName] = extraApi[funcName];\n });\n};\n\nObject.keys(extraApi).forEach((funcName: keyof ExtraApi) => {\n // @ts-ignore\n // TODO https://github.com/microsoft/TypeScript/issues/32693\n NotificationPlugin[funcName] = extraApi[funcName];\n});\n\nexport const NotifyPlugin = NotificationPlugin;\n\nexport default NotificationPlugin;\n"],"names":["seed","instanceMap","Map","NotificationFunction","options","hackOptions","_objectSpread","placement","zIndex","attach","id","content","attachEl","getAttach","get","set","tmpInstance","wrapper","document","createElement","instance","createApp","NotificationList","mount","add","appendChild","$el","Promise","resolve","ins","nextTick","notificationList","find","notify","_notify$$","$","vnode","key","showThemeNotification","theme","extraApi","info","success","warning","error","close","promise","then","closeAll","forEach","Object","keys","removeAll","NotificationPlugin","install","app","config","globalProperties","$notify","funcName","NotifyPlugin"],"mappings":"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"}