diff options
Diffstat (limited to 'src/viewmodel')
| -rw-r--r-- | src/viewmodel/mod.rs | 15 | ||||
| -rw-r--r-- | src/viewmodel/name.rs | 17 | ||||
| -rw-r--r-- | src/viewmodel/vcard.rs | 9 | 
3 files changed, 35 insertions, 6 deletions
diff --git a/src/viewmodel/mod.rs b/src/viewmodel/mod.rs index de433de..d5d0de3 100644 --- a/src/viewmodel/mod.rs +++ b/src/viewmodel/mod.rs @@ -7,11 +7,16 @@ pub mod name;  pub mod telephone;  pub mod utility; + +/// Trait for types that represent the data of a vcard property used inside of a `VCardPropertyInputComponent`.  pub trait VCardPropertyInputObject<C: VCardPropertyInputComponent<Self>>  -    where   Self: Sized  +    where Self: Sized   { +    /// Function for creating a new (and empty) `VCardPropertyInputObject`.      fn new() -> Self; +    /// Converts each field of the `VCardPropertyInputObject` to a VCardPropertyInputField and returns them as a vector.      fn get_input_fields(&self, link: &ComponentLink<C>) -> Vec<VCardPropertyInputField>; +    /// Returns a `Html` representation of the `VCardPropertyInputObject`.      fn render(&self, link: &ComponentLink<C>) -> Html {          html!{              <div class="columns is-mobile is-multiline"> @@ -23,14 +28,19 @@ pub trait VCardPropertyInputObject<C: VCardPropertyInputComponent<Self>>              </div>          }      } +    /// Convenience function for checking if the `VCardPropertyInputObject` is empty.      fn is_empty(&self) -> bool;  } +/// Type for saving error messages. +///  +/// More of a placeholder for something better later on.  #[derive(Debug,Clone,PartialEq)]  pub struct Error {      pub msg: String,  } +/// Type that represents the visiual appearance of an input field.  pub enum VCardPropertyInputField {      Text {          label: String, @@ -48,6 +58,7 @@ pub enum VCardPropertyInputField {  }  impl VCardPropertyInputField { +    /// Returns a `Html` representation of the `VCardPropertyInputField`.      pub fn render(&self) -> Html {          match self {              Self::Text { @@ -65,6 +76,7 @@ impl VCardPropertyInputField {              } => Self::checkbox_field_input(label, id, value, onclick),          }      } +    /// Returns an `Html` representation of a text input field with the given parameters.       fn text_field_input(label: &str, id: &Option<String>, placeholder: &Option<String>, oninput: &Callback<InputData>) -> Html {          html!{              <div class="field column  @@ -83,6 +95,7 @@ impl VCardPropertyInputField {              </div>          }      } +    /// Returns an `Html` representation of a checkbox input field with the given parameters.       fn checkbox_field_input(label: &str, id: &Option<String>, checked: &bool, onclick: &Callback<MouseEvent>) -> Html {          html!{              <div class="field column  diff --git a/src/viewmodel/name.rs b/src/viewmodel/name.rs index a88e07f..b6ded60 100644 --- a/src/viewmodel/name.rs +++ b/src/viewmodel/name.rs @@ -1,6 +1,21 @@  use super::*;  use crate::view::name::*; +/// Type that represents a vcard `name` property +///  +/// # Examples +/// ``` +/// # use bcard_wasm_webapp::viewmodel::name::Name; +/// # use crate::bcard_wasm_webapp::viewmodel::VCardPropertyInputObject; +/// let mut name = Name::new(); +/// name.prefix = String::from("Sir"); +/// name.first_name = String::from("Arthur"); +/// name.middle_name = String::from("Charles"); +/// name.last_name = String::from("Clarke"); +/// name.suffix = String::from("CBE FRAS"); +///  +/// assert_eq!(name.generate_fn(), String::from("Sir Arthur Charles Clarke, CBE FRAS")); +/// ```  #[derive(Clone, Debug)]  pub struct Name {      pub prefix: String, @@ -86,7 +101,7 @@ impl Name {              full_name.push_str(&self.last_name);          }          if !self.suffix.is_empty() { -            full_name.push_str(" "); +            full_name.push_str(", ");              full_name.push_str(&self.suffix);          } diff --git a/src/viewmodel/vcard.rs b/src/viewmodel/vcard.rs index 2d415b7..0225590 100644 --- a/src/viewmodel/vcard.rs +++ b/src/viewmodel/vcard.rs @@ -3,6 +3,7 @@ use crate::viewmodel::telephone::Telephone;  use crate::viewmodel::address::Address;  use crate::viewmodel::name::Name; +/// Type that represents the data structure of a vcard.  #[derive(Clone, Debug)]  pub struct VCardData {      pub names: Vec<Irc<Name>>, @@ -11,7 +12,7 @@ pub struct VCardData {  }  macro_rules! make_vec_adder_fn { -    ( $fnname:ident $property:ident $($arg_name:ident : $arg_type:ty),* ) => { +    ( fn $fnname:ident $property:ident => $($arg_name:ident : $arg_type:ty),* ) => {          pub fn $fnname(&mut self, $( $arg_name : $arg_type ),*) {              $(self.$property.push($arg_name);)*          } @@ -26,7 +27,7 @@ impl VCardData {              telephones: Vec::new(),          }      } -    make_vec_adder_fn!( add_name names name: Irc<Name> ); -    make_vec_adder_fn!( add_address addresses address: Irc<Address> ); -    make_vec_adder_fn!( add_telephone telephones telephone: Irc<Telephone> ); +    make_vec_adder_fn!( fn add_name names => name: Irc<Name> ); +    make_vec_adder_fn!( fn add_address addresses => address: Irc<Address> ); +    make_vec_adder_fn!( fn add_telephone telephones => telephone: Irc<Telephone> );  }
\ No newline at end of file  | 
