mirror of
https://github.com/mztlive/dx-admin-template.git
synced 2025-12-22 21:59:59 +00:00
37 lines
996 B
Rust
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}
|
|
}
|
|
}
|
|
}
|