diff options
Diffstat (limited to 'src/view')
| -rw-r--r-- | src/view/main.rs | 93 | ||||
| -rw-r--r-- | src/view/property_group.rs | 8 | 
2 files changed, 58 insertions, 43 deletions
diff --git a/src/view/main.rs b/src/view/main.rs index d35fb59..808b160 100644 --- a/src/view/main.rs +++ b/src/view/main.rs @@ -1,14 +1,14 @@ -use crate::view::property_group::PropertyGroupInputComponent; -use crate::view::weak_links::WeakComponentLink;  use crate::model::address::*; -use crate::model::dates::*;  use crate::model::name::*;  use crate::model::organizational::*; +use crate::model::other_identification::*;  use crate::model::telephone::*;  use crate::model::utility::*;  use crate::model::vcard::VCardData;  use crate::model::Error; -use crate::model::VCardPropertyInputObject; +use crate::model::VCardPropertyInputGroupObject; +use crate::view::property_group::PropertyGroupInputComponent; +use crate::view::weak_links::WeakComponentLink;  use boolinator::Boolinator;  use chrono::prelude::*;  use genpdf::Element as _; @@ -23,7 +23,8 @@ use yewtil::ptr::Mrc;  type NameView = PropertyGroupInputComponent<Name, NameMsg>;  type AddressView = PropertyGroupInputComponent<Address, AddressMsg>; -type DatesView = PropertyGroupInputComponent<Dates, DatesMsg>; +type OtherIdentificationView = +    PropertyGroupInputComponent<OtherIdentification, OtherIdentificationMsg>;  type OrganizationalView = PropertyGroupInputComponent<Organizational, OrganizationalMsg>;  type TelephoneView = PropertyGroupInputComponent<Telephone, TelephoneMsg>; @@ -37,7 +38,7 @@ pub struct MainView {      name_links: Vec<WeakComponentLink<NameView>>,      address_links: Vec<WeakComponentLink<AddressView>>,      telephone_links: Vec<WeakComponentLink<TelephoneView>>, -    dates_links: Vec<WeakComponentLink<DatesView>>, +    other_identifications_links: Vec<WeakComponentLink<OtherIdentificationView>>,      organizational_links: Vec<WeakComponentLink<OrganizationalView>>,      answer_count: usize, @@ -54,9 +55,9 @@ pub enum Msg {      Generate,      GeneratedName(Name), +    GeneratedOtherIdentification(OtherIdentification),      GeneratedAddress(Address),      GeneratedTelephone(Telephone), -    GeneratedDates(Dates),      GeneratedOrganizational(Organizational),      GenerationComplete, @@ -78,7 +79,7 @@ impl Component for MainView {              name_links: vec![WeakComponentLink::default()],              address_links: vec![WeakComponentLink::default()],              telephone_links: vec![WeakComponentLink::default()], -            dates_links: vec![WeakComponentLink::default()], +            other_identifications_links: vec![WeakComponentLink::default()],              organizational_links: vec![WeakComponentLink::default()],              answer_count: 0,          } @@ -102,7 +103,7 @@ impl Component for MainView {                  shouldrender = true;              }              Msg::AddDates => { -                self.dates_links.push(WeakComponentLink::default()); +                self.other_identifications_links.push(WeakComponentLink::default());                  shouldrender = true;              }              Msg::AddOrganizational => { @@ -132,9 +133,9 @@ impl Component for MainView {                          telephone_link.send_message(TelephoneMsg::Generate);                      } -                    for dates_link in self.dates_links.iter() { +                    for dates_link in self.other_identifications_links.iter() {                          let dates_link = dates_link.borrow().clone().unwrap(); -                        dates_link.send_message(DatesMsg::Generate) +                        dates_link.send_message(OtherIdentificationMsg::Generate)                      }                      for organizational_links in self.organizational_links.iter() { @@ -172,37 +173,37 @@ impl Component for MainView {                  shouldrender = true;              } -            Msg::GeneratedAddress(address) => { +            Msg::GeneratedOtherIdentification(other_identification) => {                  self.answer_count += 1;                  match self.vcard_data.get_mut() { -                    Some(vcard_data) => vcard_data.add_address(address), +                    Some(vcard_data) => vcard_data.add_other_identification(other_identification),                      None => ConsoleService::info( -                        "Error in GeneratedAddress: Couldn't get mutable borrow of VCardData", +                        "Error in GeneratedOtherIdentification: Couldn't get mutable borrow of VCardData",                      ),                  };                  shouldrender = true;              } -            Msg::GeneratedTelephone(telephone) => { +            Msg::GeneratedAddress(address) => {                  self.answer_count += 1;                  match self.vcard_data.get_mut() { -                    Some(vcard_data) => vcard_data.add_telephone(telephone), +                    Some(vcard_data) => vcard_data.add_address(address),                      None => ConsoleService::info( -                        "Error in GeneratedTelephone: Couldn't get mutable borrow of VCardData", +                        "Error in GeneratedAddress: Couldn't get mutable borrow of VCardData",                      ),                  };                  shouldrender = true;              } -            Msg::GeneratedDates(dates) => { +            Msg::GeneratedTelephone(telephone) => {                  self.answer_count += 1;                  match self.vcard_data.get_mut() { -                    Some(vcard_data) => vcard_data.add_dates(dates), +                    Some(vcard_data) => vcard_data.add_telephone(telephone),                      None => ConsoleService::info( -                        "Error in GeneratedDates: Couldn't get mutable borrow of VCardData", +                        "Error in GeneratedTelephone: Couldn't get mutable borrow of VCardData",                      ),                  }; @@ -336,13 +337,27 @@ impl Component for MainView {                      }                  } -                for dates in vcard_data.datess { -                    if !dates.anniversary.is_empty() { -                        builder = builder.with_anniversary(dates.anniversary); +                for other_identification in vcard_data.other_identifications { +                    if !other_identification.nickname.is_empty() { +                        builder = +                            builder.with_nickname(parameters!(), other_identification.nickname); +                    } + +                    match other_identification.photo { +                        Some(file) => builder = builder.with_photo(parameters!(), file.content), +                        None => (), +                    }; + +                    if !other_identification.anniversary.is_empty() { +                        builder = builder.with_anniversary(other_identification.anniversary);                      } -                    if !dates.birthday.is_empty() { -                        builder = builder.with_bday(parameters!(), dates.birthday); +                    if !other_identification.birthday.is_empty() { +                        builder = builder.with_bday(parameters!(), other_identification.birthday); +                    } + +                    if !other_identification.gender.is_empty() { +                        builder = builder.with_gender(parameters!(), other_identification.gender);                      }                  } @@ -484,6 +499,19 @@ impl Component for MainView {                              }                              { +                                for self.other_identifications_links.iter().map(|link| +                                    html!{ +                                        <OtherIdentificationView  weak_link=link +                                                    generated=self.link.callback( +                                                        |d: OtherIdentification| +                                                            Msg::GeneratedOtherIdentification(d) +                                                    ) +                                        /> +                                    } +                                ) +                            } + +                            {                                  for self.address_links.iter().map(|link|                                      html!{                                          <AddressView    weak_link=link @@ -510,19 +538,6 @@ impl Component for MainView {                              }                              { -                                for self.dates_links.iter().map(|link| -                                    html!{ -                                        <DatesView  weak_link=link -                                                    generated=self.link.callback( -                                                        |d: Dates| -                                                            Msg::GeneratedDates(d) -                                                    ) -                                        /> -                                    } -                                ) -                            } - -                            {                                  for self.organizational_links.iter().map(|link|                                      html!{                                          <OrganizationalView weak_link=link @@ -695,7 +710,7 @@ impl MainView {          self.name_links.len()              + self.address_links.len()              + self.telephone_links.len() -            + self.dates_links.len() +            + self.other_identifications_links.len()              + self.organizational_links.len()      }  } diff --git a/src/view/property_group.rs b/src/view/property_group.rs index 9c86e80..f4b62a4 100644 --- a/src/view/property_group.rs +++ b/src/view/property_group.rs @@ -5,7 +5,7 @@ use yewtil::NeqAssign;  #[derive(Clone, PartialEq, Properties)]  pub struct InputProps< -    O: 'static + VCardPropertyInputObject<M> + Clone, +    O: 'static + VCardPropertyInputGroupObject<M> + Clone,      M: 'static + PartialEq + Clone,  > {      pub generated: Callback<O>, @@ -14,7 +14,7 @@ pub struct InputProps<  #[derive(Clone, PartialEq)]  pub struct PropertyGroupInputComponent< -    O: 'static + VCardPropertyInputObject<M>, +    O: 'static + VCardPropertyInputGroupObject<M>,      M: 'static + PartialEq + Clone,  > {      pub props: InputProps<O, M>, @@ -22,7 +22,7 @@ pub struct PropertyGroupInputComponent<      pub error: Option<Error>,  } -impl<O: 'static + VCardPropertyInputObject<M>, M: 'static + PartialEq + Clone> Component +impl<O: 'static + VCardPropertyInputGroupObject<M>, M: 'static + PartialEq + Clone> Component      for PropertyGroupInputComponent<O, M>  {      type Message = M; @@ -57,7 +57,7 @@ impl<O: 'static + VCardPropertyInputObject<M>, M: 'static + PartialEq + Clone> C      }  } -impl<O: VCardPropertyInputObject<M>, M: 'static + PartialEq + Clone> +impl<O: VCardPropertyInputGroupObject<M>, M: 'static + PartialEq + Clone>      PropertyGroupInputComponent<O, M>  {      /// Returns the error as `Html`  | 
