diff --git a/dotcom-rendering/src/components/DecideContainer.tsx b/dotcom-rendering/src/components/DecideContainer.tsx index 04bb36f3d0f..bf5a0dc8349 100644 --- a/dotcom-rendering/src/components/DecideContainer.tsx +++ b/dotcom-rendering/src/components/DecideContainer.tsx @@ -48,6 +48,7 @@ type Props = { frontId?: string; collectionId: number; containerLevel?: DCRContainerLevel; + isInOpinionNoAvatarVariant?: boolean; }; export const DecideContainer = ({ @@ -63,6 +64,7 @@ export const DecideContainer = ({ frontId, collectionId, containerLevel, + isInOpinionNoAvatarVariant, }: Props) => { switch (containerType) { case 'dynamic/fast': @@ -268,6 +270,7 @@ export const DecideContainer = ({ aspectRatio={aspectRatio} containerLevel={containerLevel} collectionId={collectionId} + isInOpinionNoAvatarVariant={isInOpinionNoAvatarVariant} /> ); case 'scrollable/small': @@ -297,6 +300,7 @@ export const DecideContainer = ({ absoluteServerTimes={absoluteServerTimes} aspectRatio={aspectRatio} sectionId={sectionId} + isInOpinionNoAvatarVariant={isInOpinionNoAvatarVariant} /> ); diff --git a/dotcom-rendering/src/components/FlexibleGeneral.tsx b/dotcom-rendering/src/components/FlexibleGeneral.tsx index 17d133c34d9..66cb4498807 100644 --- a/dotcom-rendering/src/components/FlexibleGeneral.tsx +++ b/dotcom-rendering/src/components/FlexibleGeneral.tsx @@ -32,6 +32,7 @@ type Props = { aspectRatio: AspectRatio; containerLevel?: DCRContainerLevel; collectionId: number; + isInOpinionNoAvatarVariant?: boolean; }; type RowLayout = 'oneCardHalfWidth' | 'oneCardFullWidth' | 'twoCard'; @@ -580,6 +581,7 @@ export const FlexibleGeneral = ({ aspectRatio, containerLevel = 'Primary', collectionId, + isInOpinionNoAvatarVariant, }: Props) => { const splash = [...groupedTrails.splash].slice(0, 1).map((snap) => ({ ...snap, @@ -591,6 +593,9 @@ export const FlexibleGeneral = ({ .map((standard, i) => ({ ...standard, uniqueId: `collection-${collectionId}-standard-${i}`, + avatarUrl: isInOpinionNoAvatarVariant + ? undefined + : standard.avatarUrl, })); const groupedCards = decideCardPositions(cards); diff --git a/dotcom-rendering/src/components/ScrollableMedium.importable.tsx b/dotcom-rendering/src/components/ScrollableMedium.importable.tsx index 96c1a9e4399..f72e70836da 100644 --- a/dotcom-rendering/src/components/ScrollableMedium.importable.tsx +++ b/dotcom-rendering/src/components/ScrollableMedium.importable.tsx @@ -17,6 +17,7 @@ type Props = { containerType: DCRContainerType; aspectRatio: AspectRatio; sectionId: string; + isInOpinionNoAvatarVariant?: boolean; }; /** @@ -35,6 +36,7 @@ export const ScrollableMedium = ({ showAge, aspectRatio, sectionId, + isInOpinionNoAvatarVariant, }: Props) => { return ( { const { absoluteServerTimes = false } = front.config.switches; + /** + * We are running an AB test which replaces the avatar for the card image + * in the Opinion and More opinion collections on network fronts. + */ + const isInOpinionNoAvatarVariant = (collectionName: string) => + abTests.opinionNoAvatarVariant === 'variant' && + front.isNetworkFront && + (collectionName === 'Opinion' || collectionName === 'More opinion'); + const fallbackAspectRatio = (collectionType: DCRContainerType) => { switch (collectionType) { case 'scrollable/feature': @@ -634,6 +643,9 @@ export const FrontLayout = ({ front, NAV }: Props) => { sectionId={ophanName} collectionId={index + 1} containerLevel={collection.containerLevel} + isInOpinionNoAvatarVariant={isInOpinionNoAvatarVariant( + collection.displayName, + )} />