diff --git a/src/components/number_textfield.rs b/src/components/number_textfield.rs index 70063ff..ec72e61 100644 --- a/src/components/number_textfield.rs +++ b/src/components/number_textfield.rs @@ -2,32 +2,31 @@ use wasm_bindgen::{JsCast, UnwrapThrowExt}; use web_sys::{HtmlInputElement}; use yew::prelude::*; -use std::{str::FromStr, num::ParseFloatError}; +use std::{str::FromStr, fmt::{Display}}; #[derive(Properties, PartialEq, Clone)] -pub struct NumberTextFieldProps { +pub struct NumberTextFieldProps { pub label: String, - pub value: UseStateHandle, + pub value: UseStateHandle, #[prop_or_default] pub required: bool, - pub onchange: Option>, + pub onchange: Option>, } - #[function_component(NumberTextField)] -pub fn number_textfield(props: &NumberTextFieldProps) -> Html { +pub fn number_textfield(props: &NumberTextFieldProps) -> Html { let on_input_changed = { let handle = props.value.clone(); let onchange = props.onchange.clone(); Callback::from(move |e: InputEvent| { - let value = match get_number_value_from_input_event(e) { + let value = match get_number_value_from_input_event::(e) { Ok(float) => float, - Err(error) => { - log::error!("Error ocurred attempting to parse float on input type number. This only happens in firefox browsers. {error}"); - 0.0 + Err(_) => { + log::error!("Error ocurred attempting to parse number on input type number. This only happens in firefox browsers."); + T::default() }}; match onchange.clone() { - Some(onchange) => onchange.emit(value), + Some(onchange) => onchange.emit(value.clone()), None => {} }; handle.set(value); @@ -41,9 +40,12 @@ pub fn number_textfield(props: &NumberTextFieldProps) -> Html { } } -pub fn get_number_value_from_input_event(e: InputEvent) -> Result { +pub fn get_number_value_from_input_event(e: InputEvent) -> Result { let event: Event = e.dyn_into().unwrap_throw(); let event_target = event.target().unwrap_throw(); let target: HtmlInputElement = event_target.dyn_into().unwrap_throw(); - f64::from_str(&target.value()) + match T::from_str(&target.value()) { + Ok(t) => Ok(t), + Err(_) => Err(()), + } } \ No newline at end of file diff --git a/src/pages/admin/fields/unit.rs b/src/pages/admin/fields/unit.rs index aae5119..8e1ba80 100644 --- a/src/pages/admin/fields/unit.rs +++ b/src/pages/admin/fields/unit.rs @@ -1,4 +1,4 @@ -use jl_types::domain::unit::Unit; +use jl_types::domain::{unit::Unit, unit_type::UnitType}; use uuid::Uuid; use yew::prelude::*; use yew_router::prelude::use_navigator; @@ -19,7 +19,18 @@ pub fn unit_fields(props: &UnitFieldsProps) -> Html { // Fields let price_usd = use_state(|| 0.0); + let unit_type_handle: UseStateHandle> = use_state(|| None); + let rooms_handle: UseStateHandle = use_state(|| 0); + let bathrooms_handle: UseStateHandle = use_state(|| 0); + let area_handle: UseStateHandle = use_state(|| 0.0); + let a = 0.0; + let b = a as i32; html! { - + <> + label={String::from("Precio en USD")} required={true} value={price_usd.clone()}/> + label={String::from("Area en m^2")} required={true} value={area_handle.clone()}/> + label={String::from("Cant. de habitaciones")} required={true} value={rooms_handle.clone()}/> + label={String::from("Cant. de baƱos")} required={true} value={bathrooms_handle.clone()}/> + } -} \ No newline at end of file +}