From fd5b054fe655c81533c8a1138ba55a82a7b9d085 Mon Sep 17 00:00:00 2001 From: jelemux Date: Fri, 5 Feb 2021 18:05:16 +0100 Subject: add date properties --- src/view/dates.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/view/dates.rs (limited to 'src/view/dates.rs') diff --git a/src/view/dates.rs b/src/view/dates.rs new file mode 100644 index 0000000..1c16680 --- /dev/null +++ b/src/view/dates.rs @@ -0,0 +1,78 @@ +use yew::prelude::*; +use yewtil::NeqAssign; +use crate::viewmodel::Error; +use crate::view::WeakComponentLink; +use crate::viewmodel::dates::*; +use crate::viewmodel::VCardPropertyInputObject; +use super::VCardPropertyInputComponent; + +pub struct DatesView { + props: Props, + value: Dates, + error: Option, +} + +pub enum Msg { + UpdateAnniversary(String), + UpdateBirthday(String), + + Generate, +} + +#[derive(Clone, PartialEq, Properties)] +pub struct Props { + pub generated: Callback, + pub weak_link: WeakComponentLink, +} + +impl VCardPropertyInputComponent for DatesView { + fn get_input_object(&self) -> Dates { + self.value.clone() + } + fn get_title(&self) -> std::string::String { + "Dates".to_string() + } + fn get_error(&self) -> std::option::Option { + self.error.clone() + } +} + +impl Component for DatesView { + type Message = Msg; + type Properties = Props; + fn create(props: ::Properties, link: yew::html::Scope) -> Self { + props.weak_link.borrow_mut().replace(link); + Self { + props, + value: Dates::new(), + error: None, + } + } + fn update(&mut self, msg: ::Message) -> bool { + match msg { + Msg::UpdateAnniversary(a) => self.value.anniversary = a, + Msg::UpdateBirthday(b) => self.value.birthday = b, + Msg::Generate => { + self.props.generated.emit(self.value.clone()); + }, + }; + true + } + fn change(&mut self, props: ::Properties) -> bool { + self.props.neq_assign(props) + } + fn view(&self) -> yew::virtual_dom::VNode { + let link = self.props.weak_link.borrow().clone().unwrap(); + + html!{ +
+ { self.render_error() } + +

{ self.get_title() }

+ + { self.get_input_object().render(&link) } + +
+ } + } +} \ No newline at end of file -- cgit v1.2.3