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.57 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../src/plugins/modalController/index.ts"],"sourcesContent":["import {markRaw, type Plugin, ref, toRef, watch} from 'vue'\nimport {modalControllerPluginKey} from '../../utils/keys'\nimport type {\n ModalOrchestratorMapValue,\n ModalOrchestratorShowParam,\n} from '../../types/ComponentOrchestratorTypes'\n\nexport const modalControllerPlugin: Plugin = {\n install(app) {\n const modals = ref(new Map<symbol, ModalOrchestratorMapValue>())\n\n const buildPromise = (): {\n value: Promise<boolean | null>\n resolve: (value: boolean | null) => void\n } => {\n let resolveFunc: (value: boolean | null) => void = () => {\n /* empty */\n }\n\n const promise = new Promise<boolean | null>((resolve) => {\n resolveFunc = resolve\n })\n\n return {\n value: promise,\n resolve: resolveFunc,\n }\n }\n\n const buildPrereqs = () => [buildPromise(), Symbol(), true] as const\n\n const show = (obj: ModalOrchestratorShowParam = {}) => {\n const resolvedProps = toRef(obj.props)\n\n const [_promise, _self, _modelValue] = buildPrereqs()\n\n modals.value.set(_self, {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {...resolvedProps.value, _isConfirm: false, _promise, _modelValue},\n })\n\n watch(resolvedProps, (newValue) => {\n const previous = modals.value.get(_self)\n if (!previous) return\n modals.value.set(_self, {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {...previous.props, ...newValue},\n })\n })\n\n return _promise.value\n }\n\n const confirm = (obj: ModalOrchestratorShowParam = {}) => {\n const resolvedProps = toRef(obj.props)\n\n const [_promise, _self, _modelValue] = buildPrereqs()\n\n modals.value.set(_self, {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {...resolvedProps.value, _isConfirm: true, _promise, _modelValue},\n })\n\n watch(resolvedProps, (newValue) => {\n const previous = modals.value.get(_self)\n if (!previous) return\n modals.value.set(_self, {\n component: !obj.component ? undefined : markRaw(obj.component),\n props: {...previous.props, ...newValue},\n })\n })\n\n return _promise.value\n }\n\n const leave = (self: symbol) => {\n const modal = modals.value.get(self)\n if (!modal?.props) return\n modal.props = {\n ...modal.props,\n _modelValue: false,\n }\n }\n\n const remove = (self: symbol) => {\n modals.value.delete(self)\n }\n\n app.provide(modalControllerPluginKey, {\n modals,\n remove,\n show,\n confirm,\n leave,\n })\n },\n}\n"],"names":[],"mappings":";;AAOO,MAAM,wBAAgC;AAAA,EAC3C,QAAQ,KAAK;AACX,UAAM,SAAS,IAAQ,oBAAA,IAAwC,CAAA;AAE/D,UAAM,eAAe,MAGhB;AACH,UAAI,cAA+C,MAAM;AAAA,MAAA;AAIzD,YAAM,UAAU,IAAI,QAAwB,CAAC,YAAY;AACzC,sBAAA;AAAA,MAAA,CACf;AAEM,aAAA;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,MAAA;AAAA,IACX;AAGF,UAAM,eAAe,MAAM,CAAC,aAAgB,GAAA,OAAA,GAAU,IAAI;AAE1D,UAAM,OAAO,CAAC,MAAkC,OAAO;AAC/C,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAErC,YAAM,CAAC,UAAU,OAAO,WAAW,IAAI,aAAa;AAE7C,aAAA,MAAM,IAAI,OAAO;AAAA,QACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,QAC7D,OAAO,EAAC,GAAG,cAAc,OAAO,YAAY,OAAO,UAAU,YAAW;AAAA,MAAA,CACzE;AAEK,YAAA,eAAe,CAAC,aAAa;AACjC,cAAM,WAAW,OAAO,MAAM,IAAI,KAAK;AACvC,YAAI,CAAC,SAAU;AACR,eAAA,MAAM,IAAI,OAAO;AAAA,UACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,UAC7D,OAAO,EAAC,GAAG,SAAS,OAAO,GAAG,SAAQ;AAAA,QAAA,CACvC;AAAA,MAAA,CACF;AAED,aAAO,SAAS;AAAA,IAAA;AAGlB,UAAM,UAAU,CAAC,MAAkC,OAAO;AAClD,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAErC,YAAM,CAAC,UAAU,OAAO,WAAW,IAAI,aAAa;AAE7C,aAAA,MAAM,IAAI,OAAO;AAAA,QACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,QAC7D,OAAO,EAAC,GAAG,cAAc,OAAO,YAAY,MAAM,UAAU,YAAW;AAAA,MAAA,CACxE;AAEK,YAAA,eAAe,CAAC,aAAa;AACjC,cAAM,WAAW,OAAO,MAAM,IAAI,KAAK;AACvC,YAAI,CAAC,SAAU;AACR,eAAA,MAAM,IAAI,OAAO;AAAA,UACtB,WAAW,CAAC,IAAI,YAAY,SAAY,QAAQ,IAAI,SAAS;AAAA,UAC7D,OAAO,EAAC,GAAG,SAAS,OAAO,GAAG,SAAQ;AAAA,QAAA,CACvC;AAAA,MAAA,CACF;AAED,aAAO,SAAS;AAAA,IAAA;AAGZ,UAAA,QAAQ,CAAC,SAAiB;AAC9B,YAAM,QAAQ,OAAO,MAAM,IAAI,IAAI;AAC/B,UAAA,EAAC,+BAAO,OAAO;AACnB,YAAM,QAAQ;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,aAAa;AAAA,MAAA;AAAA,IACf;AAGI,UAAA,SAAS,CAAC,SAAiB;AACxB,aAAA,MAAM,OAAO,IAAI;AAAA,IAAA;AAG1B,QAAI,QAAQ,0BAA0B;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AACF;"}