From 60e4cb08c8f4a387901d3892ffdfaf3f145e38be Mon Sep 17 00:00:00 2001 From: Ryan Miller Date: Thu, 17 Oct 2024 16:21:13 -0400 Subject: [PATCH] track modal close function on the prompt itself --- frontend/src/components/prompts/Prompts.vue | 9 +-------- frontend/src/stores/layout.ts | 13 ++++++++++++- frontend/src/types/layout.d.ts | 1 + frontend/src/views/files/FileListing.vue | 2 -- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/prompts/Prompts.vue b/frontend/src/components/prompts/Prompts.vue index 4ecde794..bccd5a0b 100644 --- a/frontend/src/components/prompts/Prompts.vue +++ b/frontend/src/components/prompts/Prompts.vue @@ -30,8 +30,6 @@ const layoutStore = useLayoutStore(); const { currentPromptName } = storeToRefs(layoutStore); -const closeModal = ref<() => Promise>(); - const components = new Map([ ["info", Info], ["help", Help], @@ -52,11 +50,6 @@ const components = new Map([ ]); watch(currentPromptName, (newValue) => { - if (closeModal.value) { - closeModal.value(); - closeModal.value = undefined; - } - const modal = components.get(newValue!); if (!modal) return; @@ -67,7 +60,7 @@ watch(currentPromptName, (newValue) => { }, }); - closeModal.value = close; + layoutStore.setCloseOnPrompt(close, newValue!); open(); }); diff --git a/frontend/src/stores/layout.ts b/frontend/src/stores/layout.ts index e15507a5..5ca808a0 100644 --- a/frontend/src/stores/layout.ts +++ b/frontend/src/stores/layout.ts @@ -29,6 +29,13 @@ export const useLayoutStore = defineStore("layout", { toggleShell() { this.showShell = !this.showShell; }, + setCloseOnPrompt(closeFunction: any, onPrompt: string) { + let prompt = this.prompts.find((prompt) => prompt.prompt === onPrompt); + if (prompt) { + prompt.close = closeFunction; + } + return null; + }, showHover(value: PopupProps | string) { if (typeof value !== "object") { this.prompts.push({ @@ -36,6 +43,7 @@ export const useLayoutStore = defineStore("layout", { confirm: null, action: undefined, props: null, + close: null, }); return; } @@ -45,6 +53,7 @@ export const useLayoutStore = defineStore("layout", { confirm: value?.confirm, action: value?.action, props: value?.props, + close: value?.close, }); }, showError() { @@ -53,6 +62,7 @@ export const useLayoutStore = defineStore("layout", { confirm: null, action: undefined, props: null, + close: null, }); }, showSuccess() { @@ -61,10 +71,11 @@ export const useLayoutStore = defineStore("layout", { confirm: null, action: undefined, props: null, + close: null, }); }, closeHovers() { - this.prompts.shift(); + this.prompts.shift()?.close?.(); }, // easily reset state using `$reset` clearLayout() { diff --git a/frontend/src/types/layout.d.ts b/frontend/src/types/layout.d.ts index fa05a484..060b64f2 100644 --- a/frontend/src/types/layout.d.ts +++ b/frontend/src/types/layout.d.ts @@ -3,6 +3,7 @@ interface PopupProps { confirm?: any; action?: PopupAction; props?: any; + close?: any; } type PopupAction = (e: Event) => void; diff --git a/frontend/src/views/files/FileListing.vue b/frontend/src/views/files/FileListing.vue index c1b048a6..1aba5bdc 100644 --- a/frontend/src/views/files/FileListing.vue +++ b/frontend/src/views/files/FileListing.vue @@ -753,8 +753,6 @@ const drop = async (event: DragEvent) => { }; const uploadInput = (event: Event) => { - layoutStore.closeHovers(); - let files = (event.currentTarget as HTMLInputElement)?.files; if (files === null) return;