1
1
import { css } from '@emotion/react' ;
2
+ import { isUndefined } from '@guardian/libs' ;
2
3
import { from } from '@guardian/source/foundations' ;
3
4
import { grid } from '../grid' ;
4
5
import { type ArticleFormat } from '../lib/articleFormat' ;
5
6
import { getImage } from '../lib/image' ;
6
7
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' ;
7
12
import { Picture } from './Picture' ;
8
13
9
14
type Props = {
10
15
mainMedia : ImageBlockElement ;
11
16
format : ArticleFormat ;
17
+ renderingTarget : RenderingTarget ;
12
18
} ;
13
19
14
20
const styles = css `
@@ -20,7 +26,11 @@ const styles = css`
20
26
}
21
27
` ;
22
28
23
- export const MainMediaGallery = ( { mainMedia, format } : Props ) => {
29
+ export const MainMediaGallery = ( {
30
+ mainMedia,
31
+ format,
32
+ renderingTarget,
33
+ } : Props ) => {
24
34
const asset = getImage ( mainMedia . media . allImages ) ;
25
35
26
36
if ( asset === undefined ) {
@@ -36,16 +46,40 @@ export const MainMediaGallery = ({ mainMedia, format }: Props) => {
36
46
37
47
return (
38
48
< 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
+ ) }
49
83
</ figure >
50
84
) ;
51
85
} ;
0 commit comments