1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use dioxus::prelude::*;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Variation {
    Default,
    Info,
    Success,
    Warning,
    Danger,
}

#[allow(non_snake_case)]
#[inline_props]
pub fn PfAlert<'a>(
    cx: Scope<'a>,
    variation: Option<Variation>,
    title: Option<&'a str>,
    children: Element<'a>,
) -> Element {
    let title = title.unwrap_or("");
    let variation = variation.unwrap_or(Variation::Default);
    let css = match variation {
        Variation::Default => "pf-c-alert",
        Variation::Info => "pf-c-alert pf-m-info",
        Variation::Success => "pf-c-alert pf-m-success",
        Variation::Warning => "pf-c-alert pf-m-warning",
        Variation::Danger => "pf-c-alert pf-m-danger",
    };

    let iconcss = match variation {
        Variation::Default => "fas fa-exclamation-circle",
        Variation::Info => "fas fa-info-circle",
        Variation::Success => "fas fa-check-circle",
        Variation::Warning => "fas fa-exclamation-triangle",
        Variation::Danger => "fas fa-exclamation-circle",
    };

    cx.render(rsx! {
        div {
            class: "{css}",
            div { class: "pf-c-alert__icon",
                i { class: "{iconcss}",}
            },

            p { class: "pf-c-alert__title",
                span { class: "pf-screen-reader", "Default alert:" },
                "{title}"
            }
                
            rsx!{ p { class: "pf-c-alert__description", children }}
    
        },

    })
}