import React, { useState, useEffect } from 'react'; import { Card } from '../ui/card'; import { Button } from '../ui/button'; import { Badge } from '../ui/badge'; import { EmptyState } from '../ui/empty-state'; import { Report } from '../../types'; import { ShieldAlert, CheckCircle, Ban, MessageSquare, Clock, Loader2, } from 'lucide-react'; import { useToast } from '../../components/feedback/ToastProvider'; 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 && ( } title="All caught up!" description="No reports in this queue." /> )} {!loading && filteredQueue.map((report) => (
{report.targetName} {report.timestamp}
Reason: {report.reason}

{report.description}

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