diff options
author | jelemux <jeremias.weber@protonmail.com> | 2021-02-05 18:05:16 +0100 |
---|---|---|
committer | jelemux <jeremias.weber@protonmail.com> | 2021-02-05 18:05:16 +0100 |
commit | fd5b054fe655c81533c8a1138ba55a82a7b9d085 (patch) | |
tree | 2d90466a05356490ed3d15fa19e8dc0fe763499e /src/view/dates.rs | |
parent | 87007b8785be959ca7687e2bec7401514e92581d (diff) | |
download | wasm-card-fd5b054fe655c81533c8a1138ba55a82a7b9d085.tar.gz wasm-card-fd5b054fe655c81533c8a1138ba55a82a7b9d085.tar.bz2 |
add date properties
Diffstat (limited to 'src/view/dates.rs')
-rw-r--r-- | src/view/dates.rs | 78 |
1 files changed, 78 insertions, 0 deletions
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<Error>, +} + +pub enum Msg { + UpdateAnniversary(String), + UpdateBirthday(String), + + Generate, +} + +#[derive(Clone, PartialEq, Properties)] +pub struct Props { + pub generated: Callback<Dates>, + pub weak_link: WeakComponentLink<DatesView>, +} + +impl VCardPropertyInputComponent<Dates> 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<Error> { + self.error.clone() + } +} + +impl Component for DatesView { + 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: Dates::new(), + error: None, + } + } + fn update(&mut self, msg: <Self as yew::Component>::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: <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 |