SPB Git forge

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

232commits 1branches 0releases
172.9 MBsize
maindefault branch
2 days agolast push
HTML 98.9% Python 0.6%
2.1 KB · 54 lines tsx
Raw Blame History
1// -----------------------------------------------------------------------------2// Lou-Ka — Agrégateur de logements à louer (province de Québec)3// Auteur : Simon-Pierre Boucher — contact@spboucher.ai4// fiche/PropertyDescription.tsx : description — accroche « en bref » du digest,5//   sections structurées, texte tronqué à ~200 px avec « Lire la suite »,6//   texte original de la source en accordéon.7// -----------------------------------------------------------------------------8import { useState } from "react";9import { Listing } from "../api";10import { Accordion, MoreButton, SectionCard } from "./ui";1112export default function PropertyDescription({ l }: { l: Listing }) {13  const dg = l.digest;14  const [open, setOpen] = useState(false);15  const texte = dg?.texte_nettoye || l.description || "";16  if (!dg && !texte) {17    return (18      <SectionCard id="description" title="Description">19        <p className="lk-fine">La source ne fournit pas de description pour cette annonce.</p>20      </SectionCard>21    );22  }23  const long = (dg ? dg.sections.reduce((n, s) => n + s.texte.length, 0) + (dg.en_bref?.length ?? 0) : texte.length) > 420;24  return (25    <SectionCard id="description" title="Description">26      <div className={`lk-desc ${long && !open ? "clamped" : ""}`}>27        <div className="lk-desc-body">28          {dg ? (29            <>30              {dg.en_bref && <p className="lk-desc-lead">{dg.en_bref}</p>}31              {dg.sections.map((s) => (32                <div key={s.titre}>33                  <h4>{s.titre}</h4>34                  <p>{s.texte}</p>35                </div>36              ))}37            </>38          ) : (39            <p>{texte}</p>40          )}41        </div>42      </div>43      {long && <MoreButton onClick={() => setOpen(!open)} expanded={open}>{open ? "Réduire" : "Lire la suite"}</MoreButton>}44      {dg && l.description && (45        <div className="lk-desc-orig">46          <Accordion title="Texte original de la source" small>47            <p style={{ whiteSpace: "pre-line" }}>{l.description}</p>48          </Accordion>49        </div>50      )}51    </SectionCard>52  );53}54