summaryrefslogtreecommitdiff
path: root/src/view
diff options
context:
space:
mode:
Diffstat (limited to 'src/view')
-rw-r--r--src/view/address.rs19
-rw-r--r--src/view/mod.rs6
-rw-r--r--src/view/name.rs43
-rw-r--r--src/view/telephone.rs18
4 files changed, 59 insertions, 27 deletions
diff --git a/src/view/address.rs b/src/view/address.rs
index a16d93a..01c949b 100644
--- a/src/view/address.rs
+++ b/src/view/address.rs
@@ -1,15 +1,28 @@
use yew::services::ConsoleService;
+use yew::prelude::*;
+use yewtil::NeqAssign;
use yewtil::ptr::Irc;
use yewtil::ptr::Mrc;
use super::WeakComponentLink;
-use yew::prelude::*;
-use yewtil::NeqAssign;
use crate::viewmodel::address::*;
use crate::viewmodel::VCardPropertyInputObject;
use super::VCardPropertyInputComponent;
use crate::viewmodel::Error;
-
+/// View Component for a `address` field
+///
+/// # Examples
+///
+/// ```compile_fail
+/// let html = html!{
+/// <AddressView weak_link=some_weak_component_link
+/// generated=self.link.callback(
+/// |n: Irc<Address>|
+/// Msg::GeneratedAddress(some_address)
+/// )
+/// />
+/// };
+/// ```
pub struct AddressView {
props: Props,
value: Mrc<Address>,
diff --git a/src/view/mod.rs b/src/view/mod.rs
index 7a64fed..d97c6e4 100644
--- a/src/view/mod.rs
+++ b/src/view/mod.rs
@@ -9,10 +9,15 @@ pub mod name;
pub mod address;
pub mod telephone;
+/// Trait for types that represent an input component for a vcard property.
pub trait VCardPropertyInputComponent<T: VCardPropertyInputObject<Self>>: Component {
+ /// Returns the object containing the input data.
fn get_input_object(&self) -> T;
+ /// Getter function for the title of the component
fn get_title(&self) -> String;
+ /// Getter function for an eventual error.
fn get_error(&self) -> Option<Error>;
+ /// Returns the error as `Html`
fn render_error(&self) -> Html {
html!{
<>
@@ -32,6 +37,7 @@ pub trait VCardPropertyInputComponent<T: VCardPropertyInputObject<Self>>: Compon
}
}
+/// Weak link; Useful for being able to have a list of subcomponents.
pub struct WeakComponentLink<COMP: Component>(Rc<RefCell<Option<ComponentLink<COMP>>>>);
impl<COMP: Component> Clone for WeakComponentLink<COMP> {
diff --git a/src/view/name.rs b/src/view/name.rs
index 5b64bae..d864e35 100644
--- a/src/view/name.rs
+++ b/src/view/name.rs
@@ -1,14 +1,28 @@
use yew::services::ConsoleService;
+use yew::prelude::*;
+use yewtil::NeqAssign;
use yewtil::ptr::Irc;
use yewtil::ptr::Mrc;
use crate::viewmodel::Error;
use crate::view::WeakComponentLink;
-use yew::prelude::*;
-use yewtil::NeqAssign;
use crate::viewmodel::name::*;
use crate::viewmodel::VCardPropertyInputObject;
use super::VCardPropertyInputComponent;
+/// View Component for a `name` field
+///
+/// # Examples
+///
+/// ```compile_fail
+/// let html = html!{
+/// <NameView weak_link=some_weak_component_link
+/// generated=self.link.callback(
+/// |n: Irc<Name>|
+/// Msg::GeneratedName(some_name)
+/// )
+/// />
+/// };
+/// ```
pub struct NameView {
props: Props,
value: Mrc<Name>,
@@ -62,26 +76,11 @@ impl Component for NameView {
}
fn update(&mut self, msg: <Self as yew::Component>::Message) -> bool {
match msg {
- Msg::UpdatePrefix(p) => match self.value.get_mut() {
- Some(value) => value.prefix = p,
- None => ConsoleService::info("Couldn't get mutable reference to name"),
- },
- Msg::UpdateFirstName(f) => match self.value.get_mut() {
- Some(value) => value.first_name = f,
- None => ConsoleService::info("Couldn't get mutable reference to name"),
- },
- Msg::UpdateMiddleName(m) => match self.value.get_mut() {
- Some(value) => value.middle_name = m,
- None => ConsoleService::info("Couldn't get mutable reference to name"),
- },
- Msg::UpdateLastName(l) => match self.value.get_mut() {
- Some(value) => value.last_name = l,
- None => ConsoleService::info("Couldn't get mutable reference to name"),
- },
- Msg::UpdateSuffix(s) => match self.value.get_mut() {
- Some(value) => value.suffix = s,
- None => ConsoleService::info("Couldn't get mutable reference to name"),
- },
+ Msg::UpdatePrefix(p) => self.value.prefix = p,
+ Msg::UpdateFirstName(f) => self.value.first_name = f,
+ Msg::UpdateMiddleName(m) => self.value.middle_name = m,
+ Msg::UpdateLastName(l) => self.value.last_name = l,
+ Msg::UpdateSuffix(s) => self.value.suffix = s,
Msg::Generate => {
self.props.generated.emit(self.value.irc());
},
diff --git a/src/view/telephone.rs b/src/view/telephone.rs
index ca58538..63fdee7 100644
--- a/src/view/telephone.rs
+++ b/src/view/telephone.rs
@@ -1,14 +1,28 @@
+use yew::prelude::*;
use yew::services::ConsoleService;
use yewtil::ptr::Irc;
use yewtil::ptr::Mrc;
+use yewtil::NeqAssign;
use crate::view::WeakComponentLink;
use crate::viewmodel::Error;
-use yew::prelude::*;
-use yewtil::NeqAssign;
use crate::viewmodel::telephone::*;
use crate::viewmodel::VCardPropertyInputObject;
use super::VCardPropertyInputComponent;
+/// View Component for a `telephone` field
+///
+/// # Examples
+///
+/// ```compile_fail
+/// let html = html!{
+/// <TelephoneView weak_link=some_weak_component_link
+/// generated=self.link.callback(
+/// |n: Irc<Telephone>|
+/// Msg::GeneratedTelephone(some_telephone)
+/// )
+/// />
+/// };
+/// ```
pub struct TelephoneView {
props: Props,
value: Mrc<Telephone>,