From 7e488b7e62fe55a8ea2ae930e937771c281f1ad5 Mon Sep 17 00:00:00 2001 From: efim Date: Sat, 22 Apr 2023 01:03:04 +0400 Subject: [PATCH] table - make my own vote visible adding overall app state, "my player id" with intent to feed in data from auth methods, and read in other parts, for example visibility of sections don't quite sure that's the intended way --- .../industries/sunshine/planningpoker/Models.scala | 5 ++--- .../{LiveChart.scala => PlanningPokerUrgh.scala} | 12 ++++++++---- .../sunshine/planningpoker/TableView.scala | 11 +++++++---- 3 files changed, 17 insertions(+), 11 deletions(-) rename src/main/scala/industries/sunshine/planningpoker/{LiveChart.scala => PlanningPokerUrgh.scala} (73%) diff --git a/src/main/scala/industries/sunshine/planningpoker/Models.scala b/src/main/scala/industries/sunshine/planningpoker/Models.scala index c3f074a..d063552 100644 --- a/src/main/scala/industries/sunshine/planningpoker/Models.scala +++ b/src/main/scala/industries/sunshine/planningpoker/Models.scala @@ -23,19 +23,18 @@ final case class RoomStateView( } object RoomStateView { + val me = Player("wormy", PlayerID()) val testRoom = { - val me = Player("wormy", PlayerID()) val pony = Player("pony", PlayerID()) RoomStateView( players = List(me, Player("birdy", PlayerID()), pony), me = me.id, allowedCards = List("xs", "s", "m", "l", "xl"), - round = VotingRound(myCard = Some("l"), alreadyVoted = List(me, pony)), + round = VotingRound(myCard = Some("s"), alreadyVoted = List(me, pony)), canCloseRound = true ) } val testOpenedRoom = { - val me = Player("wormy", PlayerID()) val pony = Player("pony", PlayerID()) val birdy = Player("birdy", PlayerID()) val horsey = Player("horsey", PlayerID()) diff --git a/src/main/scala/industries/sunshine/planningpoker/LiveChart.scala b/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala similarity index 73% rename from src/main/scala/industries/sunshine/planningpoker/LiveChart.scala rename to src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala index e6b2821..800d1d5 100644 --- a/src/main/scala/industries/sunshine/planningpoker/LiveChart.scala +++ b/src/main/scala/industries/sunshine/planningpoker/PlanningPokerUrgh.scala @@ -11,20 +11,24 @@ import org.scalajs.dom val javascriptLogo: String = js.native @main -def LiveChart(): Unit = +def PlanningPokerUrgh(): Unit = renderOnDomContentLoaded( dom.document.getElementById("app"), Main.appElement() ) object Main { - val bgColor = "bg-green-200" + final case class AppState( + myId: Option[PlayerID] + ) + // TODO is this ok for state creation? link with auth component and use in another? + val appStateSignal = Var(AppState(Some(RoomStateView.me.id))).signal + def appElement(): Element = { div( className := "w-screen h-screen flex flex-col justify-center items-center", div( - className := "h-24 w-full flex flex-for justify-center items-center", - className := bgColor, + className := "h-24 w-full flex flex-for justify-center items-center bg-green-200", p(className := "text-2xl", "Here be header"), ), RoomView.renderRoom(RoomStateView.testRoom) diff --git a/src/main/scala/industries/sunshine/planningpoker/TableView.scala b/src/main/scala/industries/sunshine/planningpoker/TableView.scala index dc535c3..b5d0b92 100644 --- a/src/main/scala/industries/sunshine/planningpoker/TableView.scala +++ b/src/main/scala/industries/sunshine/planningpoker/TableView.scala @@ -12,9 +12,9 @@ object TableView { // so, it's more efficient to share an observable, than to create multiple copies... def renderTable(roundSignal: Signal[RoomStateView]): Element = { val playerIdToCardTypeSignal = - roundSignal.map(state => + roundSignal.combineWith(Main.appStateSignal.map(_.myId)).map((state, myIdOpt) => state.players.map(p => - p.id -> getPlayerCardType(p.id, state.round, p.name) + p.id -> getPlayerCardType(p.id, state.round, p.name, myIdOpt) ) ) @@ -35,11 +35,14 @@ object TableView { def getPlayerCardType( id: PlayerID, state: RoundState, - name: String + name: String, + myId: Option[PlayerID] ): CardState = { state match { case isOpen: VotingRound => - isOpen.alreadyVoted.find(_.id == id).fold(NoCard(name))(_ => CardBack) + if (myId.forall(_ == id)) { + isOpen.myCard.fold(NoCard(name))(vote => Open(vote)) + } else isOpen.alreadyVoted.find(_.id == id).fold(NoCard(name))(_ => CardBack) case isClosed: ViewingRound => isClosed.votes .get(id)