From 9ef94efeb5812cd78db7642545a4e315288331de Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Thu, 19 Feb 2026 21:05:59 -0500 Subject: [PATCH] feat(dashboard): implement Phase 6 TypeScript type definitions Add TypeScript interfaces for Carousel-style dashboard to api.d.ts: New Interfaces: 1. SectionData - Matches handlers.SectionData in collections.go (lines 73-81) - id: Collection name (string) - is_system: Boolean flag (true for system collections, false for user) - title: Display title - description: Collection description - icon: Emoji icon - items: Array of BookInfo objects - view_all_url: URL to view all items (system collections only) - priority: Display order (lower numbers first) 2. DashboardPreferences - Matches database.UserDashboardPreferences (models.go:381-390) - library_id: Library UUID - hidden_collections: Array of collection names to hide - collection_order: Array of collection names for custom ordering - items_per_section: Number of items per section Existing Interface: - BookInfo: Already defined (media_item_id, title, author, cover_image_path) - Reused by SectionData for items array - No duplicate definitions needed Key Compliance: - is_system: boolean matches database is_system_collection field - media_item_id matches Go BookInfo.MediaItemID field - Uses existing BookInfo struct (no duplicates) - Added to existing api.d.ts file (follows established pattern) --- web/src/types/api.d.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/web/src/types/api.d.ts b/web/src/types/api.d.ts index 5264f28..fc1b4a8 100644 --- a/web/src/types/api.d.ts +++ b/web/src/types/api.d.ts @@ -97,6 +97,31 @@ export interface BookInfo { cover_image_path: string; } +// Dashboard type definitions +// CRITICAL: Must match Go handler return types EXACTLY +// Source: handlers.SectionData in collections.go (lines 73-81) +// Used in: dashboard API responses, TypeScript dashboard components +export interface SectionData { + id: string; + is_system: boolean; + title: string; + description: string; + icon: string; + items: BookInfo[]; + view_all_url: string; + priority: number; +} + +// Matches database.UserDashboardPreferences and dashboard preferences API +// Source: internal/database/models.go:381-390 +// Used in: dashboard preferences API +export interface DashboardPreferences { + library_id: string; + hidden_collections: string[]; + collection_order: string[]; + items_per_section: number; +} + // Matches handlers.UnlinkedBookData JSON response // Used in: unlinked_books.ts, unlinked_books.templ export interface UnlinkedBookData {