From d99ee7ec07349cde120ce27d200d6c4e99ff9d92 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 14:02:53 +0000 Subject: [PATCH] =?UTF-8?q?Promotions=20:=20logo=20de=20l'adh=C3=A9rent=20?= =?UTF-8?q?dans=20l'angle=20des=20cartes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le logo du commerce identifie l'offre avant même qu'on lise le nom. Il est posé en pastille ronde dans l'angle haut-gauche de la carte, la catégorie se décalant juste à côté sur la même ligne. - `src/components/MemberAvatar.tsx` : logo en `contain` sur fond blanc (les logos d'adhérents sont des marques sur fond clair, un `cover` les rognerait), repli sur les initiales colorées quand la fiche n'a pas de logo. - Appliqué à la carte d'accueil, à la carte de la fiche adhérent, à l'aperçu en direct de l'espace adhérent et à la carte de modération : même composition partout, l'aperçu montre donc bien ce que verra le visiteur. - `getLivePromotions` remonte `members.logo_url` ; la page espace le passe au formulaire. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01QXNXRC4j5VLfKvpyyisrnb --- src/app/adherents/[id]/page.tsx | 6 ++ src/app/backend/espace/MemberSpaceForm.tsx | 14 ++++- src/app/backend/espace/promotions/page.tsx | 4 ++ src/app/backend/promotions/page.tsx | 16 +++-- src/app/page.tsx | 37 ++++++----- src/components/MemberAvatar.tsx | 73 ++++++++++++++++++++++ src/lib/queries.ts | 1 + 7 files changed, 126 insertions(+), 25 deletions(-) create mode 100644 src/components/MemberAvatar.tsx diff --git a/src/app/adherents/[id]/page.tsx b/src/app/adherents/[id]/page.tsx index 8cebdc5..6d5875c 100644 --- a/src/app/adherents/[id]/page.tsx +++ b/src/app/adherents/[id]/page.tsx @@ -6,6 +6,7 @@ import { SiteHeader } from "@/components/SiteHeader"; import { SiteFooter } from "@/components/SiteFooter"; import { VitrineImage } from "@/components/VitrineImage"; import { PromoImage } from "@/components/PromoImage"; +import { MemberAvatar } from "@/components/MemberAvatar"; import { JsonLd } from "@/components/JsonLd"; import { getMemberLivePromotions, getPublicMember } from "@/lib/queries"; import { @@ -431,6 +432,11 @@ export default async function FicheAdherentPage({
{p.imageUrl && } {!p.imageUrl && (photo de l'offre)} + {/* Même repère que sur l'accueil : le logo du commerce + dans l'angle haut-gauche de la carte. */} + + + {p.badge && ( {p.badge} )} diff --git a/src/app/backend/espace/MemberSpaceForm.tsx b/src/app/backend/espace/MemberSpaceForm.tsx index efa81bf..01862f3 100644 --- a/src/app/backend/espace/MemberSpaceForm.tsx +++ b/src/app/backend/espace/MemberSpaceForm.tsx @@ -4,6 +4,7 @@ import { useRef, useState } from "react"; import { useRouter } from "next/navigation"; import { publishPromo } from "../actions"; import { PromoImage } from "@/components/PromoImage"; +import { MemberAvatar } from "@/components/MemberAvatar"; import { SOCIAL_BRAND, SocialIcon } from "@/components/SocialIcons"; import type { SocialNetwork } from "@/lib/social"; import type { PromoCategoryGroup } from "@/lib/promo-categories"; @@ -20,11 +21,14 @@ const NETWORK_LABELS: Record = { export function MemberSpaceForm({ memberName, + memberLogoUrl, categoryGroups, defaultCategory, networks = [], }: { memberName: string; + /** Logo de l'adhérent, affiché dans l'angle de l'aperçu comme sur le site. */ + memberLogoUrl?: string | null; /** Types de produits / services, groupés pour le `