use crate::common::ValueType; use leptos::prelude::*; use std::collections::HashMap; #[component] pub fn Radio( #[prop()] checked: Signal, #[prop(into)] on_change: Callback<(), ()>, #[prop(into)] value: String, #[prop(default = RwSignal::new(false))] disabled: RwSignal, ) -> impl IntoView { view! { } } #[component] pub fn RadioList( // #[prop(default = RwSignal::new(String::new()))] selected: RwSignal, #[prop(into)] data_member: String, #[prop()] data_map: RwSignal>, #[prop()] items: Vec, #[prop(default = RwSignal::new(false))] disabled: RwSignal, #[prop(optional, into)] label: String, ) -> impl IntoView { view! {
{label} {items .into_iter() .map(|item| { let checked_signal = Signal::derive({ let item_name = item.clone(); let data_member = data_member.clone(); move || { // Check if the value is contained in the data map's fields let map = data_map.get(); let value = map.get(&data_member); let mut result = false; if let Some(val) = value { if val.is_string() { result = val.as_string().unwrap().unwrap() == item_name } } result } }); let on_change = { let item_name = item.clone(); let data_member = data_member.clone(); move || { // Update the hash map data_map.update(|map| { if let Some(val) = map.get_mut(&data_member) { *val = ValueType::String(Some(item_name.clone())); } else { map.insert(data_member.clone(), ValueType::String(Some(item_name.clone()))); } }); } }; view! { } }) .collect::>()}
} }