Skip to content

Commit 4d135d6

Browse files
committed
add lightbox to gallery main media
1 parent e2427cc commit 4d135d6

File tree

3 files changed

+47
-11
lines changed

3 files changed

+47
-11
lines changed

dotcom-rendering/src/components/MainMediaGallery.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const Default = {
2222
display: ArticleDisplay.Standard,
2323
theme: Pillar.News,
2424
},
25+
renderingTarget: 'Web',
2526
},
2627
} satisfies Story;
2728

dotcom-rendering/src/components/MainMediaGallery.tsx

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import { css } from '@emotion/react';
2+
import { isUndefined } from '@guardian/libs';
23
import { from } from '@guardian/source/foundations';
34
import { grid } from '../grid';
45
import { type ArticleFormat } from '../lib/articleFormat';
56
import { getImage } from '../lib/image';
67
import { type ImageBlockElement } from '../types/content';
8+
import { type RenderingTarget } from '../types/renderingTarget';
9+
import { AppsLightboxImage } from './AppsLightboxImage.importable';
10+
import { Island } from './Island';
11+
import { LightboxLink } from './LightboxLink';
712
import { Picture } from './Picture';
813

914
type Props = {
1015
mainMedia: ImageBlockElement;
1116
format: ArticleFormat;
17+
renderingTarget: RenderingTarget;
1218
};
1319

1420
const styles = css`
@@ -20,7 +26,11 @@ const styles = css`
2026
}
2127
`;
2228

23-
export const MainMediaGallery = ({ mainMedia, format }: Props) => {
29+
export const MainMediaGallery = ({
30+
mainMedia,
31+
format,
32+
renderingTarget,
33+
}: Props) => {
2434
const asset = getImage(mainMedia.media.allImages);
2535

2636
if (asset === undefined) {
@@ -36,16 +46,40 @@ export const MainMediaGallery = ({ mainMedia, format }: Props) => {
3646

3747
return (
3848
<figure css={styles}>
39-
<Picture
40-
alt={mainMedia.data.alt ?? ''}
41-
format={format}
42-
role={mainMedia.role}
43-
master={asset.url}
44-
width={width}
45-
height={height}
46-
loading="eager"
47-
isMainMedia={true}
48-
/>
49+
{renderingTarget === 'Apps' ? (
50+
<Island priority="critical">
51+
<AppsLightboxImage
52+
elementId={mainMedia.elementId}
53+
role={mainMedia.role}
54+
format={format}
55+
master={asset.url}
56+
alt={mainMedia.data.alt ?? ''}
57+
width={width}
58+
height={height}
59+
loading={'lazy'}
60+
/>
61+
</Island>
62+
) : (
63+
<Picture
64+
alt={mainMedia.data.alt ?? ''}
65+
format={format}
66+
role={mainMedia.role}
67+
master={asset.url}
68+
width={width}
69+
height={height}
70+
loading="eager"
71+
isMainMedia={true}
72+
/>
73+
)}
74+
{renderingTarget === 'Web' && !isUndefined(mainMedia.position) && (
75+
<LightboxLink
76+
role={mainMedia.role}
77+
format={format}
78+
elementId={mainMedia.elementId}
79+
isMainMedia={false}
80+
position={mainMedia.position}
81+
/>
82+
)}
4983
</figure>
5084
);
5185
};

dotcom-rendering/src/layouts/GalleryLayout.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ export const GalleryLayout = (props: WebProps | AppProps) => {
210210
<MainMediaGallery
211211
mainMedia={gallery.mainMedia}
212212
format={format}
213+
renderingTarget={props.renderingTarget}
213214
/>
214215
<ArticleTitle
215216
format={format}

0 commit comments

Comments
 (0)