diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Dialog.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Dialog.vue
index 162c93a7da..9af38374d1 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Dialog.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Dialog.vue
@@ -95,6 +95,40 @@
+
@@ -115,9 +149,11 @@ import {
reactive,
computed,
useTemplateRef,
+ defineAsyncComponent,
} from "vue";
import { storeToRefs } from "pinia";
import FormElement from "./FormElement.vue";
+import { loadComponent } from "@koha-vue/loaders/componentResolver";
export default {
setup() {
@@ -127,6 +163,7 @@ export default {
error,
warning,
confirmation,
+ componentDialog,
accept_callback,
is_submitting,
is_loading,
@@ -192,11 +229,29 @@ export default {
});
});
+ watch(componentDialog, newComponentDialog => {
+ if (!newComponentDialog) {
+ $("#component.modal").modal("hide");
+ return;
+ }
+ nextTick(() => {
+ $("#component.modal").modal("show");
+ });
+ });
+
+ const requiredComponent = computed(() => {
+ if (!componentDialog.value?.componentPath) return null;
+ return defineAsyncComponent(
+ loadComponent(componentDialog.value.componentPath)
+ );
+ });
+
return {
message,
error,
warning,
confirmation,
+ componentDialog,
accept_callback,
is_submitting,
is_loading,
@@ -205,6 +260,7 @@ export default {
fp_config,
submit,
inputFields,
+ requiredComponent,
};
},
components: {
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/stores/main.js b/koha-tmpl/intranet-tmpl/prog/js/vue/stores/main.js
index b60a95bd97..fd45f0617e 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/stores/main.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/stores/main.js
@@ -10,6 +10,7 @@ export const useMainStore = defineStore("main", () => {
accept_callback: null,
previousMessage: null,
previousError: null,
+ componentDialog: null,
displayed_already: false,
is_submitting: false,
is_loading: false,
@@ -66,6 +67,11 @@ export const useMainStore = defineStore("main", () => {
this.displayed_already =
displayed; /* Is displayed on the current view */
},
+ setComponentDialog(componentDialog, displayed = true) {
+ this.componentDialog = componentDialog;
+ this.displayed_already =
+ displayed; /* Is displayed on the current view */
+ },
removeMessages() {
if (this.displayed_already) {
this.error = null;