use super::*; /// Type that represents the vcard `anniversary` and `birthday` properties. #[derive(Clone, Debug, PartialEq)] pub struct Dates { pub anniversary: String, pub birthday: String, } #[derive(Clone, PartialEq)] pub enum DatesMsg { UpdateAnniversary(String), UpdateBirthday(String), Generate, } impl VCardPropertyInputObject for Dates { fn new() -> Self { Self { anniversary: String::new(), birthday: String::new(), } } fn get_title(&self) -> std::string::String { "Dates".to_string() } fn get_input_fields( &self, link: &yew::html::Scope>, ) -> std::vec::Vec { let typ = String::from("date"); vec![ VCardPropertyInputField::Text { label: "Anniversary".to_string(), id: Some("anniversary".to_string()), placeholder: None, oninput: link.callback(|e: InputData| DatesMsg::UpdateAnniversary(e.value)), value: self.anniversary.clone(), typ: typ.clone(), }, VCardPropertyInputField::Text { label: "Birthday".to_string(), id: Some("birthday".to_string()), placeholder: None, oninput: link.callback(|e: InputData| DatesMsg::UpdateBirthday(e.value)), value: self.birthday.clone(), typ, }, ] } fn update( &mut self, props: InputProps, msg: as yew::Component>::Message, ) -> bool { match msg { DatesMsg::UpdateAnniversary(a) => self.anniversary = a, DatesMsg::UpdateBirthday(b) => self.birthday = b, DatesMsg::Generate => { props.generated.emit(self.clone()); } }; true } fn is_empty(&self) -> bool { self.anniversary.is_empty() && self.birthday.is_empty() } }