summaryrefslogtreecommitdiff
path: root/src/model/property_groups
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/property_groups')
-rw-r--r--src/model/property_groups/communication.rs71
-rw-r--r--src/model/property_groups/mod.rs1
2 files changed, 72 insertions, 0 deletions
diff --git a/src/model/property_groups/communication.rs b/src/model/property_groups/communication.rs
new file mode 100644
index 0000000..82fce2a
--- /dev/null
+++ b/src/model/property_groups/communication.rs
@@ -0,0 +1,71 @@
+use crate::model::input_fields::VCardPropertyInputField;
+use crate::model::*;
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct Communication {
+ pub email_address: String,
+ pub impp: String,
+}
+
+#[derive(Clone, PartialEq)]
+pub enum CommunicationMsg {
+ UpdateEmailAddress(String),
+ UpdateImpp(String),
+
+ Generate,
+}
+
+impl VCardPropertyInputGroupObject<CommunicationMsg> for Communication {
+ fn new() -> Self {
+ Self {
+ email_address: String::new(),
+ impp: String::new(),
+ }
+ }
+ fn get_title(&self) -> String {
+ String::from("Communication")
+ }
+ fn get_input_fields(
+ &self,
+ link: &yew::html::Scope<PropertyGroupInputComponent<Self, CommunicationMsg>>,
+ ) -> Vec<VCardPropertyInputField> {
+ vec![
+ VCardPropertyInputField::Text {
+ label: "Email Address".to_string(),
+ id: Some("email_address".to_string()),
+ placeholder: None,
+ oninput: link
+ .callback(|e: InputData| CommunicationMsg::UpdateEmailAddress(e.value)),
+ value: self.email_address.clone(),
+ typ: String::from("email"),
+ },
+ VCardPropertyInputField::Text {
+ label: "Instant Messaging URI".to_string(),
+ id: Some("impp".to_string()),
+ placeholder: None,
+ oninput: link.callback(|e: InputData| CommunicationMsg::UpdateImpp(e.value)),
+ value: self.impp.clone(),
+ typ: String::from("text"),
+ },
+ ]
+ }
+ fn update(
+ &mut self,
+ props: InputProps<Self, CommunicationMsg>,
+ msg: <PropertyGroupInputComponent<Self, CommunicationMsg> as yew::Component>::Message,
+ ) -> bool {
+ match msg {
+ CommunicationMsg::UpdateEmailAddress(a) => self.email_address = a,
+ CommunicationMsg::UpdateImpp(i) => self.impp = i,
+
+ CommunicationMsg::Generate => {
+ props.generated.emit(self.clone());
+ }
+ };
+
+ true
+ }
+ fn is_empty(&self) -> bool {
+ self.email_address.is_empty() && self.impp.is_empty()
+ }
+}
diff --git a/src/model/property_groups/mod.rs b/src/model/property_groups/mod.rs
index 3bfc9f3..ec4e87f 100644
--- a/src/model/property_groups/mod.rs
+++ b/src/model/property_groups/mod.rs
@@ -1,4 +1,5 @@
pub mod address;
+pub mod communication;
pub mod name;
pub mod organizational;
pub mod other_identification;