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 CreateGame() -> impl IntoView { // Websocket stuff let websocket = expect_context::(); let (websocket_send, set_websocket_send) = create_signal("".to_string()); let connected = move || websocket.ready_state.get() == ConnectionReadyState::Open; let tx = websocket.clone(); create_effect(move |_| { if websocket_send() != "".to_string() { tx.send(&websocket_send()); } }); // New game stuff let card_packs = expect_context::>(); let (show_packs, set_show_packs) = create_signal(false); let (selected_packs, set_selected_packs) = create_signal::>(BTreeSet::new()); create_effect(move |_| { set_selected_packs .update(|set| set.extend(card_packs().official_meta.iter().map(|pack| pack.pack))); }); create_effect(move |_| { set_selected_packs .update(|set| set.extend(card_packs().unofficial_meta.iter().map(|pack| pack.pack))); }); let new_game_name_ref = create_node_ref::(); let toggle_show_packs = move |_| set_show_packs(!show_packs()); let request_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.

}>

Create Game

Packs

// //

"All 205 card packs are enabled by default"

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() }}
} }