use leptos::*; use serde::Serialize; #[derive(Serialize)] struct LoginRequest { username: String, password: String, remember_me: bool, } #[component] pub fn Login() -> impl IntoView { let (username, set_username) = create_signal(String::new()); let (password, set_password) = create_signal(String::new()); let (remember_me, set_remember_me) = create_signal(false); let (error, set_error) = create_signal(Option::::None); let (loading, set_loading) = create_signal(false); let handle_login = move |ev: web_sys::SubmitEvent| { ev.prevent_default(); set_loading.set(true); set_error.set(None); logging::log!("Attempting login for user: {}", username.get()); spawn_local(async move { let req = LoginRequest { username: username.get(), password: password.get(), remember_me: remember_me.get(), }; let client = gloo_net::http::Request::post("/api/auth/login") .json(&req) .expect("Failed to create request"); match client.send().await { Ok(resp) => { logging::log!("Login response status: {}", resp.status()); if resp.ok() { logging::log!("Login successful, redirecting..."); // Force a full reload to re-run auth checks in App.rs let _ = window().location().set_href("/"); } else { let text = resp.text().await.unwrap_or_default(); logging::error!("Login failed: {}", text); set_error.set(Some("Kullanıcı adı veya şifre hatalı".to_string())); } } Err(e) => { logging::error!("Network error: {}", e); set_error.set(Some("Bağlantı hatası".to_string())); } } set_loading.set(false); }); }; view! {

"VibeTorrent Giriş"

{move || error.get()}
} }