fix: checkbox item adds tracking value changes (#80)

This commit is contained in:
luoxiaozero 2024-01-12 20:43:45 +08:00 committed by GitHub
parent 559add3a3c
commit 977a3daec4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,19 +10,31 @@ pub fn CheckboxItem(
#[prop(optional, into)] class: MaybeSignal<String>, #[prop(optional, into)] class: MaybeSignal<String>,
#[prop(into)] key: String, #[prop(into)] key: String,
) -> impl IntoView { ) -> impl IntoView {
let checkbox_group = use_checkbox_group(); let checkbox_group_value = use_checkbox_group().0;
let checked = checkbox_group let checked = create_rw_signal(false);
.0
.with_untracked(|checkbox_group| checkbox_group.contains(&key));
let checked = create_rw_signal(checked);
let item_key = store_value(key); let item_key = store_value(key);
_ = checked.watch(move |checked| { create_effect(move |_| {
checkbox_group.0.update(move |checkbox_group| { let is_checked =
if *checked { checkbox_group_value.with(|value| item_key.with_value(|key| value.contains(key)));
checkbox_group.insert(item_key.get_value());
if is_checked {
if !checked.get_untracked() {
checked.set(true);
}
} else { } else {
checkbox_group.remove(&item_key.get_value()); if checked.get_untracked() {
checked.set(false);
}
}
});
_ = checked.watch(move |checked| {
checkbox_group_value.update(move |value| {
if *checked {
value.insert(item_key.get_value());
} else {
value.remove(&item_key.get_value());
} }
}); });
}); });