diff options
Diffstat (limited to 'src/view/organizational.rs')
-rw-r--r-- | src/view/organizational.rs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/view/organizational.rs b/src/view/organizational.rs new file mode 100644 index 0000000..b11c181 --- /dev/null +++ b/src/view/organizational.rs @@ -0,0 +1,83 @@ +use yew::prelude::*; +use yewtil::NeqAssign; +use crate::viewmodel::Error; +use crate::view::InputProps; +use crate::viewmodel::organizational::*; +use crate::viewmodel::VCardPropertyInputObject; +use super::VCardPropertyInputComponent; + +type Props = InputProps<Organizational,OrganizationalView>; + +#[derive(Clone,PartialEq)] +pub struct OrganizationalView { + props: Props, + value: Organizational, + error: Option<Error>, +} + +pub enum Msg { + UpdateOrg(String), + UpdateLogo(String), + UpdateTitle(String), + UpdateRole(String), + UpdateMember(String), + UpdateRelated(String), + + Generate, +} + +impl VCardPropertyInputComponent<Organizational> for OrganizationalView { + fn get_input_object(&self) -> Organizational { + self.value.clone() + } + fn get_title(&self) -> std::string::String { + "Organizational".to_string() + } + fn get_error(&self) -> std::option::Option<Error> { + self.error.clone() + } +} + +impl Component for OrganizationalView { + type Message = Msg; + type Properties = Props; + fn create(props: <Self as yew::Component>::Properties, link: yew::html::Scope<Self>) -> Self { + props.weak_link.borrow_mut().replace(link); + Self { + props, + value: Organizational::new(), + error: None, + } + } + fn update(&mut self, msg: <Self as yew::Component>::Message) -> bool { + match msg { + Msg::UpdateOrg(o) => self.value.org = o, + Msg::UpdateLogo(l) => self.value.logo = l, + Msg::UpdateTitle(t) => self.value.title = t, + Msg::UpdateRole(r) => self.value.role = r, + Msg::UpdateMember(m) => self.value.member = m, + Msg::UpdateRelated(r) => self.value.related = r, + Msg::Generate => { + self.props.generated.emit(self.value.clone()); + }, + }; + true + } + fn change(&mut self, props: <Self as yew::Component>::Properties) -> bool { + self.props.neq_assign(props) + } + fn view(&self) -> yew::virtual_dom::VNode { + let link = self.props.weak_link.borrow().clone().unwrap(); + + html!{ + <div class="box"> + { self.render_error() } + + <h3 class="subtitle">{ self.get_title() }</h3> + + { self.get_input_object().render(&link) } + + </div> + } + } +}
\ No newline at end of file |