use crate::i18n; use leptos::prelude::*; use wasm_bindgen_futures::spawn_local; use crate::api::{self, Me, input_value}; use crate::app::AuthPhase; use crate::components::logo::Logo; use crate::router::{Location, navigate}; #[component] pub fn SetupView( set_me: WriteSignal>, set_phase: WriteSignal, ) -> impl IntoView { let (error, set_error) = signal(String::new()); let (busy, set_busy) = signal(false); let on_submit = move |ev: web_sys::SubmitEvent| { ev.prevent_default(); let name = input_value("setup-name"); let pass = input_value("setup-pass"); let confirm = input_value("setup-confirm"); let name = name.trim(); if name.is_empty() || name.len() > 64 { set_error.set(i18n::t(i18n::k::SETUP_NAME_ERR).into()); return; } if pass.len() < 8 { set_error.set(i18n::t(i18n::k::PW_SHORT).into()); return; } if pass != confirm { set_error.set(i18n::t(i18n::k::SETUP_PW_MISMATCH).into()); return; } set_error.set(String::new()); set_busy.set(true); let (name, pass) = (name.to_string(), pass); spawn_local(async move { match api::setup(name, pass).await { Ok(_) => match api::me().await { Ok(m) => { navigate(&Location::root()); set_me.set(Some(m)); set_phase.set(AuthPhase::Authed); } Err(e) => { set_error.set(e.to_string()); set_busy.set(false); } }, Err(e) => { set_error.set(e.to_string()); set_busy.set(false); } } }); }; view! {
} }