use web_sys::HtmlInputElement;
use yew::prelude::*;
use crate::api;
#[derive(Properties, PartialEq)]
pub struct Props {
pub on_setup: Callback<()>,
}
#[function_component(SetupPage)]
pub fn setup_page(props: &Props) -> Html {
let username = use_state(String::new);
let password = use_state(String::new);
let confirm = use_state(String::new);
let error = use_state(|| None::);
let on_submit = {
let username = username.clone();
let password = password.clone();
let confirm = confirm.clone();
let error = error.clone();
let on_setup = props.on_setup.clone();
Callback::from(move |e: SubmitEvent| {
e.prevent_default();
let u = (*username).clone();
let p = (*password).clone();
let c = (*confirm).clone();
let error = error.clone();
let on_setup = on_setup.clone();
if p != c {
error.set(Some("Passwords do not match".into()));
return;
}
if p.len() < 4 {
error.set(Some("Password must be at least 4 characters".into()));
return;
}
wasm_bindgen_futures::spawn_local(async move {
match api::setup(&u, &p).await {
Ok(_) => on_setup.emit(()),
Err(e) => error.set(Some(e.0)),
}
});
})
};
html! {