summaryrefslogtreecommitdiff
path: root/src/view/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/main.rs')
-rw-r--r--src/view/main.rs79
1 files changed, 73 insertions, 6 deletions
diff --git a/src/view/main.rs b/src/view/main.rs
index dd32e33..9ce032a 100644
--- a/src/view/main.rs
+++ b/src/view/main.rs
@@ -1,4 +1,5 @@
use crate::model::property_groups::address::*;
+use crate::model::property_groups::communication::*;
use crate::model::property_groups::name::*;
use crate::model::property_groups::organizational::*;
use crate::model::property_groups::other_identification::*;
@@ -28,6 +29,7 @@ type OtherIdentificationView =
PropertyGroupInputComponent<OtherIdentification, OtherIdentificationMsg>;
type OrganizationalView = PropertyGroupInputComponent<Organizational, OrganizationalMsg>;
type TelephoneView = PropertyGroupInputComponent<Telephone, TelephoneMsg>;
+type CommunicationView = PropertyGroupInputComponent<Communication, CommunicationMsg>;
pub struct MainView {
link: ComponentLink<Self>,
@@ -39,6 +41,7 @@ pub struct MainView {
name_links: Vec<WeakComponentLink<NameView>>,
address_links: Vec<WeakComponentLink<AddressView>>,
telephone_links: Vec<WeakComponentLink<TelephoneView>>,
+ communcation_links: Vec<WeakComponentLink<CommunicationView>>,
other_identifications_links: Vec<WeakComponentLink<OtherIdentificationView>>,
organizational_links: Vec<WeakComponentLink<OrganizationalView>>,
@@ -56,6 +59,8 @@ pub enum Msg {
DelOtherIdentification(usize),
AddOrganizational,
DelOrganizational(usize),
+ AddCommunication,
+ DelCommunication(usize),
ChangeDownloadOption(DownloadOption),
@@ -65,6 +70,7 @@ pub enum Msg {
GeneratedAddress(Address),
GeneratedTelephone(Telephone),
GeneratedOrganizational(Organizational),
+ GeneratedCommunication(Communication),
GenerationComplete,
Nope,
@@ -85,6 +91,7 @@ impl Component for MainView {
name_links: vec![WeakComponentLink::default()],
address_links: vec![WeakComponentLink::default()],
telephone_links: vec![WeakComponentLink::default()],
+ communcation_links: vec![WeakComponentLink::default()],
other_identifications_links: vec![WeakComponentLink::default()],
organizational_links: vec![WeakComponentLink::default()],
answer_count: 0,
@@ -136,6 +143,14 @@ impl Component for MainView {
self.organizational_links.remove(idx);
true
}
+ Msg::AddCommunication => {
+ self.communcation_links.push(WeakComponentLink::default());
+ true
+ }
+ Msg::DelCommunication(idx) => {
+ self.communcation_links.remove(idx);
+ true
+ }
Msg::ChangeDownloadOption(option) => {
self.selected_option = option;
false
@@ -159,15 +174,20 @@ impl Component for MainView {
telephone_link.send_message(TelephoneMsg::Generate);
}
- for dates_link in self.other_identifications_links.iter() {
- let dates_link = dates_link.borrow().clone().unwrap();
- dates_link.send_message(OtherIdentificationMsg::Generate)
+ for other_identifications_link in self.other_identifications_links.iter() {
+ let other_identifications_link = other_identifications_link.borrow().clone().unwrap();
+ other_identifications_link.send_message(OtherIdentificationMsg::Generate)
}
- for organizational_links in self.organizational_links.iter() {
- let organizational_link = organizational_links.borrow().clone().unwrap();
+ for organizational_link in self.organizational_links.iter() {
+ let organizational_link = organizational_link.borrow().clone().unwrap();
organizational_link.send_message(OrganizationalMsg::Generate)
}
+
+ for communcation_link in self.communcation_links.iter() {
+ let communcation_link = communcation_link.borrow().clone().unwrap();
+ communcation_link.send_message(CommunicationMsg::Generate)
+ }
}
/*
DownloadOption::PDF => {
@@ -235,6 +255,18 @@ impl Component for MainView {
true
}
+ Msg::GeneratedCommunication(communication) => {
+ self.answer_count += 1;
+
+ match self.vcard_data.get_mut() {
+ Some(vcard_data) => vcard_data.add_communication(communication),
+ None => ConsoleService::info(
+ "Error in GeneratedCommunication: Couldn't get mutable borrow of VCardData",
+ ),
+ };
+
+ true
+ }
Msg::GeneratedOrganizational(organizational) => {
self.answer_count += 1;
@@ -363,6 +395,15 @@ impl Component for MainView {
}
}
+ for communication in vcard_data.communications {
+ if !communication.email_address.is_empty() {
+ builder = builder.with_email(communication.email_address.clone());
+ }
+ if !communication.impp.is_empty() {
+ builder = builder.with_impp(communication.impp.clone());
+ }
+ }
+
for other_identification in vcard_data.other_identifications {
if !other_identification.nickname.is_empty() {
builder =
@@ -469,7 +510,7 @@ impl Component for MainView {
true
}
- Msg::Nope => false
+ Msg::Nope => false,
};
if self.answer_count >= self.get_subcomponent_count() {
@@ -617,6 +658,31 @@ impl Component for MainView {
<div class="level">
<div class="level-left">
<div class="level-item">
+ <h2 class="subtitle is-2">{ "Communication" }</h2>
+ </div>
+ <div class="level-item">
+ <button onclick=self.link.callback(|_| Msg::AddCommunication) class="button">{ "Add more" }</button>
+ </div>
+ </div>
+ </div>
+
+ {
+ for self.communcation_links.iter().enumerate().map(move |(idx, link)|
+ html!{
+ <CommunicationView weak_link=link
+ generated=self.link.callback(
+ |c: Communication|
+ Msg::GeneratedCommunication(c)
+ )
+ delete=self.link.callback(move |_| Msg::DelCommunication(idx))
+ />
+ }
+ )
+ }
+
+ <div class="level">
+ <div class="level-left">
+ <div class="level-item">
<h2 class="subtitle is-2">{ "Organisations" }</h2>
</div>
<div class="level-item">
@@ -801,5 +867,6 @@ impl MainView {
+ self.telephone_links.len()
+ self.other_identifications_links.len()
+ self.organizational_links.len()
+ + self.communcation_links.len()
}
}