windjammer_ui/components/generated/
select.rs1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3pub struct Select {
4 options: Vec<SelectOption>,
5 selected: String,
6 placeholder: String,
7 disabled: bool,
8 size: SelectSize,
9 class: String,
10}
11
12pub struct SelectOption {
13 value: String,
14 label: String,
15}
16
17pub enum SelectSize {
18 Small,
19 Medium,
20 Large,
21}
22
23impl Select {
24 #[inline]
25 pub fn new() -> Select {
26 Select {
27 options: Vec::new(),
28 selected: String::new(),
29 placeholder: "Select an option".to_string(),
30 disabled: false,
31 size: SelectSize::Medium,
32 class: String::new(),
33 }
34 }
35 #[inline]
36 pub fn option(mut self, value: String, label: String) -> Select {
37 self.options.push(SelectOption { value, label });
38 self
39 }
40 #[inline]
41 pub fn selected(mut self, selected: String) -> Select {
42 self.selected = selected;
43 self
44 }
45 #[inline]
46 pub fn placeholder(mut self, placeholder: String) -> Select {
47 self.placeholder = placeholder;
48 self
49 }
50 #[inline]
51 pub fn disabled(mut self, disabled: bool) -> Select {
52 self.disabled = disabled;
53 self
54 }
55 #[inline]
56 pub fn size(mut self, size: SelectSize) -> Select {
57 self.size = size;
58 self
59 }
60 #[inline]
61 pub fn class(mut self, class: String) -> Select {
62 self.class = class;
63 self
64 }
65 pub fn render(&self) -> String {
66 let size_style = match self.size {
67 SelectSize::Small => "padding: 4px 8px; font-size: 12px;",
68 SelectSize::Medium => "padding: 8px 12px; font-size: 14px;",
69 SelectSize::Large => "padding: 12px 16px; font-size: 16px;",
70 };
71 let disabled_attr = {
72 if self.disabled {
73 " disabled"
74 } else {
75 ""
76 }
77 };
78 let mut html = String::new();
79 html.push_str("<select class=\"wj-select ");
80 html.push_str(self.class.as_str());
81 html.push_str("\" style=\"");
82 html.push_str(size_style);
83 html.push_str(
84 " border: 1px solid #d1d5db; border-radius: 6px; background: white; cursor: pointer;\"",
85 );
86 html.push_str(disabled_attr);
87 html.push('>');
88 if !self.placeholder.is_empty() {
89 html.push_str("<option value=\"\" disabled");
90 if self.selected.is_empty() {
91 html.push_str(" selected")
92 }
93 html.push_str(">");
94 html.push_str(self.placeholder.as_str());
95 html.push_str("</option>")
96 }
97 for opt in self.options.iter() {
98 html.push_str("<option value=\"");
99 html.push_str(opt.value.as_str());
100 html.push('"');
101 if opt.value == self.selected {
102 html.push_str(" selected")
103 }
104 html.push('>');
105 html.push_str(opt.label.as_str());
106 html.push_str("</option>");
107 }
108 html.push_str("</select>");
109 html
110 }
111}