patternfly_dioxus/
accordion.rs

1use dioxus::prelude::*;
2
3#[allow(non_snake_case,dead_code)]
4#[inline_props]
5pub fn PfAccordion<'a>(
6    cx: Scope<'a>,
7    children: Element<'a>,
8    title: &'a str,
9    is_open: Option<bool>,
10) -> Element {
11    let default_open_flag = !is_open.unwrap_or(false);
12    let is_close_accordion = use_state(&cx, || default_open_flag);
13    let buttoncss = if *is_close_accordion.get() {
14        "pf-c-accordion__toggle"
15    } else {
16        "pf-c-accordion__toggle pf-m-expanded"
17    };
18    cx.render(rsx! {
19        div {class: "pf-c-accordion",
20        h3 {
21            button { class: "{buttoncss} ", r#type: "button", aria_expanded: "false",
22            onclick: move |_| { is_close_accordion.set(!is_close_accordion.get()); },
23
24                span { class: "pf-c-accordion__toggle-text", "{title}" },
25                span { class: "pf-c-accordion__toggle-icon",
26                    i { class: "fas fa-angle-right", aria_hidden: "false" }
27                }
28            }
29        }
30        div { class: "pf-c-accordion__expanded-content pf-m-expanded",
31            div { class: "pf-c-accordion__expanded-content-body", hidden:"{is_close_accordion}" , children,  }
32        }
33    }
34    })
35}