bootstrap-vue-next
Version:
BootstrapVueNext is an early and lovely component library for Vue 3 & Nuxt 3 based on Bootstrap 5 and Typescript.
78 lines (77 loc) • 2.54 kB
JavaScript
import { ref, toRef, markRaw, watch } from "vue";
import { m as modalControllerPluginKey } from "../../../keys-BZewGSMQ.mjs";
const modalControllerPlugin = {
install(app) {
const modals = ref(/* @__PURE__ */ new Map());
const buildPromise = () => {
let resolveFunc = () => {
};
const promise = new Promise((resolve) => {
resolveFunc = resolve;
});
return {
value: promise,
resolve: resolveFunc
};
};
const buildPrereqs = (id) => [buildPromise(), id || Symbol("Modals controller"), true];
const show = (obj = {}) => {
var _a;
const resolvedProps = toRef(obj.props);
const [_promise, _self, _modelValue] = buildPrereqs((_a = resolvedProps.value) == null ? void 0 : _a.id);
modals.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...resolvedProps.value, _isConfirm: false, _promise, _modelValue }
});
watch(resolvedProps, (newValue) => {
const previous = modals.value.get(_self);
if (!previous) return;
modals.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...previous.props, ...newValue }
});
});
return _promise.value;
};
const confirm = (obj = {}) => {
var _a;
const resolvedProps = toRef(obj.props);
const [_promise, _self, _modelValue] = buildPrereqs((_a = resolvedProps.value) == null ? void 0 : _a.id);
modals.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...resolvedProps.value, _isConfirm: true, _promise, _modelValue }
});
watch(resolvedProps, (newValue) => {
const previous = modals.value.get(_self);
if (!previous) return;
modals.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...previous.props, ...newValue }
});
});
return _promise.value;
};
const leave = (self) => {
const modal = modals.value.get(self);
if (!(modal == null ? void 0 : modal.props)) return;
modal.props = {
...modal.props,
_modelValue: false
};
};
const remove = (self) => {
modals.value.delete(self);
};
app.provide(modalControllerPluginKey, {
modals,
remove,
show,
confirm,
leave
});
}
};
export {
modalControllerPlugin
};
//# sourceMappingURL=index.mjs.map