use crate::components::websocket::WebSocketContext; use leptos::{ev, prelude::*}; use leptos_use::core::ConnectionReadyState; use lib::*; use serde_json::to_string; use std::collections::HashSet; use thaw::*; #[component] pub fn CreateGame() -> impl IntoView { // Websocket stuff let websocket = expect_context::(); let (websocket_send, set_websocket_send) = signal("".to_string()); let connected = move || websocket.ready_state.get() == ConnectionReadyState::Open; let tx = websocket.clone(); Effect::new(move |_| { if websocket_send() != "".to_string() { tx.send(&websocket_send()); } }); // New game stuff let card_packs = expect_context::>(); let show_packs = RwSignal::new(false); let selected_packs = RwSignal::>::new(HashSet::new()); Effect::new(move |_| { selected_packs.update(|packs| { for pack in card_packs().official_meta { packs.insert(pack.pack); } for pack in card_packs().unofficial_meta { packs.insert(pack.pack); } }) }); let input_game_name = RwSignal::new(String::new()); let toggle_show_packs = move |_| show_packs.set(!show_packs()); let nav_context = expect_context::>(); let request_new_game = move |_| { set_websocket_send( to_string(&NewGameRequest { name: input_game_name(), packs: selected_packs(), }) .unwrap(), ); input_game_name.set(String::new()); nav_context.set("game".to_string()); }; view! {

"Create Game"

"Disconnected."

}>

"Packs"

"All 205 card packs are enabled by default"

Official

{move || { card_packs() .official_meta .into_iter() .map(|n| { view! {
} }) .collect_view() }}

Unofficial

{move || { card_packs() .unofficial_meta .into_iter() .map(|n| { view! {
} }) .collect_view() }}
} }