From 9698e6952cb568f6dce49b35bd47b52d992c0f9a Mon Sep 17 00:00:00 2001 From: jelemux Date: Wed, 17 Feb 2021 22:27:41 +0100 Subject: refactor: put input_fields and property_groups into their own modules --- src/model/mod.rs | 239 +------------------------------------------------------ 1 file changed, 3 insertions(+), 236 deletions(-) (limited to 'src/model/mod.rs') diff --git a/src/model/mod.rs b/src/model/mod.rs index b8dcfff..4e3ad87 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -1,16 +1,10 @@ use crate::model::utility::File; use crate::view::property_group::*; -use wasm_bindgen::closure::Closure; -use wasm_bindgen::JsCast; -use web_sys::FileReader; +use input_fields::VCardPropertyInputField; use yew::prelude::*; -use yew::services::ConsoleService; -pub mod address; -pub mod name; -pub mod organizational; -pub mod other_identification; -pub mod telephone; +pub mod input_fields; +pub mod property_groups; pub mod utility; pub mod vcard; @@ -56,230 +50,3 @@ where pub struct Error { pub msg: String, } - -/// Type that represents the visiual appearance of an input field. -pub enum VCardPropertyInputField { - Text { - label: String, - id: Option, - placeholder: Option, - oninput: Callback, - value: String, - typ: String, - }, - File { - label: String, - name: String, - callback: Callback>, - value: Option, - }, - Select { - label: String, - id: Option, - options: Vec<(String, String)>, - onchange: Callback, - value: String, - }, - CheckBox { - label: String, - id: Option, - onclick: Callback, - value: bool, - }, -} - -impl VCardPropertyInputField { - /// Returns a `Html` representation of the `VCardPropertyInputField`. - pub fn render(&self) -> Html { - match self { - Self::Text { - label, - id, - placeholder, - oninput, - value: _, - typ, - } => Self::text_field_input(label, id, placeholder, oninput, typ), - Self::File { - label, - name, - callback, - value, - } => Self::file_field_input(label, name, callback, value), - Self::Select { - label, - id, - options, - onchange, - value, - } => Self::select_field_input(label, id, options, onchange, value), - Self::CheckBox { - label, - id, - onclick, - value, - } => Self::checkbox_field_input(label, id, value, onclick), - } - } - /// Returns an `Html` representation of a text input field with the given parameters. - fn text_field_input( - label: &str, - id: &Option, - placeholder: &Option, - oninput: &Callback, - typ: &str, - ) -> Html { - html! { -
- -
- -
-
- } - } - /// Returns an `Html` representation of a file input field with the given parameters. - fn file_field_input( - label: &str, - name: &str, - callback: &Callback>, - file: &Option, - ) -> Html { - let callback = callback.clone(); - let onchange = Callback::<()>::default(); - let onchange = onchange.reform(move |c: ChangeData| { - if let ChangeData::Files(files) = c { - match files.item(0) { - Some(file) => { - let file_reader = FileReader::new().unwrap(); - match file_reader.read_as_data_url(&file) { - Ok(_) => (), - Err(_) => ConsoleService::warn("Error: Couldn't get file as data url."), - }; - - let callback = callback.clone(); - let onload = Closure::wrap(Box::new(move |event: Event| { - let file_reader: FileReader = - event.target().unwrap().dyn_into().unwrap(); - let data_url: Option = - file_reader.result().unwrap().as_string(); - match data_url { - Some(content) => callback.emit(Some(File { - name: file.name(), - content, - })), - None => { - ConsoleService::warn("Couldn't get data url as string."); - callback.emit(None); - } - }; - }) as Box); - - file_reader.set_onload(Some(onload.as_ref().unchecked_ref())); - onload.forget(); - } - None => callback.emit(None), - } - } else { - callback.emit(None); - } - }); - html! { -
- -
- -
-
- } - } - fn select_field_input( - label: &str, - id: &Option, - options: &Vec<(String, String)>, - onchange: &Callback, - value: &str, - ) -> Html { - html! { -
- -
- -
- -
- } - } - /// Returns an `Html` representation of a checkbox input field with the given parameters. - fn checkbox_field_input( - label: &str, - id: &Option, - checked: &bool, - onclick: &Callback, - ) -> Html { - html! { -
- -
- } - } -} -- cgit v1.2.3