diff --git a/src/components/admin/FileManager.tsx b/src/components/admin/FileManager.tsx index 5cdcb6a..1d5219b 100644 --- a/src/components/admin/FileManager.tsx +++ b/src/components/admin/FileManager.tsx @@ -15,8 +15,17 @@ export function FileManager() { const [copied, setCopied] = useState(null); const [search, setSearch] = useState(""); const [type, setType] = useState(""); + const [selected, setSelected] = useState>(new Set()); const inputRef = useRef(null); + const toggleSel = (id: string) => + setSelected((s) => { + const n = new Set(s); + if (n.has(id)) n.delete(id); + else n.add(id); + return n; + }); + const reload = useCallback(async () => { setLoading(true); try { @@ -59,6 +68,14 @@ export function FileManager() { setTimeout(() => setCopied(null), 1500); }; + const bulkDelete = async () => { + if (selected.size === 0) return; + if (!confirm(`حذف ${selected.size.toLocaleString("fa-IR")} فایل انتخاب‌شده؟`)) return; + await Promise.all(Array.from(selected).map((id) => fetch(`/api/admin/resource/files/${id}`, { method: "DELETE" }))); + setSelected(new Set()); + reload(); + }; + return (
@@ -81,6 +98,11 @@ export function FileManager() { ))}
+ {selected.size > 0 && ( + + )} setSearch(e.target.value)} @@ -103,7 +125,13 @@ export function FileManager() { {files.map((f) => { const url = fileUrl(f); return ( -
+
+ toggleSel(f.id)} + className="absolute end-3 top-3 z-10 h-4 w-4 cursor-pointer accent-indigo-500" + />
{url && isImage(f) ? ( // eslint-disable-next-line @next/next/no-img-element