dioxus-tw-components 0.2.11

Components made for Dioxus
Documentation
use dioxus::prelude::*;

#[derive(Clone, PartialEq, Props)]
pub struct ToggleProps {
    #[props(extends = button, extends = GlobalAttributes)]
    attributes: Vec<Attribute>,
    #[props(optional)]
    checked: Option<bool>,

    #[props(optional)]
    onclick: EventHandler<MouseEvent>,

    children: Element,
}

#[component]
pub fn Toggle(mut props: ToggleProps) -> Element {
    let default_classes = "toggle";
    crate::setup_class_attribute(&mut props.attributes, default_classes);

    let mut interior_sig = use_signal(|| props.checked.unwrap_or_default());

    let onclick = move |event| {
        interior_sig.toggle();
        props.onclick.call(event);
    };

    rsx! {
        button {
            "data-state": if interior_sig() { "checked" } else { "unchecked" },
            r#type: "button",
            onclick,
            ..props.attributes,
            span { class: "toggle-thumb" }
            {props.children}
        }
    }
}