Answer handling yay

This commit is contained in:
Lett Osprey 2026-04-13 20:49:57 +02:00
parent f3020b7cb0
commit 1a410072c2
9 changed files with 79 additions and 42 deletions

View file

@ -29,13 +29,24 @@ pub fn component() -> lustre.App(
pub opaque type Model {
Model(
state: Msg,
players: List(#(String, String)),
players: List(#(String, #(String, List(#(String, String))))),
player: Option(#(String, String)),
answers: List(#(String, #(String, String))),
handler: Started(Subject(NotifyServer)),
)
}
pub opaque type Msg {
Initial
PickedPlayer(player: Option(#(String, String)))
SharedMessage(message: NotifyClient)
ReceiveName(name: Option(String))
AcceptPlayer(accept: Option(#(String, String)))
PickQuestion
PickedQuestion(question: Option(#(String, String)))
GiveAnswer(question: #(String, String), answer: Option(String))
}
fn init(
start_args: #(List(#(String, String)), message.ClientsServer),
) -> #(Model, Effect(Msg)) {
@ -63,17 +74,6 @@ fn init(
)
}
pub opaque type Msg {
Initial
PickedPlayer(player: Option(#(String, String)))
SharedMessage(message: NotifyClient)
ReceiveName(name: Option(String))
AcceptPlayer(accept: Option(#(String, String)))
PickQuestion
PickedQuestion(question: Option(#(String, String)))
GiveAnswer(question: #(String, String), answer: Option(String))
}
fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) {
case msg {
Initial -> #(Model(..model, state: msg), effect.none())
@ -168,7 +168,14 @@ fn view(model: Model) -> Element(Msg) {
Initial ->
case model.players {
[] -> shared.input_new_player(ReceiveName)
_ -> shared.view_players(model.players, PickedPlayer)
_ ->
shared.view_players(
list.map(model.players, fn(player) {
let #(id, #(name, _)) = player
#(id, name)
}),
PickedPlayer,
)
}
PickQuestion -> view_questions(model.answers)
ReceiveName(_) -> shared.input_new_player(ReceiveName)

View file

@ -29,7 +29,7 @@ type State {
pub opaque type Model {
Model(
state: State,
players: List(#(String, String)),
players: List(#(String, #(String, List(#(String, String))))),
lobby: #(String, List(User)),
registry: GroupRegistry(NotifyClient),
handler: Started(Subject(NotifyServer)),
@ -137,7 +137,14 @@ fn view(model: Model) -> Element(Msg) {
AskName ->
case model.players {
[] -> input_new_player(ReceiveName)
_ -> view_players(model.players, AcceptName)
_ ->
view_players(
list.map(model.players, fn(player) {
let #(id, #(name, _)) = player
#(id, name)
}),
AcceptName,
)
}
NameOk(name) -> {
shared.confirm_cells(