in common/app/services/IndexPage.scala [58:188]
def makeFront(indexPage: IndexPage, edition: Edition)(implicit context: ApplicationContext): Front = {
val isCartoonPage = indexPage.isTagWithId("type/cartoon")
val isReviewPage = indexPage.isTagWithId("tone/reviews")
val isSlow = SlowOrFastByTrails.isSlow(indexPage.trails.map(_.trail))
@tailrec
def containerDefinition(
groupings: Seq[IndexPageGrouping],
mpuState: MpuState,
accumulation: Vector[((ContainerDisplayConfig, CollectionEssentials), Container)] = Vector.empty,
): Seq[((ContainerDisplayConfig, CollectionEssentials), Container)] = {
groupings.toList match {
case Nil => accumulation
case grouping :: remainingGroupings =>
val collection = CollectionEssentials.fromFaciaContent(
grouping.items.flatMap { item =>
indexPage.contents.find(_.item.metadata.id == item.metadata.id).map(_.faciaItem)
},
)
val mpuContainer = (if (isSlow)
slowContainerWithMpu(grouping.items.length)
else
fastContainerWithMpu(grouping.items.length)).filter(const(!mpuState.injected))
val (container, newMpuState) = mpuContainer map { mpuContainer =>
(mpuContainer, mpuState.copy(injected = true))
} getOrElse {
val definition = if (isSlow) {
ContainerDefinition.slowForNumberOfItems(grouping.items.length)
} else {
ContainerDefinition.fastForNumberOfItems(grouping.items.length)
}
(definition, mpuState)
}
val containerConfig = ContainerDisplayConfig(
CollectionConfigWithId(
grouping.dateHeadline.displayString,
CollectionConfig.empty.copy(
displayName = Some(grouping.dateHeadline.displayString),
),
),
showSeriesAndBlogKickers = true,
)
containerDefinition(
remainingGroupings,
newMpuState,
accumulation :+ ((containerConfig, collection), Fixed(container)),
)
}
}
val grouped =
if (isSlow || indexPage.forcesDayView)
IndexPageGrouping.byDay(indexPage.trails, edition.timezone)
else
IndexPageGrouping.fromContent(indexPage.trails, edition.timezone)
val front = Front.fromConfigsAndContainers(
containerDefinition(grouped.toList, MpuState(injected = false)),
ContainerLayoutContext(
Set.empty,
hideCutOuts = indexPage.tags.isContributorPage,
),
)
val headers = grouped.map(_.dateHeadline).zipWithIndex map { case (headline, index) =>
if (index == 0) {
indexPage.page match {
case tag: Tag => FaciaContainerHeader.fromTagPage(tag, headline)
case section: Section => FaciaContainerHeader.fromSection(section, headline)
case page: Page => FaciaContainerHeader.fromPage(page, headline)
case _ =>
// should never happen
LoneDateHeadline(headline)
}
} else {
LoneDateHeadline(headline)
}
}
front.copy(containers =
front.containers
.zip(headers)
.map({ case (container, header) =>
val timeStampDisplay = header match {
case MetaDataHeader(_, _, _, dateHeadline, _) => Some(cardTimestampDisplay(dateHeadline))
case LoneDateHeadline(dateHeadline) => Some(cardTimestampDisplay(dateHeadline))
case DescriptionMetaHeader(_) => None
}
container
.copy(
customHeader = Some(header),
customClasses = Some(
Seq(
Some("fc-container--tag"),
if (
container.index == 0 &&
indexPage.isFootballTeam &&
Switches.FixturesAndResultsContainerSwitch.isSwitchedOn
) Some("js-insert-team-stats-after")
else None,
).flatten,
),
hideToggle = true,
showTimestamps = true,
useShowMore = false,
dateLinkPath = Some(s"/${indexPage.idWithoutEdition}"),
)
.transformCards({ card =>
card
.copy(
timeStampDisplay = timeStampDisplay,
byline = if (indexPage.tags.isContributorPage) None else card.byline,
useShortByline = true,
)
.setKicker(card.header.kicker flatMap {
case ReviewKicker if isReviewPage => None
case CartoonKicker if isCartoonPage => None
case TagKicker(_, _, _, id) if indexPage.isTagWithId(id) => None
case otherKicker => Some(otherKicker)
})
})
}),
)
}