import React, { useState, useEffect } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { Badge } from '../ui/badge'; import { Report } from '../../types'; import { ShieldAlert, CheckCircle, Ban, MessageSquare, Clock, Loader2 } from 'lucide-react'; import { useToast } from '../../context/ToastContext'; import { adminService } from '../../services/adminService'; import { logger } from '@/utils/logger'; export const AdminModerationView: React.FC = () => { const { addToast } = useToast(); const [queue, setQueue] = useState([]); const [activeTab, setActiveTab] = useState<'pending' | 'reviewed' | 'resolved'>('pending'); const [loading, setLoading] = useState(true); useEffect(() => { const loadQueue = async () => { setLoading(true); try { const data = await adminService.getModerationQueue('all'); setQueue(data); } catch (e) { logger.error('Error loading moderation queue', { error: e instanceof Error ? e.message : String(e), stack: e instanceof Error ? e.stack : undefined, }); } finally { setLoading(false); } }; loadQueue(); }, []); const filteredQueue = queue.filter(r => activeTab === 'pending' ? r.status === 'pending' : activeTab === 'reviewed' ? r.status === 'reviewed' : r.status === 'resolved' || r.status === 'dismissed' ); const handleAction = async (id: string, action: string) => { try { await adminService.resolveReport(id, action); addToast(`Report ${action}`, 'success'); setQueue(queue.map(r => r.id === id ? { ...r, status: action === 'dismissed' ? 'dismissed' : 'resolved' } as any : r)); } catch (e) { addToast("Action failed", "error"); } }; return (

MODERATION QUEUE

{['pending', 'reviewed', 'resolved'].map(tab => ( ))}
{loading &&
} {!loading && filteredQueue.length === 0 && (

All caught up! No reports in this queue.

)} {!loading && filteredQueue.map(report => (
{report.targetName} {report.timestamp}
Reason: {report.reason}

{report.description}

Reported by: {report.reportedBy}
))}
); };