tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 10.6 kB
Source Map (JSON)
{"version":3,"file":"plugin.mjs","sources":["../../../components/dialog/plugin.tsx"],"sourcesContent":["import { App, ref, Plugin, defineComponent, h, onMounted, nextTick, AppContext, createVNode, render } from 'vue';\nimport DialogComponent from './dialog';\nimport { getAttach } from '@tdesign/shared-utils';\nimport { DialogOptions, DialogMethod, DialogConfirmMethod, DialogAlertMethod, DialogInstance } from './type';\nimport { omit } from 'lodash-es';\n\nconst createDialog: DialogMethod = (props, context) => {\n const options = { ...props };\n const wrapper = document.createElement('div');\n const visible = ref(false);\n const { className, style } = options;\n\n let preClassName = className;\n\n const updateClassNameStyle = (className: string, style: DialogOptions['style']) => {\n if (className) {\n if (preClassName && preClassName !== className) {\n wrapper.firstElementChild.classList.remove(...preClassName.split(' ').map((name) => name.trim()));\n }\n className.split(' ').forEach((name) => {\n wrapper.firstElementChild.classList.add(name.trim());\n });\n }\n\n if (style) {\n (wrapper.firstElementChild as HTMLElement).style.cssText += style;\n }\n\n preClassName = className;\n };\n\n function destroySelf() {\n render(null, wrapper);\n wrapper.remove();\n }\n\n const component = defineComponent({\n setup(props, { expose }) {\n const dialogOptions = ref<Record<string, any>>(options);\n onMounted(() => {\n visible.value = true;\n // 处理 https://github.com/Tencent/tdesign-vue-next/issues/394\n (document.activeElement as HTMLElement).blur();\n // 避免元素未挂载就触发样式获取,子元素为空的问题\n nextTick(() => {\n updateClassNameStyle(className, style);\n });\n });\n const update = (newOptions: DialogOptions) => {\n dialogOptions.value = {\n ...options,\n ...newOptions,\n };\n };\n\n expose({\n update,\n });\n\n return () => {\n const onClose =\n options.onClose ||\n function () {\n visible.value = false;\n if (options.destroyOnClose) {\n setTimeout(() => {\n destroySelf();\n }, 300);\n }\n };\n delete options.className;\n delete options.style;\n return h(DialogComponent, {\n onClose,\n visible: visible.value,\n ...dialogOptions.value,\n });\n };\n },\n });\n const dialog = createVNode(component);\n // eslint-disable-next-line no-underscore-dangle\n if (context ?? DialogPlugin._context) {\n // eslint-disable-next-line no-underscore-dangle\n dialog.appContext = context ?? DialogPlugin._context;\n }\n\n const container = getAttach(options.attach);\n if (container) {\n container.appendChild(wrapper);\n } else {\n console.error('attach is not exist');\n }\n\n render(dialog, wrapper);\n\n const dialogNode: DialogInstance = {\n show: () => {\n visible.value = true;\n },\n hide: () => {\n visible.value = false;\n },\n update: (newOptions: DialogOptions) => {\n // className & style由updateClassNameStyle来处理\n dialog.component.exposed.update(omit(newOptions, ['className', 'style']));\n updateClassNameStyle(newOptions.className, newOptions.style);\n },\n destroy: () => {\n visible.value = false;\n setTimeout(() => {\n destroySelf();\n }, 300);\n },\n setConfirmLoading: (val: boolean) => {\n dialog.component.exposed.update({ confirmLoading: val });\n },\n };\n return dialogNode;\n};\ninterface ExtraApi {\n confirm: DialogConfirmMethod;\n alert: DialogAlertMethod;\n}\n\ntype ExtraApiType = keyof ExtraApi;\n\nconst confirm: DialogConfirmMethod = (props: DialogOptions, context?: AppContext) => createDialog(props, context);\n\nconst alert: DialogAlertMethod = (props: Omit<DialogOptions, 'confirmBtn'>, context?: AppContext) => {\n const options = { ...props };\n options.cancelBtn = null;\n return createDialog(options, context);\n};\n\nconst extraApi: ExtraApi = {\n confirm,\n alert,\n};\n\nexport type DialogPluginType = Plugin &\n ExtraApi &\n DialogMethod & {\n _context?: AppContext;\n };\n\nexport const DialogPlugin = createDialog as DialogPluginType;\n\nDialogPlugin.install = (app: App): void => {\n app.config.globalProperties.$dialog = createDialog;\n // 如果使用 use 方法,自动绑定当前 App 的 context\n // eslint-disable-next-line no-underscore-dangle\n DialogPlugin._context = app._context;\n Object.keys(extraApi).forEach((funcName: ExtraApiType) => {\n app.config.globalProperties.$dialog[funcName] = extraApi[funcName];\n });\n};\n\nObject.keys(extraApi).forEach((funcName: ExtraApiType) => {\n DialogPlugin[funcName] = extraApi[funcName];\n});\n\nexport default DialogPlugin;\n"],"names":["createDialog","props","context","options","_objectSpread","wrapper","document","createElement","visible","ref","className","style","preClassName","updateClassNameStyle","_wrapper$firstElement","firstElementChild","classList","remove","apply","_toConsumableArray","split","map","name","trim","forEach","add","cssText","destroySelf","render","component","defineComponent","setup","expose","_ref","dialogOptions","onMounted","value","activeElement","blur","nextTick","update","newOptions","onClose","destroyOnClose","setTimeout","h","DialogComponent","dialog","createVNode","DialogPlugin","_context","appContext","container","getAttach","attach","appendChild","console","error","dialogNode","show","hide","exposed","omit","destroy","setConfirmLoading","val","confirmLoading","confirm","alert","cancelBtn","extraApi","install","app","config","globalProperties","$dialog","Object","keys","funcName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAMA,YAAA,GAA6B,SAA7BA,YAAAA,CAA8BC,KAAA,EAAOC,OAAY,EAAA;AAC/C,EAAA,IAAAC,OAAA,GAAAC,aAAA,CAAA,EAAA,EAAeH,KAAM,CAAA,CAAA;AACrB,EAAA,IAAAI,OAAA,GAAUC,QAAS,CAAAC,aAAA,CAAc,KAAK,CAAA,CAAA;AACtC,EAAA,IAAAC,OAAA,GAAUC,IAAI,KAAK,CAAA,CAAA;AACnB,EAAA,IAAEC,SAAW,GAAUP,OAAA,CAArBO,SAAW;IAAAC,KAAA,GAAUR,OAAA,CAAVQ,KAAA,CAAA;EAEnB,IAAIC,YAAe,GAAAF,SAAA,CAAA;EAEb,IAAAG,oBAAA,GAAuB,SAAvBA,oBAAAA,CAAwBH,UAAAA,EAAmBC,MAAkC,EAAA;AACjF,IAAA,IAAID,UAAW,EAAA;AACT,MAAA,IAAAE,YAAA,IAAgBA,iBAAiBF,UAAW,EAAA;AAAA,QAAA,IAAAI,qBAAA,CAAA;QAC9C,CAAAA,qBAAA,GAAAT,OAAA,CAAQU,iBAAkB,CAAAC,SAAA,EAAUC,MAAO,CAAAC,KAAA,CAAAJ,qBAAA,EAAAK,kBAAA,CAAGP,aAAaQ,KAAM,CAAA,GAAG,CAAE,CAAAC,GAAA,CAAI,UAACC,IAAA,EAAA;AAAA,UAAA,OAASA,IAAK,CAAAC,IAAA,EAAM,CAAA;AAAA,SAAA,CAAC,CAAA,CAAA,CAAA;AAClG,OAAA;MACAb,WAAUU,KAAM,CAAA,GAAG,CAAE,CAAAI,OAAA,CAAQ,UAACF,IAAS,EAAA;AACrCjB,QAAAA,OAAA,CAAQU,iBAAkB,CAAAC,SAAA,CAAUS,GAAI,CAAAH,IAAA,CAAKC,MAAM,CAAA,CAAA;AACrD,OAAC,CAAA,CAAA;AACH,KAAA;AAEA,IAAA,IAAIZ,MAAO,EAAA;AACRN,MAAAA,OAAA,CAAQU,iBAAkC,CAAAJ,KAAA,CAAMe,OAAWf,IAAAA,MAAAA,CAAAA;AAC9D,KAAA;AAEeD,IAAAA,YAAAA,GAAAA,UAAAA,CAAAA;GACjB,CAAA;EAEA,SAASiB,WAAcA,GAAA;AACrBC,IAAAA,MAAA,CAAO,MAAMvB,OAAO,CAAA,CAAA;IACpBA,OAAA,CAAQY,MAAO,EAAA,CAAA;AACjB,GAAA;EAEA,IAAMY,YAAYC,eAAgB,CAAA;AAChCC,IAAAA,KAAM9B,WAAN8B,KAAM9B,CAAAA,MAAAA,EAAAA,IAAAA,EAAmB;AAAA,MAAA,IAAV+B,MAAA,GAAAC,IAAA,CAAAD,MAAA,CAAA;AACP,MAAA,IAAAE,aAAA,GAAgBzB,IAAyBN,OAAO,CAAA,CAAA;AACtDgC,MAAAA,SAAA,CAAU,YAAM;QACd3B,OAAA,CAAQ4B,KAAQ,GAAA,IAAA,CAAA;AAEf9B,QAAAA,QAAA,CAAS+B,cAA8BC,IAAK,EAAA,CAAA;AAE7CC,QAAAA,QAAA,CAAS,YAAM;AACb1B,UAAAA,oBAAA,CAAqBH,WAAWC,KAAK,CAAA,CAAA;AACvC,SAAC,CAAA,CAAA;AACH,OAAC,CAAA,CAAA;AACK,MAAA,IAAA6B,MAAA,GAAS,SAATA,MAAAA,CAAUC,UAA8B,EAAA;QAC5CP,aAAA,CAAcE,KAAQ,GAAAhC,aAAA,CAAAA,aAAA,CACjBD,EAAAA,EAAAA,OAAA,CACAsC,EAAAA,UAAA,CACL,CAAA;OACF,CAAA;AAEOT,MAAAA,MAAA,CAAA;AACLQ,QAAAA,MAAA,EAAAA,MAAAA;AACF,OAAC,CAAA,CAAA;AAED,MAAA,OAAO,YAAM;AACL,QAAA,IAAAE,OAAA,GACJvC,OAAQ,CAAAuC,OAAA,IACR,YAAY;UACVlC,OAAA,CAAQ4B,KAAQ,GAAA,KAAA,CAAA;UAChB,IAAIjC,QAAQwC,cAAgB,EAAA;AAC1BC,YAAAA,UAAA,CAAW,YAAM;AACHjB,cAAAA,WAAA,EAAA,CAAA;eACX,GAAG,CAAA,CAAA;AACR,WAAA;SACF,CAAA;QACF,OAAOxB,OAAQ,CAAAO,SAAA,CAAA;QACf,OAAOP,OAAQ,CAAAQ,KAAA,CAAA;AACf,QAAA,OAAOkC,EAAEC,OAAiB,EAAA1C,aAAA,CAAA;AACxBsC,UAAAA,OAAA,EAAAA,OAAA;UACAlC,SAASA,OAAQ,CAAA4B,KAAAA;AAAA,SAAA,EACdF,aAAc,CAAAE,KAAA,CAClB,CAAA,CAAA;OACH,CAAA;AACF,KAAA;AACF,GAAC,CAAA,CAAA;AACK,EAAA,IAAAW,MAAA,GAASC,YAAYnB,SAAS,CAAA,CAAA;EAEhC,IAAA3B,OAAA,aAAAA,OAAA,KAAA,KAAA,CAAA,GAAAA,OAAA,GAAW+C,aAAaC,QAAU,EAAA;IAE7BH,MAAA,CAAAI,UAAA,GAAajD,oBAAAA,qBAAAA,UAAW+C,YAAa,CAAAC,QAAA,CAAA;AAC9C,GAAA;AAEM,EAAA,IAAAE,SAAA,GAAYC,SAAU,CAAAlD,OAAA,CAAQmD,MAAM,CAAA,CAAA;AAC1C,EAAA,IAAIF,SAAW,EAAA;AACbA,IAAAA,SAAA,CAAUG,YAAYlD,OAAO,CAAA,CAAA;AAC/B,GAAO,MAAA;AACLmD,IAAAA,OAAA,CAAQC,MAAM,qBAAqB,CAAA,CAAA;AACrC,GAAA;AAEA7B,EAAAA,MAAA,CAAOmB,QAAQ1C,OAAO,CAAA,CAAA;AAEtB,EAAA,IAAMqD,UAA6B,GAAA;AACjCC,IAAAA,MAAM,SAANA,OAAY;MACVnD,OAAA,CAAQ4B,KAAQ,GAAA,IAAA,CAAA;KAClB;AACAwB,IAAAA,MAAM,SAANA,OAAY;MACVpD,OAAA,CAAQ4B,KAAQ,GAAA,KAAA,CAAA;KAClB;AACAI,IAAAA,MAAA,EAAQ,SAARA,MAAAA,CAASC,UAA8B,EAAA;AAE9BM,MAAAA,MAAA,CAAAlB,SAAA,CAAUgC,QAAQrB,MAAO,CAAAsB,IAAA,CAAKrB,YAAY,CAAC,WAAA,EAAa,OAAO,CAAC,CAAC,CAAA,CAAA;MACnD5B,oBAAA,CAAA4B,UAAA,CAAW/B,SAAW,EAAA+B,UAAA,CAAW9B,KAAK,CAAA,CAAA;KAC7D;AACAoD,IAAAA,SAAS,SAATA,UAAe;MACbvD,OAAA,CAAQ4B,KAAQ,GAAA,KAAA,CAAA;AAChBQ,MAAAA,UAAA,CAAW,YAAM;AACHjB,QAAAA,WAAA,EAAA,CAAA;SACX,GAAG,CAAA,CAAA;KACR;AACAqC,IAAAA,iBAAA,EAAmB,SAAnBA,iBAAAA,CAAoBC,GAAiB,EAAA;AACnClB,MAAAA,MAAA,CAAOlB,UAAUgC,OAAQ,CAAArB,MAAA,CAAO;AAAE0B,QAAAA,cAAA,EAAgBD,GAAAA;AAAI,OAAC,CAAA,CAAA;AACzD,KAAA;GACF,CAAA;AACO,EAAA,OAAAP,UAAA,CAAA;AACT,CAAA,CAAA;AAQA,IAAMS,UAA+B,SAA/BA,QAAgClE,KAAA,EAAsBC,OAAyB,EAAA;AAAA,EAAA,OAAAF,YAAA,CAAaC,OAAOC,OAAO,CAAA,CAAA;AAAA,CAAA,CAAA;AAEhH,IAAMkE,KAAA,GAA2B,SAA3BA,KAAAA,CAA4BnE,KAAA,EAA0CC,OAAyB,EAAA;AAC7F,EAAA,IAAAC,OAAA,GAAAC,aAAA,CAAA,EAAA,EAAeH,KAAM,CAAA,CAAA;EAC3BE,OAAA,CAAQkE,SAAY,GAAA,IAAA,CAAA;AACb,EAAA,OAAArE,YAAA,CAAaG,SAASD,OAAO,CAAA,CAAA;AACtC,CAAA,CAAA;AAEA,IAAMoE,QAAqB,GAAA;AACzBH,EAAAA,OAAA,EAAAA,OAAA;AACAC,EAAAA,KAAA,EAAAA,KAAAA;AACF,CAAA,CAAA;AAQO,IAAMnB,YAAe,GAAAjD,aAAA;AAE5BiD,YAAa,CAAAsB,OAAA,GAAU,UAACC,GAAmB,EAAA;AACrCA,EAAAA,GAAA,CAAAC,MAAA,CAAOC,iBAAiBC,OAAU,GAAA3E,YAAA,CAAA;AAGtCiD,EAAAA,YAAA,CAAaC,WAAWsB,GAAI,CAAAtB,QAAA,CAAA;EAC5B0B,MAAA,CAAOC,IAAK,CAAAP,QAAQ,CAAE,CAAA9C,OAAA,CAAQ,UAACsD,QAA2B,EAAA;AACxDN,IAAAA,GAAA,CAAIC,MAAO,CAAAC,gBAAA,CAAiBC,OAAQ,CAAAG,QAAA,CAAA,GAAYR,QAAS,CAAAQ,QAAA,CAAA,CAAA;AAC3D,GAAC,CAAA,CAAA;AACH,CAAA,CAAA;AAEAF,MAAA,CAAOC,IAAK,CAAAP,QAAQ,CAAE,CAAA9C,OAAA,CAAQ,UAACsD,QAA2B,EAAA;AACxD7B,EAAAA,YAAA,CAAa6B,YAAYR,QAAS,CAAAQ,QAAA,CAAA,CAAA;AACpC,CAAC,CAAA;;;;"}