use yew::prelude::*; use web_sys::HtmlInputElement; #[derive(Properties, PartialEq)] pub struct LoginFormProps { pub on_submit: Callback<(String, String)>, // (email, password) pub error_message: Option, } #[function_component(LoginForm)] pub fn login_form(props: &LoginFormProps) -> Html { let email_ref = use_node_ref(); let password_ref = use_node_ref(); let on_submit = props.on_submit.clone(); let onsubmit = { let email_ref = email_ref.clone(); let password_ref = password_ref.clone(); Callback::from(move |e: SubmitEvent| { e.prevent_default(); let email = email_ref .cast::() .map(|input| input.value()) .unwrap_or_default(); let password = password_ref .cast::() .map(|input| input.value()) .unwrap_or_default(); on_submit.emit((email, password)); }) }; html! { {"Login"} {if let Some(error) = &props.error_message { html! { {error} } } else { html! {} }} {"Email address"} {"Password"} {"Login"} } }