diff --git a/frontend/src/pages/ReportedPhotos.tsx b/frontend/src/pages/ReportedPhotos.tsx index 8766b0a..a02f1b0 100644 --- a/frontend/src/pages/ReportedPhotos.tsx +++ b/frontend/src/pages/ReportedPhotos.tsx @@ -86,16 +86,36 @@ export default function ReportedPhotos() { return } - if ( - !confirm( - `Submit ${decisionsList.length} decision(s)?\n\nThis will ${ - decisionsList.filter((d) => d.decision === 'remove').length - } remove photo(s) and ${ - decisionsList.filter((d) => d.decision === 'keep').length - } keep photo(s).` - ) - ) { - return + // Check if there are any 'remove' decisions + const removeDecisions = decisionsList.filter((d) => d.decision === 'remove') + const keepDecisions = decisionsList.filter((d) => d.decision === 'keep') + + // Show specific confirmation for removal + if (removeDecisions.length > 0) { + const removeCount = removeDecisions.length + const photoDetails = removeDecisions + .map((d) => { + const reported = reportedPhotos.find((p) => p.id === d.id) + return reported?.photo_filename || `Photo #${reported?.photo_id || d.id}` + }) + .join('\n - ') + + const confirmMessage = `⚠️ WARNING: You are about to PERMANENTLY REMOVE ${removeCount} photo(s):\n\n - ${photoDetails}\n\nThis will:\n • Delete the photo(s) from the database\n • Delete all faces detected in the photo(s)\n • Delete all encodings related to those faces\n\nThis action CANNOT be undone!\n\nAre you sure you want to proceed?` + + if (!confirm(confirmMessage)) { + return + } + } + + // Show general confirmation if there are also 'keep' decisions + if (keepDecisions.length > 0) { + const confirmMessage = `Submit ${decisionsList.length} decision(s)?\n\nThis will ${ + removeDecisions.length + } remove photo(s) and ${keepDecisions.length} keep photo(s).` + + if (!confirm(confirmMessage)) { + return + } } setSubmitting(true) @@ -220,6 +240,7 @@ export default function ReportedPhotos() { {reportedPhotos.map((reported) => { const isReviewed = reported.status === 'reviewed' const isDismissed = reported.status === 'dismissed' + const canMakeDecision = !isDismissed && (reported.status === 'pending' || reported.status === 'reviewed') return (