in app/story_packages/model/frontsapi.scala [82:109]
private def updateList(update: UpdateList, identity: User, blocks: List[Trail]): List[Trail] = {
val trail: Trail = blocks
.find(_.id == update.item)
.map { currentTrail =>
val newMeta = for (updateMeta <- update.itemMeta) yield updateMeta
currentTrail.copy(meta = newMeta)
}
.getOrElse(Trail(update.item, DateTime.now.getMillis, Some(getUserName(identity)), update.itemMeta))
val listWithoutItem = blocks.filterNot(_.id == update.item)
val splitList: (List[Trail], List[Trail]) = {
//Different index logic if item is being place at itself in list
//(Eg for metadata update, or group change, index must come from list without item removed)
if (update.position.exists(_ == update.item)) {
val index = blocks.indexWhere(_.id == update.item)
listWithoutItem.splitAt(index)
}
else {
val index = update.after.filter {_ == true}
.map {_ => listWithoutItem.indexWhere(t => update.position.exists(_ == t.id)) + 1}
.getOrElse { listWithoutItem.indexWhere(t => update.position.exists(_ == t.id)) }
listWithoutItem.splitAt(index)
}
}
splitList._1 ::: (trail +: splitList._2)
}