use web_sys::HtmlInputElement; use yew::prelude::*; use crate::api; #[derive(Properties, PartialEq)] pub struct Props { pub on_login: Callback<()>, } #[function_component(LoginPage)] pub fn login_page(props: &Props) -> Html { let username = use_state(String::new); let password = use_state(String::new); let error = use_state(|| None::); let on_submit = { let username = username.clone(); let password = password.clone(); let error = error.clone(); let on_login = props.on_login.clone(); Callback::from(move |e: SubmitEvent| { e.prevent_default(); let u = (*username).clone(); let p = (*password).clone(); let error = error.clone(); let on_login = on_login.clone(); wasm_bindgen_futures::spawn_local(async move { match api::login(&u, &p).await { Ok(_) => on_login.emit(()), Err(e) => error.set(Some(e.0)), } }); }) }; html! { { "Shanty" } { "Sign in to continue" } if let Some(ref err) = *error { { err } } { "Username" } { "Password" } { "Sign In" } } }
{ "Sign in to continue" }