diff --git a/app/controllers/StoriesVisibleController.scala b/app/controllers/StoriesVisibleController.scala index ddb9ed972b..7054df9206 100644 --- a/app/controllers/StoriesVisibleController.scala +++ b/app/controllers/StoriesVisibleController.scala @@ -22,7 +22,11 @@ class StoriesVisibleController( def storiesVisible(containerType: String) = AccessAPIAuthAction(parse.json[StoriesVisibleRequest]) { implicit request => val storiesVisible = - containerService.getStoriesVisible(containerType, request.body.stories) + containerService.getStoriesVisible( + containerType, + request.body.stories, + collectionConfigJson = None + ) logger.info( s"got stories-visible=$storiesVisible for containerType=$containerType" diff --git a/app/services/CollectionService.scala b/app/services/CollectionService.scala index 31c19c7335..73e96d6435 100644 --- a/app/services/CollectionService.scala +++ b/app/services/CollectionService.scala @@ -99,15 +99,19 @@ object CollectionService { ): Option[StoriesVisibleByStage] = { val stages = CollectionService.getStoriesForCollectionStages(collectionId, collection) - config.collections.get(collectionId).flatMap(_.`type`) match { - case Some(cType) => - Some( - StoriesVisibleByStage( - containerService.getStoriesVisible(cType, stages._1), - containerService.getStoriesVisible(cType, stages._2) - ) + for { + cConfigJson <- config.collections.get(collectionId) + cType <- cConfigJson.`type` + } yield { + StoriesVisibleByStage( + containerService + .getStoriesVisible(cType, stages._1, Some(cConfigJson)), + containerService.getStoriesVisible( + cType, + stages._2, + Some(cConfigJson) ) - case None => None + ) } } diff --git a/app/services/ContainerService.scala b/app/services/ContainerService.scala index af75b90e44..41d3f67484 100644 --- a/app/services/ContainerService.scala +++ b/app/services/ContainerService.scala @@ -2,6 +2,7 @@ package services import play.api.libs.json.{Json, OFormat} import slices._ +import com.gu.facia.client.models.CollectionConfigJson case class StoriesVisibleResponse( desktop: Option[Int], @@ -14,7 +15,11 @@ object StoriesVisibleResponse { } class ContainerService(val containers: Containers) { - def getStoriesVisible(containerType: String, stories: Seq[Story]) = { + def getStoriesVisible( + containerType: String, + stories: Seq[Story], + collectionConfigJson: Option[CollectionConfigJson] + ) = { val numberOfStories = stories.length containers.all.get(containerType) map { case Fixed(container) => @@ -48,7 +53,10 @@ class ContainerService(val containers: Containers) { ) case Flexible(container) => - val numberVisible = container.storiesVisible(stories) + val numberVisible = container.storiesVisible( + stories, + collectionConfigJson + ) StoriesVisibleResponse( Some(numberVisible), Some(numberVisible) diff --git a/app/slices/FlexibleContainer.scala b/app/slices/FlexibleContainer.scala index 8a41a2e677..292e5c1c4e 100644 --- a/app/slices/FlexibleContainer.scala +++ b/app/slices/FlexibleContainer.scala @@ -1,24 +1,30 @@ package slices +import com.gu.facia.client.models.CollectionConfigJson trait FlexibleContainer { - def storiesVisible(stories: Seq[Story]): Int + def storiesVisible( + stories: Seq[Story], + collectionConfigJson: Option[CollectionConfigJson] + ): Int } object FlexibleGeneral extends FlexibleContainer { - def storiesVisible(stories: Seq[Story]): Int = { - val byGroup = Story.segmentByGroup(stories) - val splash = byGroup.getOrElse(3, Seq.empty) ++ - byGroup.getOrElse(2, Seq.empty) ++ - byGroup.getOrElse(1, Seq.empty) - val numOfSplash = splash.size min 1 - val numOfStandard = stories.size - numOfSplash - - numOfSplash + (numOfStandard min 8) + def storiesVisible( + stories: Seq[Story], + collectionConfigJson: Option[CollectionConfigJson] + ): Int = { + collectionConfigJson + .flatMap(_.displayHints) + .flatMap(_.maxItemsToDisplay) + .getOrElse(9) } } object FlexibleSpecial extends FlexibleContainer { - def storiesVisible(stories: Seq[Story]): Int = { + def storiesVisible( + stories: Seq[Story], + collectionConfigJson: Option[CollectionConfigJson] + ): Int = { val byGroup = Story.segmentByGroup(stories) val snap = byGroup.getOrElse(3, Seq.empty) ++ byGroup.getOrElse(2, Seq.empty) ++ diff --git a/public/src/js/widgets/columns/fronts-config.html b/public/src/js/widgets/columns/fronts-config.html index 201f47d7b1..c938cbec47 100644 --- a/public/src/js/widgets/columns/fronts-config.html +++ b/public/src/js/widgets/columns/fronts-config.html @@ -258,6 +258,12 @@ + + + + + +