Files
dx-admin-template/src/components/ui/toggle.rs
2025-11-04 10:03:07 +08:00

37 lines
996 B
Rust

use dioxus::prelude::*;
fn merge_class(base: &str, extra: Option<String>) -> String {
if let Some(extra) = extra.filter(|extra| !extra.trim().is_empty()) {
format!("{base} {}", extra.trim())
} else {
base.to_string()
}
}
#[component]
pub fn Toggle(
#[props(default)] pressed: bool,
#[props(default)] disabled: bool,
#[props(into, default)] class: Option<String>,
#[props(optional)] on_pressed_change: Option<EventHandler<bool>>,
children: Element,
) -> Element {
let classes = merge_class("ui-toggle", class);
let handler = on_pressed_change.clone();
rsx! {
button {
class: classes,
"data-state": if pressed { "on" } else { "off" },
"aria-pressed": pressed,
disabled,
onclick: move |_| {
if let Some(callback) = handler.clone() {
callback.call(!pressed);
}
},
{children}
}
}
}