From 9ce037c8e1ca1260da5b2a1bafa430593454c92c Mon Sep 17 00:00:00 2001 From: phyce Date: Mon, 6 Jul 2026 11:12:39 +0000 Subject: [PATCH] Frontend correctness fixes - Remove debug console.logs that dumped full config (may contain keys) - Remove leaked beforeunload listener on Settings unmount - Re-enable notifications via try/finally so a thrown preview cannot leave notifications permanently disabled - Declare monaco-editor as an explicit dependency (was phantom) Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/package.json | 1 + frontend/src/components/Footer.vue | 1 - frontend/src/components/pages/Profiles.vue | 7 +++++-- frontend/src/components/pages/Settings.vue | 19 ++++++++----------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index be3d063..57a11d6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "@codemirror/rangeset": "^0.19.9", "@guolao/vue-monaco-editor": "^1.5.1", "@vueuse/core": "^10.9.0", + "monaco-editor": "0.43.0", "primeicons": "^7.0.0", "primevue": "^3.52.0", "vue": "^3.2.37" diff --git a/frontend/src/components/Footer.vue b/frontend/src/components/Footer.vue index 634aea9..264dc56 100644 --- a/frontend/src/components/Footer.vue +++ b/frontend/src/components/Footer.vue @@ -10,7 +10,6 @@ const title = ref(""); function updateStatus(data: { status: Status; message: string }) { status.value = data.status ?? Status.Unknown; - console.log('updating status to:', status.value) title.value = data.message; } diff --git a/frontend/src/components/pages/Profiles.vue b/frontend/src/components/pages/Profiles.vue index 4a0def4..b391211 100644 --- a/frontend/src/components/pages/Profiles.vue +++ b/frontend/src/components/pages/Profiles.vue @@ -367,8 +367,11 @@ async function previewVoice(key: string) { const modelVoiceID = "::" + Object.keys(selectedModels[key])[0] + ":" + selectedVoices[key].voiceID; await EventTrigger('notification.enabled', false); - await Play(voice.name + ": " + voice.name, false, modelVoiceID, selectedProfile.value); - await EventTrigger('notification.enabled', true); + try { + await Play(voice.name + ": " + voice.name, false, modelVoiceID, selectedProfile.value); + } finally { + await EventTrigger('notification.enabled', true); + } } async function removeVoice(key: string) { diff --git a/frontend/src/components/pages/Settings.vue b/frontend/src/components/pages/Settings.vue index 59777b6..25838a6 100644 --- a/frontend/src/components/pages/Settings.vue +++ b/frontend/src/components/pages/Settings.vue @@ -3,6 +3,7 @@ import '../../css/pages/settings.css'; import Button from "primevue/button"; import {onBeforeMount, ref, watch} from "vue"; +import {useEventListener} from "@vueuse/core"; import {GetConfigSchema, GetSettings, SaveSettings} from "../../../wailsjs/go/main/App"; import {config as configuration} from "../../../wailsjs/go/models"; import type {ConfigField, ConfigSchema} from "../../interfaces/config"; @@ -28,15 +29,11 @@ async function loadData() { // Load config config.value = await GetSettings(); originalConfig.value = JSON.stringify(config.value); - console.log('we got settings'); - console.log(config.value); // Load schema try { const schemaResult = await GetConfigSchema(); schema.value = JSON.parse(schemaResult); - console.log('Schema loaded:', schema.value); - console.log('Server fields:', schema.value?.fields.filter(f => f.path.startsWith('settings.server'))); } catch (err) { console.error('Failed to load config schema:', err); } @@ -81,15 +78,15 @@ function setValueByPath(path: string, value: any) { } // Confirm before leaving if there are unsaved changes +useEventListener(window, 'beforeunload', (e) => { + if (hasUnsavedChanges.value) { + e.preventDefault(); + e.returnValue = ''; + } +}); + onBeforeMount(async () => { await loadData(); - - window.addEventListener('beforeunload', (e) => { - if (hasUnsavedChanges.value) { - e.preventDefault(); - e.returnValue = ''; - } - }); });