From 9bf14fbc75244d1d42bde174fb443d810470e634 Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Fri, 20 Mar 2026 09:56:22 -0700 Subject: [PATCH] fix: add error rollback and error state hygiene in digest store --- web/src/stores/digest.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/src/stores/digest.ts b/web/src/stores/digest.ts index 3ac1366..d3bbd2d 100644 --- a/web/src/stores/digest.ts +++ b/web/src/stores/digest.ts @@ -12,6 +12,7 @@ export interface DigestEntry { body: string | null } +/** Extracted link from a digest email body. Used by DigestView.vue. */ export interface DigestLink { url: string score: number // 2 = job-likely, 1 = other @@ -24,16 +25,25 @@ export const useDigestStore = defineStore('digest', () => { const error = ref(null) async function fetchAll() { + error.value = null loading.value = true const { data, error: err } = await useApiFetch('/api/digest-queue') loading.value = false - if (err) { error.value = 'Could not load digest queue'; return } + if (err) { + error.value = err.kind === 'network' ? 'Network error' : `Error ${err.status}` + return + } entries.value = data ?? [] } async function remove(id: number) { + const snapshot = entries.value.find(e => e.id === id) entries.value = entries.value.filter(e => e.id !== id) - await useApiFetch(`/api/digest-queue/${id}`, { method: 'DELETE' }) + const { error: err } = await useApiFetch(`/api/digest-queue/${id}`, { method: 'DELETE' }) + if (err) { + if (snapshot) entries.value = [...entries.value, snapshot] + error.value = err.kind === 'network' ? 'Network error' : `Error ${err.status}` + } } return { entries, loading, error, fetchAll, remove }