Skip to main content

dioxus_bulma/components/
checkbox.rs

1use 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}