windjammer_ui/components/generated/
accordion.rs

1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
6pub struct AccordionItem {
7    pub title: String,
8    pub content: String,
9    pub open: bool,
10}
11
12impl AccordionItem {
13    #[inline]
14    pub fn new(title: String, content: String) -> AccordionItem {
15        AccordionItem {
16            title,
17            content,
18            open: false,
19        }
20    }
21    #[inline]
22    pub fn open(mut self, open: bool) -> AccordionItem {
23        self.open = open;
24        self
25    }
26}
27
28#[derive(Debug, Clone, Default)]
29pub struct Accordion {
30    pub items: Vec<AccordionItem>,
31    pub allow_multiple: bool,
32}
33
34impl Accordion {
35    #[inline]
36    pub fn new() -> Accordion {
37        Accordion {
38            items: Vec::new(),
39            allow_multiple: false,
40        }
41    }
42    #[inline]
43    pub fn item(mut self, item: AccordionItem) -> Accordion {
44        self.items.push(item);
45        self
46    }
47    #[inline]
48    pub fn allow_multiple(mut self, allow: bool) -> Accordion {
49        self.allow_multiple = allow;
50        self
51    }
52}
53
54impl Renderable for Accordion {
55    #[inline]
56    fn render(self) -> String {
57        let mut html = "<div class='wj-accordion'>".to_string();
58        let mut i = 0;
59        while i < (self.items.len() as i64) {
60            let item = &self.items[i as usize];
61            let open_attr = {
62                if item.open {
63                    " open".to_string()
64                } else {
65                    "".to_string()
66                }
67            };
68            html = format!(
69                "{}<details class='wj-accordion-item'{}>
70  <summary class='wj-accordion-title'>{}</summary>
71  <div class='wj-accordion-content'>
72    {}
73  </div>
74</details>",
75                html, open_attr, item.title, item.content
76            );
77            i += 1;
78        }
79        format!("{}</div>", html)
80    }
81}