From 9665c9c0fccc0fe91a492311477ceaf361d4d7bf Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 14 Jun 2026 12:10:37 +0200 Subject: [PATCH] fix(timeline): drop zero-count segments from the zeitstrahl meta line A timeline with content in only one category rendered a misleading "0 Briefe" / "0 Ereignisse" segment. Only push a count segment when its count is greater than zero; the grouping label and (when present) the range are unchanged. Co-Authored-By: Claude Opus 4.8 --- frontend/src/routes/zeitstrahl/+page.svelte | 9 +++++++-- .../src/routes/zeitstrahl/page.svelte.spec.ts | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/frontend/src/routes/zeitstrahl/+page.svelte b/frontend/src/routes/zeitstrahl/+page.svelte index 589e436d..098cf91e 100644 --- a/frontend/src/routes/zeitstrahl/+page.svelte +++ b/frontend/src/routes/zeitstrahl/+page.svelte @@ -18,8 +18,13 @@ const metaLine = $derived.by(() => { if (meta.firstYear !== null && meta.lastYear !== null) { segments.push(`${meta.firstYear}–${meta.lastYear}`); } - segments.push(m.timeline_letters_count({ count: meta.letterCount })); - segments.push(m.timeline_events_count({ count: meta.eventCount })); + // A zero-count segment ("0 Briefe") reads as a data error — drop it. + if (meta.letterCount > 0) { + segments.push(m.timeline_letters_count({ count: meta.letterCount })); + } + if (meta.eventCount > 0) { + segments.push(m.timeline_events_count({ count: meta.eventCount })); + } segments.push(m.timeline_grouping_date()); return segments.join(' · '); }); diff --git a/frontend/src/routes/zeitstrahl/page.svelte.spec.ts b/frontend/src/routes/zeitstrahl/page.svelte.spec.ts index 99510f37..f1d40d9a 100644 --- a/frontend/src/routes/zeitstrahl/page.svelte.spec.ts +++ b/frontend/src/routes/zeitstrahl/page.svelte.spec.ts @@ -75,4 +75,23 @@ describe('/zeitstrahl page', () => { render(Page, { data: pageData(makeTimelineDTO()) }); expect(document.querySelector('[data-testid="timeline-meta"]')).toBeNull(); }); + + it('drops the letters segment instead of showing "0 Briefe" (REQ-002)', () => { + render(Page, { + data: pageData(makeTimelineDTO({ years: [makeYear(1914, [event('Geburt')])] })) + }); + const sub = document.querySelector('[data-testid="timeline-meta"]'); + expect(sub).not.toBeNull(); + expect(sub?.textContent).not.toContain(m.timeline_letters_count({ count: 0 })); + expect(sub?.textContent).toContain(m.timeline_grouping_date()); + }); + + it('drops the events segment instead of showing "0 Ereignisse" (REQ-002)', () => { + render(Page, { + data: pageData(makeTimelineDTO({ undated: [makeEntry({ documentId: 'u1' })] })) + }); + const sub = document.querySelector('[data-testid="timeline-meta"]'); + expect(sub).not.toBeNull(); + expect(sub?.textContent).not.toContain(m.timeline_events_count({ count: 0 })); + }); });