diff --git a/web/src/views/SurveyView.vue b/web/src/views/SurveyView.vue index c0d6b45..771a39c 100644 --- a/web/src/views/SurveyView.vue +++ b/web/src/views/SurveyView.vue @@ -20,6 +20,7 @@ if (!jobId || isNaN(jobId)) { } // UI state +let saveSuccessTimer: ReturnType | null = null const activeTab = ref<'text' | 'screenshot'>('text') const textInput = ref('') const imageB64 = ref(null) @@ -48,6 +49,7 @@ onMounted(async () => { onUnmounted(() => { surveyStore.clear() + if (saveSuccessTimer) clearTimeout(saveSuccessTimer) }) // Screenshot handling @@ -119,7 +121,8 @@ async function saveToJob() { saveSuccess.value = true surveyName.value = '' reportedScore.value = '' - setTimeout(() => { saveSuccess.value = false }, 3000) + if (saveSuccessTimer) clearTimeout(saveSuccessTimer) + saveSuccessTimer = setTimeout(() => { saveSuccess.value = false }, 3000) } } @@ -137,8 +140,10 @@ function formatDate(iso: string | null): string { } const expandedHistory = ref>(new Set()) function toggleHistoryEntry(id: number) { - if (expandedHistory.value.has(id)) expandedHistory.value.delete(id) - else expandedHistory.value.add(id) + const next = new Set(expandedHistory.value) + if (next.has(id)) next.delete(id) + else next.add(id) + expandedHistory.value = next } @@ -188,6 +193,8 @@ function toggleHistoryEntry(id: number) {