import Link from "next/link"; import { requireUser } from "@/lib/auth/session"; import { myListings } from "@/lib/listings/service"; import { STATUS_LABEL, PROPERTY_TYPE_LABEL } from "@/lib/listings/types"; import { mediaUrl } from "@/lib/listings/media"; import { fmtPrice, fmtDate, fmtInt } from "@/lib/format"; import { Empty } from "@/components/ui"; import { ListingRowActions } from "./row-actions"; export const dynamic = "force-dynamic"; const TONE: Record = { PUBLISHED: "bg-good-soft text-good", DRAFT: "bg-surface-2 text-ink-2", PENDING_REVIEW: "bg-warn-soft text-warn", PAUSED: "bg-info-soft text-info", REJECTED: "bg-brand-soft text-brand-dark", ARCHIVED: "bg-surface-2 text-ink-3", SOLD: "bg-surface-2 text-ink-3", RENTED: "bg-surface-2 text-ink-3" }; export default async function MesAnnonces() { const u = await requireUser(); const rows = await myListings(u.id); return (

Mes annonces

+ Nouvelle annonce
{rows.length === 0 ? : (
    {rows.map(({ l, p, mediaCount, cover }) => (
  • {cover ? : Sans photo}
    {STATUS_LABEL[l.status]}{l.listingType === "RENT" ? "À louer" : "À vendre"} · {PROPERTY_TYPE_LABEL[p.propertyType]}
    {l.title ?? p.canonicalAddress ?? "Annonce sans titre"}

    {p.canonicalAddress ? `${p.canonicalAddress}, ` : ""}{p.city ?? "Municipalité à préciser"} · {fmtPrice(l.priceAmount != null ? Number(l.priceAmount) : null, { rent: l.listingType === "RENT" })} · {mediaCount} photo{mediaCount > 1 ? "s" : ""} · {fmtInt(l.viewsCount)} vues

    {l.moderationNote && l.status !== "PUBLISHED" &&

    Vérification : {l.moderationNote}

    }

    Modifiée le {fmtDate(l.updatedAt.toISOString())}{l.publicationAt ? ` · publiée le ${fmtDate(l.publicationAt.toISOString())}` : ""}{l.expiresAt && l.status === "PUBLISHED" ? ` · expire le ${fmtDate(l.expiresAt.toISOString())}` : ""}

  • ))}
)}
); }