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 @@
+
+
+
+
+
+