leptos_use/use_toggle.rs
1use crate::core::MaybeRwSignal;
2use leptos::prelude::*;
3
4/// A boolean switcher with utility functions.
5///
6/// ## Demo
7///
8/// [Link to Demo](https://github.com/Synphonyte/leptos-use/tree/main/examples/use_toggle)
9///
10/// ## Usage
11///
12/// ```
13/// # use leptos::*;
14/// # use leptos_use::{use_toggle, UseToggleReturn};
15/// #
16/// # #[component]
17/// # fn Demo() -> impl IntoView {
18/// let UseToggleReturn { toggle, value, set_value } = use_toggle(true);
19/// #
20/// # view! { }
21/// # }
22/// ```
23///
24/// ## See also
25///
26/// * [`fn@crate::use_cycle_list`]
27// #[doc(cfg(feature = "use_toggle"))]
28pub fn use_toggle(
29 initial_value: impl Into<MaybeRwSignal<bool>>,
30) -> UseToggleReturn<impl Fn() + Clone + Send + Sync + 'static> {
31 let initial_value = initial_value.into();
32 let (value, set_value) = initial_value.into_signal();
33
34 let toggle = move || {
35 set_value.update(|v| *v = !*v);
36 };
37
38 UseToggleReturn {
39 toggle,
40 value,
41 set_value,
42 }
43}
44
45/// Return type of [`fn@crate::use_toggle`].
46// #[doc(cfg(feature = "use_toggle"))]
47pub struct UseToggleReturn<F>
48where
49 F: Fn() + Clone + Send + Sync + 'static,
50{
51 /// Toggles the value between `true` and `false`.
52 pub toggle: F,
53 /// The current value as signal.
54 pub value: Signal<bool>,
55 /// Sets the current value to the given value.
56 pub set_value: WriteSignal<bool>,
57}