use crate::components::websocket::WebSocketContext; use leptos::html::Input; use leptos::*; use leptos_use::core::ConnectionReadyState; use lib::*; use serde_json::to_string; use std::collections::BTreeSet; #[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) = create_signal("".to_string()); create_effect(move |_| { tx.send(&websocket_send()); }); // Browser stuff let game_browser_context = expect_context::>>(); let (join_id, set_join_id) = create_signal("".to_string()); let (delete_id, set_delete_id) = create_signal("".to_string()); create_effect(move |_| { set_websocket_send(to_string(&GameJoinRequest { id: join_id() }).unwrap()); }); create_effect(move |_| { set_websocket_send( to_string(&GameDeleteRequest { delete_game_id: delete_id(), }) .unwrap(), ); }); // New game stuff let card_packs = expect_context::>(); let new_game_name_ref = create_node_ref::(); let (show_packs, set_show_packs) = create_signal(false); let show_packs_button = move |_| set_show_packs(!show_packs()); let (selected_packs, set_selected_packs) = create_signal::>(BTreeSet::new()); let new_game = move |_| { if let Some(input) = new_game_name_ref.get() { if input.value() == *"" { logging::log!("New game name is empty!"); } else if selected_packs().is_empty() { logging::log!("New game selected packs is empty!"); } else { set_websocket_send( to_string(&NewGameRequest { name: input.value(), packs: selected_packs().into_iter().collect::>(), }) .unwrap(), ); input.set_value(""); } } }; view! {
Disconnected.

}>

Game Browser

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

} } />
Name Host Players Card Packs
{&game.name} {&game.host} {&game.players.to_string()} {&game.packs.len().to_string()}

Create Game

Packs

"click custom at least once for the new game button to work. there are worse problems right now (sorry (kinda))"

Official

{move || { card_packs() .official_meta .into_iter() .map(|n| { view! {
// hax {set_selected_packs .update(|packs| { packs.insert(n.pack); })} } }) .collect_view() }}

Unofficial

{move || { card_packs() .unofficial_meta .into_iter() .map(|n| { view! {
// hax {set_selected_packs .update(|packs| { packs.insert(n.pack); })} } }) .collect_view() }}
} }