use crate::components::websocket::WebSocketContext; use leptos::prelude::*; use leptos_use::core::ConnectionReadyState; use lib::*; use serde_json::to_string; #[component] pub fn Browser() -> impl IntoView { // Websocket stuff let websocket = expect_context::(); let connected = move || websocket.ready_state.get() == ConnectionReadyState::Open; let tx = websocket.clone(); let (websocket_send, set_websocket_send) = signal("".to_string()); Effect::new(move |_| { if websocket_send() != "".to_string() { tx.send(&websocket_send()); } }); // Browser stuff let game_browser_context = expect_context::>>(); let (join_id, set_join_id) = signal("".to_string()); let (delete_id, set_delete_id) = signal("".to_string()); Effect::new(move |_| { set_websocket_send(to_string(&GameJoinRequest { id: join_id() }).unwrap()); }); Effect::new(move |_| { set_websocket_send( to_string(&GameDeleteRequest { delete_game_id: delete_id(), }) .unwrap(), ); }); view! {

Game Browser

"Disconnected."

}> 0 } fallback=|| { view! { "No games to show right now.. Maybe you should create one!" } } >

"Yes, the delete button works. Please don't abuse it."

// This rebuilds the entire browser each time it runs but using won't update the children if the id doesn't change {game_browser_context() .iter() .cloned() .map(|game| { view! { } }) .collect_view()}
Name Host Players Card Packs
{game.name} {game.host} {game.players} {game.packs.len()}
} }