use leptos::prelude::*; use leptos_router::hooks::use_query_map; use crate::api; use crate::i18n::*; #[derive(Clone, PartialEq)] enum VerifyStatus { Checking, Success, Error, } #[component] pub fn VerifyEmailPage() -> impl IntoView { let i18n = use_i18n(); let auth_username = use_context::>>().expect("auth_username context not found"); let auth_email_verified = use_context::>().expect("auth_email_verified context not found"); let query = use_query_map(); let token = query.with(|m| m.get("token").map(|s| s.to_string()).unwrap_or_default()); let status = RwSignal::new(VerifyStatus::Checking); let tok = token.clone(); wasm_bindgen_futures::spawn_local(async move { let s = if tok.is_empty() { VerifyStatus::Error } else { match api::get_verify_email(&tok).await { Ok(()) => { // Update the current session if the user is already logged in. auth_email_verified.set(true); VerifyStatus::Success } Err(_) => VerifyStatus::Error, } }; status.set(s); }); let profile_href = move || { auth_username .get() .map(|u| format!("/profile/{u}")) .unwrap_or_else(|| "/account".to_string()) }; view! {

{t!(i18n, verify_email_title)}

{move || match status.get() { VerifyStatus::Checking => view! {

{t!(i18n, verify_email_checking)}

}.into_any(), VerifyStatus::Success => view! {

{t!(i18n, verify_email_success)}

}.into_any(), VerifyStatus::Error => view! {

{t!(i18n, verify_email_invalid)}

}.into_any(), }}
} }