diff options
author | jelemux <jeremias.weber@protonmail.com> | 2021-02-17 22:27:41 +0100 |
---|---|---|
committer | jelemux <jeremias.weber@protonmail.com> | 2021-02-17 22:27:41 +0100 |
commit | 9698e6952cb568f6dce49b35bd47b52d992c0f9a (patch) | |
tree | 1c8cff0b2c6824653da68b94a81bbbfb314f01dd /src/model/property_groups/address.rs | |
parent | d0d42c5ae00560e4464479a98df90ed063a1c773 (diff) | |
download | wasm-card-9698e6952cb568f6dce49b35bd47b52d992c0f9a.tar.gz wasm-card-9698e6952cb568f6dce49b35bd47b52d992c0f9a.tar.bz2 |
refactor: put input_fields and property_groups into their own modules
Diffstat (limited to 'src/model/property_groups/address.rs')
-rw-r--r-- | src/model/property_groups/address.rs | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/model/property_groups/address.rs b/src/model/property_groups/address.rs new file mode 100644 index 0000000..00bca0b --- /dev/null +++ b/src/model/property_groups/address.rs @@ -0,0 +1,155 @@ +use crate::model::input_fields::VCardPropertyInputField; +use crate::model::*; + +#[derive(Clone, Debug, PartialEq)] +pub struct Address { + pub post_office_box: String, + pub extension: String, + pub street: String, + pub locality: String, + pub region: String, + pub code: String, + pub country: String, + pub work: bool, + pub home: bool, +} + +#[derive(Clone, PartialEq)] +pub enum AddressMsg { + UpdatePostOfficeBox(String), + UpdateExtension(String), + UpdateStreet(String), + UpdateLocality(String), + UpdateRegion(String), + UpdateCode(String), + UpdateCountry(String), + ToggleWork, + ToggleHome, + + Generate, +} + +impl VCardPropertyInputGroupObject<AddressMsg> for Address { + fn new() -> Self { + Self { + post_office_box: String::new(), + extension: String::new(), + street: String::new(), + locality: String::new(), + region: String::new(), + code: String::new(), + country: String::new(), + work: false, + home: false, + } + } + fn get_title(&self) -> String { + "Address".to_string() + } + fn get_input_fields( + &self, + link: &ComponentLink<PropertyGroupInputComponent<Self, AddressMsg>>, + ) -> Vec<VCardPropertyInputField> { + let typ = String::from("text"); + vec![ + VCardPropertyInputField::Text { + label: "Post Office Box".to_string(), + id: Some("post_office_box".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdatePostOfficeBox(e.value)), + value: self.post_office_box.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Extension".to_string(), + id: Some("extension".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateExtension(e.value)), + value: self.extension.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Street".to_string(), + id: Some("street".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateStreet(e.value)), + value: self.street.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Locality".to_string(), + id: Some("locality".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateLocality(e.value)), + value: self.locality.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Region".to_string(), + id: Some("region".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateRegion(e.value)), + value: self.region.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Code".to_string(), + id: Some("code".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateCode(e.value)), + value: self.code.clone(), + typ: typ.clone(), + }, + VCardPropertyInputField::Text { + label: "Country".to_string(), + id: Some("country".to_string()), + placeholder: None, + oninput: link.callback(|e: InputData| AddressMsg::UpdateCountry(e.value)), + value: self.country.clone(), + typ, + }, + VCardPropertyInputField::CheckBox { + label: "Work".to_string(), + id: Some("work".to_string()), + onclick: link.callback(|_: MouseEvent| AddressMsg::ToggleWork), + value: self.work, + }, + VCardPropertyInputField::CheckBox { + label: "Home".to_string(), + id: Some("home".to_string()), + onclick: link.callback(|_: MouseEvent| AddressMsg::ToggleHome), + value: self.home, + }, + ] + } + fn update( + &mut self, + props: InputProps<Self, AddressMsg>, + msg: <PropertyGroupInputComponent<Self, AddressMsg> as yew::Component>::Message, + ) -> bool { + match msg { + AddressMsg::UpdatePostOfficeBox(b) => self.post_office_box = b, + AddressMsg::UpdateExtension(e) => self.extension = e, + AddressMsg::UpdateStreet(s) => self.street = s, + AddressMsg::UpdateLocality(l) => self.locality = l, + AddressMsg::UpdateRegion(r) => self.region = r, + AddressMsg::UpdateCode(p) => self.code = p, + AddressMsg::UpdateCountry(c) => self.country = c, + AddressMsg::ToggleWork => self.work = !self.work, + AddressMsg::ToggleHome => self.home = !self.home, + AddressMsg::Generate => { + props.generated.emit(self.clone()); + } + }; + true + } + fn is_empty(&self) -> bool { + self.post_office_box.is_empty() + && self.extension.is_empty() + && self.street.is_empty() + && self.locality.is_empty() + && self.region.is_empty() + && self.code.is_empty() + && self.country.is_empty() + } +} |