UNPKG

vuestic-ui

Version:
1 lines 5.83 kB
{"version":3,"file":"toast.mjs","sources":["../../../../../src/components/va-toast/toast.ts"],"sourcesContent":["import { VNode, createVNode, render, AppContext } from 'vue'\n\nimport { getGlobal } from '../../utils/ssr'\nimport type { ToastOptions } from './types'\n\nimport _VaToast from './VaToast.vue'\nimport { withConfigTransport } from '../../services/config-transport'\n\nexport const VaToast = withConfigTransport(_VaToast)\n\nlet seed = 1\n\ndeclare global {\n interface Window {\n vaToastInstances: VNode[]\n }\n}\n\ngetGlobal().vaToastInstances = []\n\ntype OptionKeys = keyof ToastOptions;\n\nexport type VaToastId = string\n\nconst getNodeProps = (vNode: VNode): Record<OptionKeys, any> => {\n return (vNode.component?.props as Record<OptionKeys, any>) || {}\n}\n\nconst closeNotification = (targetInstance: VNode | null, destroyElementFn: () => void) => {\n if (!targetInstance) { return }\n\n if (!getGlobal().vaToastInstances.length) {\n seed = 1\n return\n }\n\n const targetInstanceIndex = getGlobal().vaToastInstances.findIndex((instance) => instance === targetInstance)\n\n if (targetInstanceIndex < 0) { return }\n\n destroyElementFn()\n\n getGlobal().vaToastInstances = getGlobal().vaToastInstances.reduce((acc: any[], instance, index) => {\n if (instance === targetInstance) {\n return acc\n }\n\n return [...acc, instance]\n }, [])\n\n if (!getGlobal().vaToastInstances.length) {\n seed = 1\n }\n}\n\nconst destroy = (el: HTMLElement | null | undefined, node: VNode | null) => {\n if (el) {\n render(null, el)\n el.remove()\n }\n el = null\n node = null\n}\n\nconst mount = (component: any, {\n props,\n children,\n element,\n appContext,\n}: { props?: { [key: string]: any }; children?: any; element?: HTMLElement; appContext?: AppContext } = {}): { vNode: VNode; el?: HTMLElement } => {\n let el: HTMLElement | null | undefined = element\n\n // eslint-disable-next-line prefer-const\n let vNode: VNode | null\n\n const onClose = () => {\n closeNotification(vNode, () => destroy(el, vNode))\n\n if (props?.onClose) {\n props.onClose()\n }\n }\n\n vNode = createVNode(component, { ...props, onClose }, children)\n\n if (appContext) {\n vNode.appContext = appContext\n }\n\n if (el) {\n render(vNode, el)\n } else if (typeof document !== 'undefined') {\n render(vNode, el = document.createElement('div'))\n }\n\n return { vNode, el }\n}\n\nexport const closeAllNotifications = (appContext?: AppContext) => {\n if (!getGlobal().vaToastInstances.length) {\n seed = 1\n return\n }\n getGlobal().vaToastInstances.forEach(instance => {\n if (appContext && instance.appContext !== appContext) { return }\n getNodeProps(instance).onClose()\n })\n}\n\nexport const closeById = (id: string) => {\n const targetInstance = getGlobal().vaToastInstances.find(instance => instance.el?.id === id)\n\n if (targetInstance) {\n const nodeProps = getNodeProps(targetInstance)\n nodeProps.onClose()\n }\n}\n\nconst getToastOptions = (options: string | ToastOptions): any => {\n if (typeof options === 'string') {\n return {\n message: options,\n }\n }\n return options\n}\n\nexport const createToastInstance = (customProps: ToastOptions | string, appContext?: AppContext): VaToastId | null => {\n const { vNode, el } = mount(VaToast, { appContext, props: getToastOptions(customProps) })\n\n const nodeProps = getNodeProps(vNode)\n\n if (el && vNode.el && nodeProps) {\n document.body.appendChild(el.childNodes[0])\n\n vNode.el.id = 'notification_' + seed\n\n seed += 1\n\n getGlobal().vaToastInstances.push(vNode)\n\n return vNode.el.id as VaToastId\n }\n\n return null\n}\n\nexport type { ToastOptions as NotificationOptions } from './types'\n"],"names":["_VaToast"],"mappings":";;;;;AAQa,MAAA,UAAU,oBAAoBA,SAAQ;AAEnD,IAAI,OAAO;AAQX,UAAU,EAAE,mBAAmB;AAM/B,MAAM,eAAe,CAAC,UAA0C;;AACtD,WAAA,WAAM,cAAN,mBAAiB,UAAqC;AAChE;AAEA,MAAM,oBAAoB,CAAC,gBAA8B,qBAAiC;AACxF,MAAI,CAAC,gBAAgB;AAAE;AAAA,EAAO;AAE9B,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AACP;AAAA,EACF;AAEM,QAAA,sBAAsB,YAAY,iBAAiB,UAAU,CAAC,aAAa,aAAa,cAAc;AAE5G,MAAI,sBAAsB,GAAG;AAAE;AAAA,EAAO;AAErB;AAEP,YAAA,EAAE,mBAAmB,YAAY,iBAAiB,OAAO,CAAC,KAAY,UAAU,UAAU;AAClG,QAAI,aAAa,gBAAgB;AACxB,aAAA;AAAA,IACT;AAEO,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B,GAAG,CAAE,CAAA;AAEL,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AAAA,EACT;AACF;AAEA,MAAM,UAAU,CAAC,IAAoC,SAAuB;AAC1E,MAAI,IAAI;AACN,WAAO,MAAM,EAAE;AACf,OAAG,OAAO;AAAA,EACZ;AACK,OAAA;AAEP;AAEA,MAAM,QAAQ,CAAC,WAAgB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAwG,OAA2C;AACjJ,MAAI,KAAqC;AAGrC,MAAA;AAEJ,QAAM,UAAU,MAAM;AACpB,sBAAkB,OAAO,MAAM,QAAQ,EAAS,CAAC;AAEjD,QAAI,+BAAO,SAAS;AAClB,YAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAGF,UAAQ,YAAY,WAAW,EAAE,GAAG,OAAO,QAAA,GAAW,QAAQ;AAE9D,MAAI,YAAY;AACd,UAAM,aAAa;AAAA,EACrB;AAEA,MAAI,IAAI;AACN,WAAO,OAAO,EAAE;AAAA,EAAA,WACP,OAAO,aAAa,aAAa;AAC1C,WAAO,OAAO,KAAK,SAAS,cAAc,KAAK,CAAC;AAAA,EAClD;AAEO,SAAA,EAAE,OAAO;AAClB;AAEa,MAAA,wBAAwB,CAAC,eAA4B;AAChE,MAAI,CAAC,UAAA,EAAY,iBAAiB,QAAQ;AACjC,WAAA;AACP;AAAA,EACF;AACU,cAAE,iBAAiB,QAAQ,CAAY,aAAA;AAC3C,QAAA,cAAc,SAAS,eAAe,YAAY;AAAE;AAAA,IAAO;AAClD,iBAAA,QAAQ,EAAE;EAAQ,CAChC;AACH;AAEa,MAAA,YAAY,CAAC,OAAe;AACjC,QAAA,iBAAiB,YAAY,iBAAiB,KAAK,CAAY,aAAA;;AAAA,2BAAS,OAAT,mBAAa,QAAO;AAAA,GAAE;AAE3F,MAAI,gBAAgB;AACZ,UAAA,YAAY,aAAa,cAAc;AAC7C,cAAU,QAAQ;AAAA,EACpB;AACF;AAEA,MAAM,kBAAkB,CAAC,YAAwC;AAC3D,MAAA,OAAO,YAAY,UAAU;AACxB,WAAA;AAAA,MACL,SAAS;AAAA,IAAA;AAAA,EAEb;AACO,SAAA;AACT;AAEa,MAAA,sBAAsB,CAAC,aAAoC,eAA8C;AACpH,QAAM,EAAE,OAAO,GAAG,IAAI,MAAM,SAAS,EAAE,YAAY,OAAO,gBAAgB,WAAW,EAAG,CAAA;AAElF,QAAA,YAAY,aAAa,KAAK;AAEhC,MAAA,MAAM,MAAM,MAAM,WAAW;AAC/B,aAAS,KAAK,YAAY,GAAG,WAAW,CAAC,CAAC;AAEpC,UAAA,GAAG,KAAK,kBAAkB;AAExB,YAAA;AAEE,gBAAE,iBAAiB,KAAK,KAAK;AAEvC,WAAO,MAAM,GAAG;AAAA,EAClB;AAEO,SAAA;AACT;"}