Skip to main content

leptos_use_toggle/
use_toggle.rs

1use crate::{MaybeRwSignal, UseToggleReturn};
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_toggle::{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`]
27pub fn use_toggle(
28    initial_value: impl Into<MaybeRwSignal<bool>>,
29) -> UseToggleReturn<impl Fn() + Clone + Send + Sync + 'static> {
30    let initial_value = initial_value.into();
31    let (value, set_value) = initial_value.into_signal();
32
33    let toggle = move || {
34        set_value.update(|v| *v = !*v);
35    };
36
37    UseToggleReturn {
38        toggle,
39        value,
40        set_value,
41    }
42}