From da2ece986a2923ab3c7826fbcedd8a7daafe6fb6 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 20 Apr 2026 01:17:04 +0200 Subject: [PATCH] fix(documents): WCAG text-size and API error pattern fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DashboardResumeStrip: text-[10px] → text-xs on collaborator initials (WCAG 1.4.4) - documents/+page.server.ts: use !result.response.ok per CLAUDE.md; keep narrow try/catch for network-level failures only Co-Authored-By: Claude Sonnet 4.6 --- .../components/DashboardResumeStrip.svelte | 2 +- frontend/src/routes/documents/+page.server.ts | 56 ++++++++++--------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/frontend/src/lib/components/DashboardResumeStrip.svelte b/frontend/src/lib/components/DashboardResumeStrip.svelte index 76eade81..469798fd 100644 --- a/frontend/src/lib/components/DashboardResumeStrip.svelte +++ b/frontend/src/lib/components/DashboardResumeStrip.svelte @@ -97,7 +97,7 @@ function safeColor(color: string): string { {#each resumeDoc.collaborators.slice(0, 3) as collab (collab.initials + collab.color)} {collab.initials} {/each} diff --git a/frontend/src/routes/documents/+page.server.ts b/frontend/src/routes/documents/+page.server.ts index 2d2c7a09..ed46e46a 100644 --- a/frontend/src/routes/documents/+page.server.ts +++ b/frontend/src/routes/documents/+page.server.ts @@ -1,5 +1,6 @@ import { redirect } from '@sveltejs/kit'; import { createApiClient } from '$lib/api.server'; +import { getErrorMessage } from '$lib/errors'; import type { components } from '$lib/generated/api'; type DocumentSearchItem = components['schemas']['DocumentSearchItem']; @@ -29,8 +30,9 @@ export async function load({ url, fetch }) { const api = createApiClient(fetch); + let result; try { - const result = await api.GET('/api/documents/search', { + result = await api.GET('/api/documents/search', { params: { query: { q: q || undefined, @@ -46,32 +48,7 @@ export async function load({ url, fetch }) { } } }); - - if (result.response.status === 401) { - throw redirect(302, '/login'); - } - - const items: DocumentSearchItem[] = (result.data?.items ?? []) as DocumentSearchItem[]; - const total: number = result.data?.total ?? 0; - - return { - items, - total, - q, - from, - to, - senderId, - receiverId, - tags, - sort, - dir, - tagQ, - tagOp, - error: null as string | null - }; - } catch (e) { - if ((e as { status?: number }).status) throw e; - console.error('Error loading documents:', e); + } catch { return { items: [] as DocumentSearchItem[], total: 0, @@ -88,4 +65,29 @@ export async function load({ url, fetch }) { error: 'Daten konnten nicht geladen werden.' as string | null }; } + + if (result.response.status === 401) { + throw redirect(302, '/login'); + } + + const errorMessage: string | null = !result.response.ok + ? (getErrorMessage((result.error as unknown as { code?: string })?.code) ?? + 'Daten konnten nicht geladen werden.') + : null; + + return { + items: (result.data?.items ?? []) as DocumentSearchItem[], + total: result.data?.total ?? 0, + q, + from, + to, + senderId, + receiverId, + tags, + sort, + dir, + tagQ, + tagOp, + error: errorMessage + }; }