@@ -4,7 +4,11 @@ import type { ComponentEvent } from '@guardian/ophan-tracker-js';
44import { useEffect , useState } from 'react' ;
55import { submitComponentEvent } from '../client/ophan/ophan' ;
66import { ArticleDesign , type ArticleFormat } from '../lib/articleFormat' ;
7- import { decideTrail , dedupeTrail } from '../lib/decideTrail' ;
7+ import {
8+ decideTrail ,
9+ decideTrailWithMasterImage ,
10+ dedupeTrail ,
11+ } from '../lib/decideTrail' ;
812import { useApi } from '../lib/useApi' ;
913import { addDiscussionIds } from '../lib/useCommentCount' ;
1014import { useIsInView } from '../lib/useIsInView' ;
@@ -14,6 +18,7 @@ import type { RenderingTarget } from '../types/renderingTarget';
1418import type { FETrailType , TrailType } from '../types/trails' ;
1519import { Carousel } from './Carousel.importable' ;
1620import { Placeholder } from './Placeholder' ;
21+ import { ScrollableSmallOnwards } from './ScrollableSmallOnwards' ;
1722
1823type Props = {
1924 url : string ;
@@ -35,8 +40,8 @@ type OnwardsResponse = {
3540 description : string ;
3641} ;
3742
38- const minHeight = css `
39- min-height : 300px ;
43+ const minHeight = ( design : ArticleDesign ) => css `
44+ min-height : ${ design === ArticleDesign . Gallery ? '250px' : ' 300px' } ;
4045` ;
4146
4247const isTrailPaidContent = ( trailType : FETrailType ) =>
@@ -47,12 +52,13 @@ const buildTrails = (
4752 trailLimit : number ,
4853 isAdFreeUser : boolean ,
4954 webURL : string ,
55+ withMasterImage : boolean ,
5056) : TrailType [ ] => {
5157 return trails
5258 . filter ( ( trailType ) => ! ( isTrailPaidContent ( trailType ) && isAdFreeUser ) )
5359 . filter ( ( trailType ) => dedupeTrail ( trailType , webURL ) )
5460 . slice ( 0 , trailLimit )
55- . map ( decideTrail ) ;
61+ . map ( withMasterImage ? decideTrailWithMasterImage : decideTrail ) ;
5662} ;
5763
5864export const FetchOnwardsData = ( {
@@ -117,26 +123,38 @@ export const FetchOnwardsData = ({
117123 . filter ( isNonNullable ) ,
118124 ) ;
119125
120- const trails = buildTrails ( data . trails , limit , isAdFreeUser , webURL ) ;
126+ const trails = ( { withMasterImage } : { withMasterImage : boolean } ) =>
127+ buildTrails ( data . trails , limit , isAdFreeUser , webURL , withMasterImage ) ;
121128
122129 return (
123- < div ref = { setIsInViewRef } css = { minHeight } >
124- < Carousel
125- heading = { data . heading || data . displayname } // Sometimes the api returns heading as 'displayName'
126- trails = { trails }
127- description = { data . description }
128- onwardsSource = { onwardsSource }
129- format = { format }
130- leftColSize = {
131- format . design === ArticleDesign . LiveBlog ||
132- format . design === ArticleDesign . DeadBlog
133- ? 'wide'
134- : 'compact'
135- }
136- discussionApiUrl = { discussionApiUrl }
137- serverTime = { serverTime }
138- renderingTarget = { renderingTarget }
139- />
130+ < div id = "marjan" ref = { setIsInViewRef } css = { minHeight ( format . design ) } >
131+ { format . design === ArticleDesign . Gallery ? (
132+ < ScrollableSmallOnwards
133+ serverTime = { serverTime }
134+ trails = { trails ( { withMasterImage : true } ) }
135+ discussionApiUrl = { discussionApiUrl }
136+ heading = { data . heading || data . displayname }
137+ onwardsSource = { onwardsSource }
138+ format = { format }
139+ />
140+ ) : (
141+ < Carousel
142+ heading = { data . heading || data . displayname } // Sometimes the api returns heading as 'displayName'
143+ trails = { trails ( { withMasterImage : false } ) }
144+ description = { data . description }
145+ onwardsSource = { onwardsSource }
146+ format = { format }
147+ leftColSize = {
148+ format . design === ArticleDesign . LiveBlog ||
149+ format . design === ArticleDesign . DeadBlog
150+ ? 'wide'
151+ : 'compact'
152+ }
153+ discussionApiUrl = { discussionApiUrl }
154+ serverTime = { serverTime }
155+ renderingTarget = { renderingTarget }
156+ />
157+ ) }
140158 </ div >
141159 ) ;
142160} ;
0 commit comments