diff --git a/apps/web/src/app/dashboard/events/[id]/bulk-photo-actions.tsx b/apps/web/src/app/dashboard/events/[id]/bulk-photo-actions.tsx index 46f148a..5924d2b 100644 --- a/apps/web/src/app/dashboard/events/[id]/bulk-photo-actions.tsx +++ b/apps/web/src/app/dashboard/events/[id]/bulk-photo-actions.tsx @@ -24,7 +24,11 @@ export function BulkPhotoActions({ eventId, rows, selected, setSelected, canMode setReport(allResults); setSelected(allResults.filter(row => row.status === "failed" || row.status === "skipped").map(row => row.photoId)); setPending(null); - toast(`${result.affected} photos changed; ${allResults.length - result.affected} skipped or failed`); + const unchanged = allResults.filter(row => row.status === "unchanged").length; + const issues = allResults.filter(row => row.status === "failed" || row.status === "skipped").length; + const message = `${result.affected} updated${unchanged ? ` · ${unchanged} already set` : ""}${issues ? ` · ${issues} need attention` : ""}`; + if (issues) toast.warning(message); else toast.success(message); + void utils.manager.stats.invalidate({ eventId }); await utils.manager.photos.invalidate({ eventId }); }, onError: error => toast.error(error.message), }); @@ -32,15 +36,17 @@ export function BulkPhotoActions({ eventId, rows, selected, setSelected, canMode const actions: Action[] = [...(canModerate ? ["public", "hidden", ...(canPrivate ? ["private"] : []), "rejected"] as Action[] : []), ...(canDelete ? ["delete" as const] : [])]; const icons = { public: CheckIcon, hidden: EyeOffIcon, private: LockIcon, rejected: XIcon, delete: Trash2Icon }; return