feat: Checkbox label does not display default value

This commit is contained in:
luoxiao 2024-04-02 11:12:17 +08:00 committed by luoxiaozero
parent c0599acbe9
commit 807cc3c342

View file

@ -1,7 +1,4 @@
use crate::{ use crate::checkbox::{checkbox_group::use_checkbox_group, Checkbox};
checkbox::{checkbox_group::use_checkbox_group, Checkbox},
SignalWatch,
};
use leptos::*; use leptos::*;
use thaw_utils::OptionalProp; use thaw_utils::OptionalProp;
@ -12,41 +9,38 @@ pub fn CheckboxItem(
#[prop(into)] key: String, #[prop(into)] key: String,
) -> impl IntoView { ) -> impl IntoView {
let checkbox_group_value = use_checkbox_group().0; let checkbox_group_value = use_checkbox_group().0;
let checked = create_rw_signal(false); let checked = RwSignal::new(false);
let item_key = store_value(key); let item_key = StoredValue::new(key);
create_effect(move |_| { let is_checked = Memo::new(move |_| {
let is_checked = checkbox_group_value.with(|value| item_key.with_value(|key| value.contains(key)))
checkbox_group_value.with(|value| item_key.with_value(|key| value.contains(key))); });
if is_checked { Effect::new(move |_| {
if !checked.get_untracked() { checked.track();
checked.set(true);
} if is_checked.get_untracked() {
checkbox_group_value.update(move |value| {
item_key.with_value(|key| {
value.remove(key);
});
});
} else if checked.get_untracked() { } else if checked.get_untracked() {
checked.set(false); checkbox_group_value.update(move |value| {
value.insert(item_key.get_value());
});
} }
}); });
_ = checked.watch(move |checked| { if let Some(label) = label {
checkbox_group_value.update(move |value| { view! {
if *checked { <Checkbox class value=(is_checked, checked.write_only())>
value.insert(item_key.get_value()); {label}
} else { </Checkbox>
value.remove(&item_key.get_value()); }
}
});
});
let label = if let Some(label) = label {
label
} else { } else {
item_key.get_value() view! {
}; <Checkbox class value=(is_checked, checked.write_only()) />
}
view! {
<Checkbox class value=checked>
{label}
</Checkbox>
} }
} }