mirror of
https://github.com/adoyle0/thaw.git
synced 2025-03-13 05:59:49 -04:00
fix: checkbox item adds tracking value changes (#80)
This commit is contained in:
parent
559add3a3c
commit
977a3daec4
1 changed files with 20 additions and 8 deletions
|
@ -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);
|
||||||
|
|
||||||
|
create_effect(move |_| {
|
||||||
|
let is_checked =
|
||||||
|
checkbox_group_value.with(|value| item_key.with_value(|key| value.contains(key)));
|
||||||
|
|
||||||
|
if is_checked {
|
||||||
|
if !checked.get_untracked() {
|
||||||
|
checked.set(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if checked.get_untracked() {
|
||||||
|
checked.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
_ = checked.watch(move |checked| {
|
_ = checked.watch(move |checked| {
|
||||||
checkbox_group.0.update(move |checkbox_group| {
|
checkbox_group_value.update(move |value| {
|
||||||
if *checked {
|
if *checked {
|
||||||
checkbox_group.insert(item_key.get_value());
|
value.insert(item_key.get_value());
|
||||||
} else {
|
} else {
|
||||||
checkbox_group.remove(&item_key.get_value());
|
value.remove(&item_key.get_value());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue