From 77e8876a075b2a7c1dbbf8fa8e9357a81b913d52 Mon Sep 17 00:00:00 2001 From: orfelorfel23 Date: Sat, 3 Oct 2026 12:16:40 +0200 Subject: [PATCH] feat: add folder filter to admin panel --- src/app/admin/page.tsx | 80 ++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 19 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 5888b6f..002c822 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -21,6 +21,7 @@ export default function AdminDashboard() { const [votingOpen, setVotingOpen] = useState(false); const [directoryOrder, setDirectoryOrder] = useState([]); const [loading, setLoading] = useState(true); + const [selectedFolder, setSelectedFolder] = useState(''); const router = useRouter(); useEffect(() => { @@ -121,21 +122,23 @@ export default function AdminDashboard() { }; const handleBulkAction = async (action: 'publish' | 'unpublish') => { - if (!confirm(`Möchtest du wirklich alle ${action === 'publish' ? 'freigeben' : 'aufheben'}?`)) return; + if (!confirm(`Möchtest du wirklich alle ${selectedFolder ? 'in diesem Ordner ' : ''}${action === 'publish' ? 'freigeben' : 'aufheben'}?`)) return; const isPublished = action === 'publish'; - const idsToUpdate = items.filter(i => i.published !== isPublished).map(i => i.id); + const itemsToProcess = selectedFolder ? items.filter(i => i.directory === selectedFolder) : items; + const idsToUpdate = itemsToProcess.filter(i => i.published !== isPublished).map(i => i.id); if (idsToUpdate.length === 0) return; // Optimistic UI - setItems((prev) => - prev.map((i) => ({ ...i, published: isPublished })) - ); - setStats({ - total: items.length, - published: isPublished ? items.length : 0, - unpublished: isPublished ? 0 : items.length, + setItems((prev) => { + const next = prev.map((i) => idsToUpdate.includes(i.id) ? { ...i, published: isPublished } : i); + setStats({ + total: next.length, + published: next.filter((i) => i.published).length, + unpublished: next.filter((i) => !i.published).length, + }); + return next; }); try { @@ -183,6 +186,8 @@ export default function AdminDashboard() { if (!authChecked) return
Prüfe Berechtigung...
; + const displayedItems = selectedFolder ? items.filter(i => i.directory === selectedFolder) : items; + return (
@@ -247,14 +252,51 @@ export default function AdminDashboard() {
-
-

Alle Medien

-
- - + ))} +
+
+ +
+

Medien {selectedFolder ? `(${selectedFolder})` : ''}

+
+ +
- {items.map(item => ( + {displayedItems.map(item => (
))} - {items.length === 0 && !loading && ( + {displayedItems.length === 0 && !loading && (
- Keine Medien gefunden. Bitte einen Scan durchführen. + Keine Medien gefunden. Bitte einen Scan durchführen oder anderen Filter wählen.
)}