patternfly_dioxus/
label.rs

1use dioxus::prelude::*;
2
3#[allow(non_snake_case,dead_code)]
4#[inline_props]
5pub fn PfLabel<'a>(cx: Scope<'a>, icon_name: Option<&'a str>, append_class: Option<&'a str>, children: Element<'a>) -> Element {
6    let append_class = format!("pf-c-label {}", append_class.unwrap_or(""));
7    if icon_name.is_some() {
8        let icon_name = icon_name.unwrap();
9        cx.render(rsx! {
10            span { class: "{append_class}",
11                i { class: "fas fa-fw {icon_name}", aria_hidden: "true", } 
12                children
13            }
14        })
15    } else {
16        cx.render(rsx! {
17            span { class: "{append_class}", children }
18        })
19    }
20}
21
22#[allow(non_snake_case,dead_code)]
23#[inline_props]
24pub fn PfLabelGroup<'a> (cx: Scope, selected: &'a UseState<Vec<String>>) -> Element {
25    let is_close = use_state(&cx, || false);
26    let labels = selected.get().clone();
27    cx.render(rsx! {
28        div { class: "pf-c-label-group",
29            labels.into_iter().map(|label| rsx!{
30                div {
31                    onclick: move |_| {is_close.set(!is_close.get());},
32                    PfLabel {  "{label}" 
33                        i {
34                            class: "fas fa-times-circle pf-c-label__close",
35                            aria_hidden: "true",
36                            hidden: "{is_close}",
37                            onclick: move |_| {selected.set(selected.get().iter().filter(|x| **x != label).map(|x| x.to_string()).collect())}
38                        }
39                    }
40                }
41            })
42        }
43    })
44}