use crate::components::websocket::WebSocketContext; use leptos::*; use lib::*; use serde_json::to_string; #[component] pub fn Game() -> impl IntoView { let websocket = expect_context::(); let game_meta = expect_context::>>(); let (game_id, set_game_id) = create_signal("".to_string()); let (game_name, set_game_name) = create_signal("".to_string()); let (game_host, set_game_host) = create_signal("".to_string()); let (game_players, set_game_players) = create_signal(vec![]); let (game_czar, set_game_czar) = create_signal("".to_string()); let (game_black, set_game_black) = create_signal(("".to_string(), 0u8)); let (game_white, set_game_white) = create_signal(vec![]); let (selected_card, set_selected_card) = create_signal("".to_string()); create_effect(move |_| { if let Some(game) = game_meta() { set_game_id(game.uuid.clone()); set_game_name(game.name.clone()); set_game_host(game.host.clone()); set_game_players(game.players.clone()); set_game_czar(game.czar.clone()); set_game_black(game.black.clone()); set_game_white(game.white.clone()); } }); create_effect(move |_| { logging::log!("{:#?}", selected_card()); websocket.send( &to_string(&PlayerMoveRequest { game_id: game_id(), card_id: selected_card(), }) .unwrap(), ) }); view! {

Game

Name: {move || game_name()}

Host: {move || game_host()}

Czar: {move || game_czar()}

Players:

    {move || { game_players() .iter() .map(|player| view! {
  • {player}
  • }) .collect_view() }}

{move || game_black().0}

Pick: {move || game_black().1}

{move || { game_white() .iter() .map(|card| { view! {

{&card.text}

} }) .collect_view() }}
} }