// Page détail d'un projet function ProjectDetailPage({ navigate, projectId }) { const project = window.PROJECTS.find((p) => p.id === projectId) || window.PROJECTS[0]; const idx = window.PROJECTS.findIndex((p) => p.id === project.id); const nextProject = window.PROJECTS[(idx + 1) % window.PROJECTS.length]; const gallery = project.gallery && project.gallery.length > 0 ? project.gallery : project.cover ? [project.cover] : []; return (
Secteur · {project.sectorLabel}

{project.title.replace(project.italic, '')} {project.italic}

Projet № {String(idx + 1).padStart(2, '0')}
{project.location}
Programme
{project.programme}
Maître d'ouvrage
{project.maitreOuvrage}
Surface
{project.surface}
Calendrier
{project.calendrier}
{project.cover ? {project.title} : }
— le projet

{project.summary}

{project.body.slice(0, Math.ceil(project.body.length / 2)).map((p, i) =>

{p}

)}
{project.body.slice(Math.ceil(project.body.length / 2)).map((p, i) =>

{p}

)} {project.link && {project.link.label} }
{gallery.length > 1 &&
Galerie

Photos de chantier.

{String(gallery.length).padStart(2, '0')} vues
{gallery.map((src, i) => { // Les plans sont affichés en entier (non rognés), pleine largeur const isPlan = /plan|facade|façade|masse/i.test(src); const isWide = isPlan || i % 3 === 0; return ( {`${project.title} ); })}
}
Fiche projet

Le projet, en détails.

Programme
{project.programme}
Maître d'ouvrage
{project.maitreOuvrage}
Montant des travaux
{project.montant}
Type de mission 
{project.mission}
Surface
{project.surface}
Calendrier
{project.calendrier}
Localisation
{project.location}
Secteur
{project.sectorLabel}
{project.specImage ? {project.title : gallery[1] || project.cover ? {project.title} : }
{/* Projet suivant */}
); } window.ProjectDetailPage = ProjectDetailPage;