bootstrap-vue-next
Version:
BootstrapVueNext is an early and lovely component library for Vue 3 & Nuxt 3 based on Bootstrap 5 and Typescript.
1 lines • 4.88 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../src/plugins/toastController/index.ts"],"sourcesContent":["import {markRaw, type Plugin, ref, toRef, watch} from 'vue'\nimport {toastPluginKey} from '../../utils/keys'\nimport type {ContainerPosition} from '../../types/Alignment'\nimport type {\n ControllerKey,\n ToastOrchestratorArrayValue,\n ToastOrchestratorShowParam,\n} from '../../types/ComponentOrchestratorTypes'\n\nconst posDefault: ContainerPosition = 'top-end'\n\nexport const toastPlugin: Plugin = {\n install(app) {\n const toasts = ref<ToastOrchestratorArrayValue[]>([])\n\n const _isAppend = ref(false)\n\n const _setIsAppend = (value: boolean) => {\n _isAppend.value = value\n }\n\n /**\n * @returns {ControllerKey} If `id` is passed to props, it will use that id, otherwise, a symbol will be created that corresponds to its unique id.\n * You can pass this id to the hide function to force a Toast to hide\n */\n const show = (obj: ToastOrchestratorShowParam = {}): ControllerKey => {\n const resolvedProps = toRef(obj.props)\n\n const _self = resolvedProps.value?.id || Symbol('Toast controller')\n\n const toastToAdd: ToastOrchestratorArrayValue = {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {\n ...resolvedProps.value,\n pos: resolvedProps.value?.pos || posDefault,\n _modelValue: resolvedProps.value?.value || 5000,\n _self,\n },\n }\n\n if (\n resolvedProps.value?.appendToast !== undefined\n ? resolvedProps.value.appendToast\n : _isAppend.value\n ) {\n toasts.value.push(toastToAdd)\n } else {\n toasts.value.unshift(toastToAdd)\n }\n\n watch(resolvedProps, (newValue) => {\n const previousIndex = toasts.value.findIndex((el) => el.props._self === _self)\n if (previousIndex === -1) return\n toasts.value.splice(previousIndex, 1, {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {\n ...toasts.value[previousIndex].props,\n ...newValue,\n _modelValue: newValue?.value || toasts.value[previousIndex].props._modelValue || 5000,\n },\n })\n })\n\n return _self\n }\n\n /**\n * You can get the symbol param from the return value from the show method, or use props.id\n */\n const remove = (self: ControllerKey) => {\n toasts.value = toasts.value.filter((el) => el.props._self !== self)\n }\n\n /**\n * You can get the symbol param from the return value from the show method, or use props.id\n */\n const leave = (self: ControllerKey) => {\n const toastIndex = toasts.value.findIndex((el) => el.props._self === self)\n if (toastIndex === -1) return\n toasts.value.splice(toastIndex, 1, {\n component: !toasts.value[toastIndex].component\n ? undefined\n : markRaw(toasts.value[toastIndex].component as object),\n props: {\n ...toasts.value[toastIndex].props,\n _modelValue: false,\n },\n })\n }\n\n app.provide(toastPluginKey, {\n _setIsAppend,\n toasts,\n show,\n remove,\n leave,\n })\n },\n}\n"],"names":[],"mappings":";;AASA,MAAM,aAAgC;AAE/B,MAAM,cAAsB;AAAA,EACjC,QAAQ,KAAK;AACL,UAAA,SAAS,IAAmC,EAAE;AAE9C,UAAA,YAAY,IAAI,KAAK;AAErB,UAAA,eAAe,CAAC,UAAmB;AACvC,gBAAU,QAAQ;AAAA,IACpB;AAMA,UAAM,OAAO,CAAC,MAAkC,OAAsB;;AAC9D,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAErC,YAAM,UAAQ,mBAAc,UAAd,mBAAqB,OAAM,OAAO,kBAAkB;AAElE,YAAM,aAA0C;AAAA,QAC9C,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,QAC7D,OAAO;AAAA,UACL,GAAG,cAAc;AAAA,UACjB,OAAK,mBAAc,UAAd,mBAAqB,QAAO;AAAA,UACjC,eAAa,mBAAc,UAAd,mBAAqB,UAAS;AAAA,UAC3C;AAAA,QAAA;AAAA,MAEJ;AAGE,YAAA,mBAAc,UAAd,mBAAqB,iBAAgB,SACjC,cAAc,MAAM,cACpB,UAAU,OACd;AACO,eAAA,MAAM,KAAK,UAAU;AAAA,MAAA,OACvB;AACE,eAAA,MAAM,QAAQ,UAAU;AAAA,MAAA;AAG3B,YAAA,eAAe,CAAC,aAAa;AAC3B,cAAA,gBAAgB,OAAO,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,UAAU,KAAK;AAC7E,YAAI,kBAAkB,GAAI;AACnB,eAAA,MAAM,OAAO,eAAe,GAAG;AAAA,UACpC,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,UAC7D,OAAO;AAAA,YACL,GAAG,OAAO,MAAM,aAAa,EAAE;AAAA,YAC/B,GAAG;AAAA,YACH,cAAa,qCAAU,UAAS,OAAO,MAAM,aAAa,EAAE,MAAM,eAAe;AAAA,UAAA;AAAA,QACnF,CACD;AAAA,MAAA,CACF;AAEM,aAAA;AAAA,IACT;AAKM,UAAA,SAAS,CAAC,SAAwB;AAC/B,aAAA,QAAQ,OAAO,MAAM,OAAO,CAAC,OAAO,GAAG,MAAM,UAAU,IAAI;AAAA,IACpE;AAKM,UAAA,QAAQ,CAAC,SAAwB;AAC/B,YAAA,aAAa,OAAO,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,UAAU,IAAI;AACzE,UAAI,eAAe,GAAI;AAChB,aAAA,MAAM,OAAO,YAAY,GAAG;AAAA,QACjC,WAAW,CAAC,OAAO,MAAM,UAAU,EAAE,YACjC,SACA,QAAQ,OAAO,MAAM,UAAU,EAAE,SAAmB;AAAA,QACxD,OAAO;AAAA,UACL,GAAG,OAAO,MAAM,UAAU,EAAE;AAAA,UAC5B,aAAa;AAAA,QAAA;AAAA,MACf,CACD;AAAA,IACH;AAEA,QAAI,QAAQ,gBAAgB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;"}