mirror of
https://github.com/adoyle0/thaw.git
synced 2025-02-02 08:34:15 -05:00
feat: Checkbox label does not display default value
This commit is contained in:
parent
c0599acbe9
commit
807cc3c342
1 changed files with 27 additions and 33 deletions
|
@ -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>
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue