From a0475550315b774e170e5b3a2ee931bbb96966b0 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Wed, 13 May 2026 17:07:56 -0700 Subject: [PATCH] fix: drag flicker guard, error body parsing, wizard session restore answer --- web/src/components/DocUploadZone.vue | 17 ++++++++++++++--- web/src/components/WizardOverlay.vue | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/web/src/components/DocUploadZone.vue b/web/src/components/DocUploadZone.vue index 6b41c95..b0000d3 100644 --- a/web/src/components/DocUploadZone.vue +++ b/web/src/components/DocUploadZone.vue @@ -2,7 +2,7 @@

Upload documents

@@ -56,8 +56,13 @@ async function uploadFile(file: File) { fileStatuses.value[idx] = { name: file.name, status: 'done' } emit('uploaded') } else { - const msg = await r.text() - fileStatuses.value[idx] = { name: file.name, status: 'error', error: msg || `Error ${r.status}` } + let errorMsg = `Error ${r.status}` + try { + const body = await r.text() + const parsed = JSON.parse(body) + errorMsg = parsed.detail ?? parsed.message ?? errorMsg + } catch { /* leave default */ } + fileStatuses.value[idx] = { name: file.name, status: 'error', error: errorMsg } } } catch { fileStatuses.value[idx] = { name: file.name, status: 'error', error: 'Upload failed' } @@ -71,6 +76,12 @@ function onFileInput(e: Event) { input.value = '' } +function onDragLeave(e: DragEvent) { + if (e.currentTarget instanceof Node && e.relatedTarget instanceof Node && + (e.currentTarget as Node).contains(e.relatedTarget as Node)) return + isDragging.value = false +} + function onDrop(e: DragEvent) { isDragging.value = false if (!e.dataTransfer?.files) return diff --git a/web/src/components/WizardOverlay.vue b/web/src/components/WizardOverlay.vue index 5952ea2..bdf0cb0 100644 --- a/web/src/components/WizardOverlay.vue +++ b/web/src/components/WizardOverlay.vue @@ -151,6 +151,8 @@ async function loadSchema() { if (saved) { try { session.value = JSON.parse(saved) } catch {} } + // Pre-populate answer for the current step (handles sessionStorage restore) + answer.value = session.value.answers[currentStep.value?.id ?? ''] ?? '' } async function goNext(skip = false) {