dioxus_tw_components/components/
select.rs1use dioxus::prelude::*;
2
3#[derive(Clone, PartialEq, Props)]
4pub struct SelectGroupProps {
5 #[props(extends = select, extends = GlobalAttributes)]
6 attributes: Vec<Attribute>,
7
8 #[props(optional)]
9 default_value: String,
10
11 #[props(optional)]
12 value: Signal<String>,
13
14 #[props(optional)]
15 onchange: EventHandler<FormEvent>,
16
17 children: Element,
18}
19
20#[component]
21pub fn SelectGroup(mut props: SelectGroupProps) -> Element {
22 let default_classes = "select-group";
23 crate::setup_class_attribute(&mut props.attributes, default_classes);
24
25 let oninput = move |event: FormEvent| {
26 props.value.set(event.data.value().clone());
27 props.onchange.call(event);
28 };
29
30 rsx! {
31 select {
32 oninput,
33 value: props.default_value,
34 ..props.attributes,
35 {props.children}
36 }
37 }
38}
39
40#[derive(Clone, PartialEq, Props)]
41pub struct SelectPlaceholderProps {
42 #[props(extends = option, extends = GlobalAttributes)]
43 attributes: Vec<Attribute>,
44
45 children: Element,
46}
47
48#[component]
49pub fn SelectPlaceholder(mut props: SelectPlaceholderProps) -> Element {
50 let default_classes = "select-placeholder";
51 crate::setup_class_attribute(&mut props.attributes, default_classes);
52
53 rsx! {
54 option { disabled: true, selected: true, value: r#"{""}"#, {props.children} }
55 }
56}
57
58#[derive(Clone, PartialEq, Props)]
59pub struct SelectLabelProps {
60 #[props(extends = optgroup, extends = GlobalAttributes)]
61 attributes: Vec<Attribute>,
62}
63
64#[component]
65pub fn SelectLabel(mut props: SelectLabelProps) -> Element {
66 let default_classes = "select-label";
67 crate::setup_class_attribute(&mut props.attributes, default_classes);
68
69 rsx! {
70 optgroup { ..props.attributes }
71 }
72}
73
74#[derive(Clone, PartialEq, Props)]
75pub struct SelectItemProps {
76 #[props(extends = option, extends = GlobalAttributes)]
77 attributes: Vec<Attribute>,
78
79 #[props(optional, default = None)]
80 selected: Option<bool>,
81
82 children: Element,
83}
84
85#[component]
86pub fn SelectItem(mut props: SelectItemProps) -> Element {
87 let default_classes = "select-item";
88 crate::setup_class_attribute(&mut props.attributes, default_classes);
89
90 if let Some(selected) = props.selected {
91 rsx! {
92 option { selected, ..props.attributes, {props.children} }
93 }
94 } else {
95 rsx! {
96 option { ..props.attributes,{props.children} }
97 }
98 }
99}