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 */}
{listing.printDaysCount} DÍAS
{listing.printText || "Sin texto de impresión definido"}
{/* Acciones Laterales */}
))}
)}
);
}