diff --git a/frontend/src/routes/categories/[id]/+page.svelte b/frontend/src/routes/categories/[id]/+page.svelte index 93d0a8c..77c9859 100644 --- a/frontend/src/routes/categories/[id]/+page.svelte +++ b/frontend/src/routes/categories/[id]/+page.svelte @@ -48,7 +48,8 @@ void loadTags(id, 0); }); - async function loadTags(id: string, startOffset: number) { + async function loadTags(id: string | undefined, startOffset: number) { + if (!id) return; tagsLoading = true; try { const params = new URLSearchParams({ diff --git a/frontend/src/routes/tags/[id]/+page.svelte b/frontend/src/routes/tags/[id]/+page.svelte index 70ec906..ab5a376 100644 --- a/frontend/src/routes/tags/[id]/+page.svelte +++ b/frontend/src/routes/tags/[id]/+page.svelte @@ -172,7 +172,7 @@

Implied tags

- (rules = r)} /> + (rules = r)} />
{/if} diff --git a/frontend/vite-mock-plugin.ts b/frontend/vite-mock-plugin.ts index f44a92b..a04f16b 100644 --- a/frontend/vite-mock-plugin.ts +++ b/frontend/vite-mock-plugin.ts @@ -114,6 +114,24 @@ function mockThumbSvg(id: string): string { `; } +type MockFile = { + id: string; + original_name: string; + mime_type: string; + mime_extension: string; + content_datetime: string; + notes: string | null; + metadata: unknown; + exif: Record; + phash: number | null; + creator_id: number; + creator_name: string; + is_public: boolean; + is_deleted: boolean; + created_at: string; + position?: number; +}; + // Trash — pre-seeded with a few deleted files const MOCK_TRASH: MockFile[] = Array.from({ length: 6 }, (_, i) => { const mimes = ['image/jpeg', 'image/png', 'image/webp']; @@ -139,7 +157,7 @@ const MOCK_TRASH: MockFile[] = Array.from({ length: 6 }, (_, i) => { }; }); -const MOCK_FILES = Array.from({ length: 75 }, (_, i) => { +const MOCK_FILES: MockFile[] = Array.from({ length: 75 }, (_, i) => { const mimes = ['image/jpeg', 'image/png', 'image/webp', 'video/mp4']; const exts = ['jpg', 'png', 'webp', 'mp4' ]; const mi = i % mimes.length;