dioxus_bulma/components/
checkbox.rs1use dioxus::prelude::*;
2use crate::utils::build_class;
3
4#[derive(Props, Clone, PartialEq)]
5pub struct CheckboxProps {
6 #[props(default)]
7 pub checked: Option<bool>,
8 #[props(default)]
9 pub disabled: Option<bool>,
10 #[props(default)]
11 pub name: Option<String>,
12 #[props(default)]
13 pub value: Option<String>,
14 #[props(default)]
15 pub onchange: Option<EventHandler<FormEvent>>,
16 #[props(default)]
17 pub id: Option<String>,
18 #[props(default)]
19 pub class: Option<String>,
20 #[props(default)]
21 pub style: Option<String>,
22 pub children: Element,
23}
24
25#[component]
26pub fn Checkbox(props: CheckboxProps) -> Element {
27 let checked = props.checked.unwrap_or(false);
28 let disabled = props.disabled.unwrap_or(false);
29
30 let base_classes = vec!["checkbox"];
31 let optional_classes = vec![props.class.clone()];
32 let final_class = build_class(&base_classes, &optional_classes);
33 let checkbox_style = props.style.as_deref().unwrap_or("");
34
35 rsx! {
36 label {
37 class: "{final_class}",
38 style: "{checkbox_style}",
39 id: props.id.clone(),
40 input {
41 r#type: "checkbox",
42 checked: checked,
43 disabled: disabled,
44 name: props.name.as_deref(),
45 value: props.value.as_deref().unwrap_or("on"),
46 onchange: move |evt| {
47 if let Some(handler) = &props.onchange {
48 handler.call(evt);
49 }
50 }
51 }
52 " "
53 {props.children}
54 }
55 }
56}