use crate::components::websocket::WebSocketContext; use html::Input; use leptos::*; use leptos_use::core::ConnectionReadyState; use lib::*; use serde_json::to_string; #[component] pub fn Auth() -> impl IntoView { let websocket = expect_context::(); let (username, set_username) = create_signal("".to_string()); let user_context = expect_context::>>(); let connected = move || websocket.ready_state.get() == ConnectionReadyState::Open; create_effect(move |_| { user_context.with(|new_user| { if let Some(user) = new_user { set_username(user.username.to_string()); } }) }); let username_input_ref = create_node_ref::(); let send_login = move |_| { if let Some(input) = username_input_ref.get() { if input.value() != String::from("") { logging::log!("send"); websocket.send( &to_string(&UserLogIn { username: input.value(), }) .unwrap(), ); set_username.set("".to_string()); input.set_value(""); } } }; // Clear user name on disconnect create_effect(move |_| { if !connected() { set_username(String::from("")); } }); view! {

Sign in:

Username:


} }