Skip to content

Commit 2cb3fcc

Browse files
committed
Use new variant on lightbox
1 parent 99d3ecb commit 2cb3fcc

File tree

6 files changed

+57
-15
lines changed

6 files changed

+57
-15
lines changed

dotcom-rendering/src/components/ArticlePage.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ export const ArticlePage = (props: WebProps | AppProps) => {
7878
<Lightbox
7979
format={format}
8080
switches={frontendData.config.switches}
81+
isInStarRatingVariant={
82+
frontendData.config.abTests.starRatingRedesignVariant ===
83+
'variant'
84+
}
8185
{...(renderingTarget === 'Web'
8286
? {
8387
lightboxImages: frontendData.imagesForLightbox,

dotcom-rendering/src/components/Lightbox.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ interface BaseProps {
1212
format: ArticleFormat;
1313
renderingTarget: RenderingTarget;
1414
switches: Switches;
15+
isInStarRatingVariant?: boolean;
1516
}
1617

1718
interface WebProps extends BaseProps {
@@ -29,6 +30,7 @@ export const Lightbox = ({
2930
lightboxImages,
3031
renderingTarget,
3132
switches,
33+
isInStarRatingVariant,
3234
}: WebProps | AppProps) => {
3335
switch (renderingTarget) {
3436
case 'Web':
@@ -46,6 +48,7 @@ export const Lightbox = ({
4648
<LightboxLayout
4749
format={format}
4850
images={lightboxImages}
51+
isInStarRatingVariant={isInStarRatingVariant}
4952
/>
5053
</Island>
5154
<Island priority="feature" defer={{ until: 'idle' }}>

dotcom-rendering/src/components/LightboxImages.tsx

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@ import {
1010
visuallyHidden,
1111
} from '@guardian/source/foundations';
1212
import { Hide, Link } from '@guardian/source/react-components';
13-
import { StarRating } from '@guardian/source-development-kitchen/react-components';
13+
import { StarRating as SourceStarRating } from '@guardian/source-development-kitchen/react-components';
1414
import { useEffect, useState } from 'react';
1515
import type { ArticleFormat } from '../lib/articleFormat';
1616
import type { ImageForLightbox } from '../types/content';
1717
import { LightboxCaption } from './LightboxCaption';
1818
import { LightboxLoader } from './LightboxLoader';
1919
import { Picture } from './Picture';
20+
import { StarRating } from './StarRating/StarRating';
2021

2122
type Props = {
2223
format: ArticleFormat;
2324
images: ImageForLightbox[];
25+
isInStarRatingVariant?: boolean;
2426
};
2527

2628
const liStyles = css`
@@ -46,7 +48,7 @@ const imageStyles = (orientation: 'landscape' | 'portrait') => {
4648
case 'portrait': {
4749
return css`
4850
img {
49-
${baseImgStyles}
51+
${baseImgStyles};
5052
width: auto;
5153
max-width: 100%;
5254
height: 100vh;
@@ -60,7 +62,7 @@ const imageStyles = (orientation: 'landscape' | 'portrait') => {
6062
default: {
6163
return css`
6264
img {
63-
${baseImgStyles}
65+
${baseImgStyles};
6466
width: 100%;
6567
height: auto;
6668
max-height: 100vh;
@@ -128,6 +130,12 @@ const figureStyles = css`
128130
}
129131
`;
130132

133+
const starRatingMarginStyles = css`
134+
margin-bottom: ${space[2]}px;
135+
${from.tablet} {
136+
margin-bottom: ${space[3]}px;
137+
}
138+
`;
131139
const Selection = ({
132140
countOfImages,
133141
initialPosition = 1,
@@ -173,7 +181,11 @@ const Selection = ({
173181
);
174182
};
175183

176-
export const LightboxImages = ({ format, images }: Props) => {
184+
export const LightboxImages = ({
185+
format,
186+
images,
187+
isInStarRatingVariant,
188+
}: Props) => {
177189
const [loaded, setLoaded] = useState(new Set<number>());
178190

179191
useEffect(() => {
@@ -231,7 +243,7 @@ export const LightboxImages = ({ format, images }: Props) => {
231243
<h2
232244
css={css`
233245
width: 100%;
234-
${headlineLight24}
246+
${headlineLight24};
235247
color: ${palette.neutral[100]};
236248
margin-bottom: ${space[1]}px;
237249
${from.tablet} {
@@ -243,9 +255,16 @@ export const LightboxImages = ({ format, images }: Props) => {
243255
</h2>
244256
)}
245257

246-
{
247-
/* TODO : Remove this star rating once the starRatingVariant testing is complete and new designs are merged (eta Jan 2026)*/
248-
typeof image.starRating === 'number' && (
258+
{!isUndefined(image.starRating) &&
259+
(isInStarRatingVariant ? (
260+
<div css={starRatingMarginStyles}>
261+
<StarRating
262+
size="medium"
263+
rating={image.starRating}
264+
useAlternativeTheme={true}
265+
/>
266+
</div>
267+
) : (
249268
<div
250269
css={css`
251270
display: inline-block;
@@ -260,13 +279,13 @@ export const LightboxImages = ({ format, images }: Props) => {
260279
}
261280
`}
262281
>
263-
<StarRating
282+
<SourceStarRating
264283
size="medium"
265284
rating={image.starRating}
266285
/>
267286
</div>
268-
)
269-
}
287+
))}
288+
270289
<Hide from="tablet">
271290
<Selection
272291
countOfImages={images.length}

dotcom-rendering/src/components/LightboxJavascript.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,9 +554,11 @@ const ulStyles = css`
554554
export const LightboxJavascript = ({
555555
format,
556556
images,
557+
isInStarRatingVariant,
557558
}: {
558559
format: ArticleFormat;
559560
images: ImageForLightbox[];
561+
isInStarRatingVariant?: boolean;
560562
}) => {
561563
/**
562564
* Hydration has been requested so the first step is to render the list of images and put them into
@@ -588,7 +590,12 @@ export const LightboxJavascript = ({
588590
log('dotcom', '💡 Generating HTML for lightbox images...');
589591
return (
590592
<ul css={ulStyles} aria-label="All images">
591-
<LightboxImages format={format} images={images} />;
593+
<LightboxImages
594+
format={format}
595+
images={images}
596+
isInStarRatingVariant={isInStarRatingVariant}
597+
/>
598+
;
592599
</ul>
593600
);
594601
};

dotcom-rendering/src/components/LightboxLayout.importable.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { LightboxJavascript } from './LightboxJavascript';
2121
type Props = {
2222
format: ArticleFormat;
2323
images: ImageForLightbox[];
24+
isInStarRatingVariant?: boolean;
2425
};
2526

2627
const lightboxStyles = css`
@@ -196,7 +197,11 @@ const Selection = ({
196197
);
197198
};
198199

199-
export const LightboxLayout = ({ format, images }: Props) => {
200+
export const LightboxLayout = ({
201+
format,
202+
images,
203+
isInStarRatingVariant,
204+
}: Props) => {
200205
return (
201206
<>
202207
<Global
@@ -222,7 +227,11 @@ export const LightboxLayout = ({ format, images }: Props) => {
222227
hidden={true}
223228
>
224229
<div css={containerStyles}>
225-
<LightboxJavascript format={format} images={images} />
230+
<LightboxJavascript
231+
format={format}
232+
images={images}
233+
isInStarRatingVariant={isInStarRatingVariant}
234+
/>
226235
<nav css={navStyles}>
227236
<button
228237
type="button"

dotcom-rendering/src/types/content.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1002,7 +1002,7 @@ export type ImageForLightbox = {
10021002
caption?: string;
10031003
displayCredit?: boolean;
10041004
title?: string;
1005-
starRating?: number;
1005+
starRating?: StarRating;
10061006
/**
10071007
* Used for liveblog images to generate a link back to the
10081008
* original post where the image was used

0 commit comments

Comments
 (0)