import { useState, useEffect } from 'react'; import api from '../../services/api'; import { Check, X, Printer, Globe, MessageSquare } from 'lucide-react'; interface Listing { id: number; title: string; description: string; price: number; currency: string; createdAt: string; status: string; printText: string; isBold: boolean; isFrame: boolean; printDaysCount: number; } export default function ModerationPage() { const [listings, setListings] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { loadPending(); }, []); const loadPending = async () => { setLoading(true); try { // Este endpoint ya lo tenemos en el ListingsController que hicimos al inicio const res = await api.get('/listings/pending'); setListings(res.data); } catch (error) { console.error(error); } finally { setLoading(false); } }; const handleAction = async (id: number, action: 'Published' | 'Rejected') => { try { await api.put(`/listings/${id}/status`, JSON.stringify(action), { headers: { 'Content-Type': 'application/json' } }); setListings(listings.filter(l => l.id !== id)); } catch (e) { alert("Error al procesar el aviso"); } }; if (loading) return
Cargando avisos para revisar...
; return (

Panel de Moderación

Revisión de avisos entrantes para Web y Diario Papel

{listings.length === 0 ? (

¡Bandeja vacía!

No hay avisos pendientes de moderación en este momento.

) : (
{listings.map(listing => (
{/* Info del Aviso */}
ID: #{listing.id}

{listing.title}

{listing.currency} ${listing.price.toLocaleString()}

{new Date(listing.createdAt).toLocaleString()}

{/* Versión Web */}
VERSIÓN WEB / MOBILE

"{listing.description}"

{/* Versión Impresa - CRÍTICO */}
VERSIÓN IMPRESA
{listing.printDaysCount} DÍAS
{listing.printText || "Sin texto de impresión definido"}
{/* Acciones Laterales */}
))}
)}
); }