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();