From 1f0911c0f7b0374c814d4fdb95b79f455ad06e4a Mon Sep 17 00:00:00 2001 From: vibe-bot Date: Fri, 8 Aug 2025 02:14:46 +0200 Subject: [PATCH] fix(folders): API-Filter per folder + UI ruft Sounds je aktivem Tab ab; 'Alle' zeigt weiterhin alle --- server/src/index.ts | 7 ++++++- web/src/App.tsx | 4 ++-- web/src/api.ts | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 50ad076..06da991 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -190,6 +190,7 @@ app.get('/api/health', (_req: Request, res: Response) => { app.get('/api/sounds', (req: Request, res: Response) => { const q = String(req.query.q ?? '').toLowerCase(); + const folderFilter = typeof req.query.folder === 'string' ? (req.query.folder as string) : '__all__'; const rootEntries = fs.readdirSync(SOUNDS_DIR, { withFileTypes: true }); const rootFiles = rootEntries @@ -217,7 +218,11 @@ app.get('/api/sounds', (req: Request, res: Response) => { } const allItems = [...rootFiles, ...folderItems].sort((a, b) => a.name.localeCompare(b.name)); - const filteredItems = allItems.filter((s) => (q ? s.name.toLowerCase().includes(q) : true)); + let itemsByFolder = allItems; + if (folderFilter !== '__all__') { + itemsByFolder = allItems.filter((it) => (folderFilter === '' ? it.folder === '' : it.folder === folderFilter)); + } + const filteredItems = itemsByFolder.filter((s) => (q ? s.name.toLowerCase().includes(q) : true)); const total = allItems.length; const rootCount = rootFiles.length; diff --git a/web/src/App.tsx b/web/src/App.tsx index 03ae007..0595a17 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -30,14 +30,14 @@ export default function App() { const interval = setInterval(async () => { try { - const s = await fetchSounds(query); + const s = await fetchSounds(query, activeFolder); setSounds(s.items); setTotal(s.total); setFolders(s.folders); } catch {} }, 10000); return () => clearInterval(interval); - }, []); + }, [activeFolder]); const filtered = useMemo(() => { const q = query.trim().toLowerCase(); diff --git a/web/src/api.ts b/web/src/api.ts index 351cf2f..9c8e5c2 100644 --- a/web/src/api.ts +++ b/web/src/api.ts @@ -5,6 +5,7 @@ const API_BASE = import.meta.env.VITE_API_BASE_URL || '/api'; export async function fetchSounds(q?: string, folderKey?: string): Promise { const url = new URL(`${API_BASE}/sounds`, window.location.origin); if (q) url.searchParams.set('q', q); + if (folderKey) url.searchParams.set('folder', folderKey); const res = await fetch(url.toString()); if (!res.ok) throw new Error('Fehler beim Laden der Sounds'); return res.json();