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 • 5.07 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 ControllerKey,\n ModalOrchestratorMapValue,\n ModalOrchestratorShowParam,\n} from '../../types/ComponentOrchestratorTypes'\n\nexport const modalControllerPlugin: Plugin = {\n install(app) {\n const modals = ref(new Map<ControllerKey, 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 = (id: string | undefined) =>\n [buildPromise(), (id || Symbol('Modals controller')) as ControllerKey, true] as const\n\n const show = (obj: ModalOrchestratorShowParam = {}): Promise<boolean | null> => {\n const resolvedProps = toRef(obj.props)\n\n const [_promise, _self, _modelValue] = buildPrereqs(resolvedProps.value?.id)\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 = {}): Promise<boolean | null> => {\n const resolvedProps = toRef(obj.props)\n\n const [_promise, _self, _modelValue] = buildPrereqs(resolvedProps.value?.id)\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 /**\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 modal = modals.value.get(self)\n if (!modal?.props) return\n modal.props = {\n ...modal.props,\n _modelValue: false,\n }\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 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":";;AAQO,MAAM,wBAAgC;AAAA,EAC3C,QAAQ,KAAK;AACX,UAAM,SAAS,IAAQ,oBAAA,KAA+C;AAEtE,UAAM,eAAe,MAGhB;AACH,UAAI,cAA+C,MAAM;AAAA,MAEzD;AAEA,YAAM,UAAU,IAAI,QAAwB,CAAC,YAAY;AACzC,sBAAA;AAAA,MAAA,CACf;AAEM,aAAA;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAEM,UAAA,eAAe,CAAC,OACpB,CAAC,aAAA,GAAiB,MAAM,OAAO,mBAAmB,GAAqB,IAAI;AAE7E,UAAM,OAAO,CAAC,MAAkC,OAAgC;;AACxE,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAE/B,YAAA,CAAC,UAAU,OAAO,WAAW,IAAI,cAAa,mBAAc,UAAd,mBAAqB,EAAE;AAEpE,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,IAClB;AAEA,UAAM,UAAU,CAAC,MAAkC,OAAgC;;AAC3E,YAAA,gBAAgB,MAAM,IAAI,KAAK;AAE/B,YAAA,CAAC,UAAU,OAAO,WAAW,IAAI,cAAa,mBAAc,UAAd,mBAAqB,EAAE;AAEpE,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,IAClB;AAKM,UAAA,QAAQ,CAAC,SAAwB;AACrC,YAAM,QAAQ,OAAO,MAAM,IAAI,IAAI;AAC/B,UAAA,EAAC,+BAAO,OAAO;AACnB,YAAM,QAAQ;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,aAAa;AAAA,MACf;AAAA,IACF;AAKM,UAAA,SAAS,CAAC,SAAwB;AAC/B,aAAA,MAAM,OAAO,IAAI;AAAA,IAC1B;AAEA,QAAI,QAAQ,0BAA0B;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAEL;"}