"use client"; import { AlertCircle, ArrowLeft, CheckCircle, MoreHorizontal, XCircle, } from "lucide-react"; import Link from "next/link"; import { useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { adminService } from "@/services/admin.service"; import { type Report, ReportStatus } from "@/services/report.service"; export default function AdminReportsPage() { const [reports, setReports] = useState([]); const [loading, setLoading] = useState(true); const fetchReports = useCallback(async () => { setLoading(true); try { const data = await adminService.getReports(); setReports(data); } catch (_error) { toast.error("Erreur lors du chargement des signalements."); } finally { setLoading(false); } }, []); useEffect(() => { fetchReports(); }, [fetchReports]); const handleUpdateStatus = async (reportId: string, status: ReportStatus) => { try { await adminService.updateReportStatus(reportId, status); toast.success("Statut mis à jour."); fetchReports(); } catch (_error) { toast.error("Erreur lors de la mise à jour du statut."); } }; const getStatusBadge = (status: ReportStatus) => { switch (status) { case ReportStatus.PENDING: return En attente; case ReportStatus.REVIEWED: return Examiné; case ReportStatus.RESOLVED: return Résolu; case ReportStatus.DISMISSED: return Rejeté; default: return {status}; } }; return (

Signalements

Liste des signalements Gérez les signalements de contenu inapproprié. Signalé par Cible Raison Description Statut Date Actions {loading ? ( Chargement... ) : reports.length === 0 ? ( Aucun signalement trouvé. ) : ( reports.map((report) => ( {report.reporterId.substring(0, 8)}... {report.contentId ? ( Contenu ) : ( "Tag" )} {report.reason} {report.description || "-"} {getStatusBadge(report.status)} {new Date(report.createdAt).toLocaleDateString()} handleUpdateStatus(report.uuid, ReportStatus.REVIEWED) } > Marquer comme examiné handleUpdateStatus(report.uuid, ReportStatus.RESOLVED) } > Marquer comme résolu handleUpdateStatus(report.uuid, ReportStatus.DISMISSED) } className="text-destructive" > Rejeter {report.contentId && ( Voir le contenu )} )) )}
); }