diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index d07beba2..1c2891df 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -28,6 +28,14 @@ interface ModerationItem { }; entity_name?: string; park_name?: string; + reviewed_at?: string; + reviewed_by?: string; + reviewer_notes?: string; + reviewer_profile?: { + username: string; + display_name?: string; + avatar_url?: string; + }; } type EntityFilter = 'all' | 'reviews' | 'submissions' | 'photos'; @@ -107,6 +115,8 @@ export const ModerationQueue = forwardRef((props, ref) => { photos, park_id, ride_id, + moderated_at, + moderated_by, parks:park_id ( name ), @@ -135,7 +145,10 @@ export const ModerationQueue = forwardRef((props, ref) => { submission_type, created_at, user_id, - status + status, + reviewed_at, + reviewer_id, + reviewer_notes `) .in('status', submissionStatuses); @@ -193,11 +206,13 @@ export const ModerationQueue = forwardRef((props, ref) => { submissions = submissionsWithEntities; } - // Get unique user IDs to fetch profiles + // Get unique user IDs to fetch profiles (including reviewers) const userIds = [ ...reviews.map(r => r.user_id), - ...submissions.map(s => s.user_id) - ]; + ...submissions.map(s => s.user_id), + ...reviews.filter(r => r.moderated_by).map(r => r.moderated_by), + ...submissions.filter(s => s.reviewer_id).map(s => s.reviewer_id) + ].filter((id, index, arr) => id && arr.indexOf(id) === index); // Remove duplicates and nulls // Fetch profiles for all users with avatars const { data: profiles } = await supabase @@ -230,6 +245,10 @@ export const ModerationQueue = forwardRef((props, ref) => { user_profile: profileMap.get(review.user_id), entity_name, park_name, + reviewed_at: review.moderated_at, + reviewed_by: review.moderated_by, + reviewer_notes: (review as any).reviewer_notes, + reviewer_profile: review.moderated_by ? profileMap.get(review.moderated_by) : undefined, }; }), ...submissions.map(submission => ({ @@ -243,6 +262,10 @@ export const ModerationQueue = forwardRef((props, ref) => { user_profile: profileMap.get(submission.user_id), entity_name: (submission as any).entity_name, park_name: (submission as any).park_name, + reviewed_at: submission.reviewed_at, + reviewed_by: submission.reviewer_id, + reviewer_notes: submission.reviewer_notes, + reviewer_profile: submission.reviewer_id ? profileMap.get(submission.reviewer_id) : undefined, })), ]; @@ -850,6 +873,73 @@ export const ModerationQueue = forwardRef((props, ref) => { )} + {/* Reviewer Information for approved/rejected items */} + {(item.status === 'approved' || item.status === 'rejected') && (item.reviewed_at || item.reviewer_notes) && ( +
+
+ + Reviewed {item.reviewed_at ? format(new Date(item.reviewed_at), 'MMM d, yyyy HH:mm') : 'recently'} + {item.reviewer_profile && ( + <> + by +
+ + + + {(item.reviewer_profile.display_name || item.reviewer_profile.username)?.slice(0, 2).toUpperCase()} + + + + {item.reviewer_profile.display_name || item.reviewer_profile.username} + +
+ + )} +
+ + {item.reviewer_notes && ( +
+

Reviewer Notes:

+

{item.reviewer_notes}

+
+ )} + + {/* Reverse Decision Buttons */} +
+ +