use crate::common::ValueType; use leptos::ev::{Event, Targeted}; use leptos::prelude::*; use leptos::web_sys::HtmlSelectElement; use std::collections::HashMap; /// A custom-styled select input. /// /// Takes a `Vec` as the set of inputs. Only one value may be selected, which is indicated /// by the `value` prop of the component. #[component] pub fn Select( #[prop()] value_list: Vec, #[prop(optional)] value: RwSignal, #[prop(into)] data_member: String, #[prop()] data_map: RwSignal>, #[prop(optional, into)] label: String, #[prop(default = RwSignal::new(false))] disabled: RwSignal, ) -> impl IntoView { let on_change = { let data_member = data_member.clone(); move |e: Targeted| { let target_value = e.target().value(); data_map.update(|map| { if let Some(val) = map.get_mut(&data_member) { *val = ValueType::String(Some(target_value)); } else { map.insert(data_member.clone(), ValueType::String(Some(target_value))); } }); } }; view! {
} }