import { useState, useEffect } from 'react'; import api from '../../services/api'; import ListingDetailModal from '../../components/Listings/ListingDetailModal'; import { listingService } from '../../services/listingService'; import { Search, ExternalLink, Calendar, Tag, User as UserIcon } from 'lucide-react'; export default function ListingExplorer() { const [listings, setListings] = useState([]); const [loading, setLoading] = useState(true); const [query, setQuery] = useState(""); const [statusFilter, setStatusFilter] = useState(""); const [selectedDetail, setSelectedDetail] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const handleOpenDetail = async (id: number) => { const detail = await listingService.getById(id); setSelectedDetail(detail); setIsModalOpen(true); }; const loadListings = async () => { setLoading(true); try { // Usamos el endpoint de búsqueda que ya tiene el backend const res = await api.get('/listings', { params: { q: query } }); let data = res.data; if (statusFilter) { data = data.filter((l: any) => l.status === statusFilter); } setListings(data); } catch (error) { console.error("Error cargando avisos:", error); } finally { setLoading(false); } }; useEffect(() => { loadListings(); }, [statusFilter]); return (

Explorador de Avisos

Gestión y búsqueda histórica de publicaciones

{/* BARRA DE HERRAMIENTAS */}
setQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && loadListings()} />
{/* RESULTADOS */}
{loading ? ( ) : listings.length === 0 ? ( ) : ( listings.map((l) => ( )) )}
ID Aviso / Título Ingreso (Aviso) Valor Producto Creado Vía Estado Detalles
Buscando en la base de datos...
No se encontraron avisos con esos criterios.
#{l.id}
{l.title}
{l.categoryName || 'Sin Rubro'}
${l.adFee?.toLocaleString() ?? "0"}
${l.price?.toLocaleString()}
{new Date(l.createdAt).toLocaleDateString()}
{l.userId === null ? 'Web' : 'Mostrador'} {l.status}
setIsModalOpen(false)} detail={selectedDetail} />
); }