use leptos::*; use leptos_router::*; use serde::{Deserialize, Serialize}; #[derive(Serialize)] struct SetupRequest { username: String, password: String, } #[component] pub fn Setup() -> impl IntoView { let (username, set_username) = create_signal(String::new()); let (password, set_password) = create_signal(String::new()); let (confirm_password, set_confirm_password) = create_signal(String::new()); let (error, set_error) = create_signal(Option::::None); let (loading, set_loading) = create_signal(false); let handle_setup = move |ev: web_sys::SubmitEvent| { ev.prevent_default(); set_loading.set(true); set_error.set(None); let pass = password.get(); let confirm = confirm_password.get(); if pass != confirm { set_error.set(Some("Şifreler eşleşmiyor".to_string())); set_loading.set(false); return; } if pass.len() < 6 { set_error.set(Some("Şifre en az 6 karakter olmalıdır".to_string())); set_loading.set(false); return; } spawn_local(async move { let req = SetupRequest { username: username.get(), password: pass, }; let client = gloo_net::http::Request::post("/api/setup") .json(&req) .expect("Failed to create request"); match client.send().await { Ok(resp) => { if resp.ok() { // Redirect to login after setup let navigate = use_navigate(); navigate("/login", Default::default()); } else { let text = resp.text().await.unwrap_or_default(); set_error.set(Some(format!("Hata: {}", text))); } } Err(_) => { set_error.set(Some("Bağlantı hatası".to_string())); } } set_loading.set(false); }); }; view! {

"VibeTorrent Kurulumu"

"Yönetici hesabınızı oluşturun"

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