use yew::prelude::*; use std::cell::RefCell; use std::ops::Deref; use std::rc::Rc; use crate::viewmodel::*; pub mod main; pub mod name; pub mod address; pub mod telephone; /// Trait for types that represent an input component for a vcard property. pub trait VCardPropertyInputComponent>: 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; /// Returns the error as `Html` fn render_error(&self) -> Html { html!{ <> { if self.get_error().is_some() { html!{
{ self.get_error().unwrap().msg }
} } else { html!{} } } } } } /// Weak link; Useful for being able to have a list of subcomponents. pub struct WeakComponentLink(Rc>>>); impl Clone for WeakComponentLink { fn clone(&self) -> Self { Self(Rc::clone(&self.0)) } } impl Default for WeakComponentLink { fn default() -> Self { Self(Rc::default()) } } impl Deref for WeakComponentLink { type Target = Rc>>>; fn deref(&self) -> &Self::Target { &self.0 } } impl PartialEq for WeakComponentLink { fn eq(&self, other: &Self) -> bool { Rc::ptr_eq(&self.0, &other.0) } }