patternfly_dioxus/
modal.rs

1use dioxus::prelude::*;
2
3#[allow(non_snake_case,dead_code)]
4#[inline_props]
5pub fn PfSmallModal<'a>(
6    cx: Scope<'a>,
7    title: &'a str,
8    children: Element<'a>,
9    is_close: &'a UseState<bool>,
10) -> Element {
11    // <div
12    //   class="pf-c-modal-box pf-m-sm"
13    //   role="dialog"
14    //   aria-modal="true"
15    //   aria-labelledby="modal-sm-title"
16    //   aria-describedby="modal-sm-description"
17    // >
18    //   <button
19    //     class="pf-c-button pf-m-plain"
20    //     type="button"
21    //     aria-label="Close dialog"
22    //   >
23    //     <i class="fas fa-times" aria-hidden="true"></i>
24    //   </button>
25    //   <header class="pf-c-modal-box__header">
26    //     <h1 class="pf-c-modal-box__title" id="modal-sm-title">Modal title</h1>
27    //   </header>
28    //   <div class="pf-c-modal-box__body" id="modal-sm-description">
29    //     Static text describing modal purpose. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
30    //     tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
31    //     quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
32    //     consequat.
33    //   </div>
34    //   <footer class="pf-c-modal-box__footer">Modal footer</footer>
35    // </div>
36    if *is_close.get() {
37        cx.render(rsx! {""})
38    } else {
39        cx.render(rsx!{
40            div {
41                class: "pf-c-backdrop",
42                hidden: "{is_close}",
43                div{ class: "pf-c-modal-box pf-m-sm",
44                    style: "top:50%;left:50%;transform:translate(-50%,-50%);",
45                    role: "dialog",
46                    aria_modal: "true",
47                    aria_labelledby: "modal-sm-title",
48                    aria_describedby: "modal-sm-description",
49                    button { class: "pf-c-button pf-m-plain", r#type: "button", aria_label: "Close dialog",
50                        onclick: move |_| { is_close.set(true); },
51                        i { class: "fas fa-times", aria_hidden: "true" }
52                    },
53                    header { class: "pf-c-modal-box__header",
54                        h1 { class: "pf-c-modal-box__title", "{title}" }
55                    },
56                    div { class: "pf-c-modal-box__body", children }
57                }
58            }
59     })
60    }
61}
62
63#[allow(non_snake_case,dead_code)]
64#[inline_props]
65pub fn PfModal<'a>(
66    cx: Scope<'a>,
67    title: &'a str,
68    children: Element<'a>,
69    is_close: &'a UseState<bool>,
70) -> Element {
71    // let is_close = use_state(&cx, || false);
72
73    if *is_close.get() {
74        cx.render(rsx! {""})
75    
76    } else {
77        cx.render(rsx! {
78            div {
79                class: "pf-c-backdrop",
80                hidden: "{is_close}",
81                div {
82                    class: "pf-c-modal-box",
83                    style: "top:50%;left:50%;transform:translate(-50%,-50%);",
84                    role: "dialog",
85                    aria_modal: "true",
86                    aria_labelledby: "modal-title",
87                    aria_describedby: "modal-description",
88                    button {
89                        class: "pf-c-button pf-m-plain",
90                        r#type: "button",
91                        aria_label: "Close",
92                        onclick: move |_| { is_close.set(true); },
93                        i {
94                            class: "fas fa-times",
95                            aria_hidden: "true",
96                        }
97                    },
98                    header {
99                        class: "pf-c-modal-box__header",
100                        h1 {
101                            class: "pf-c-modal-box__title",
102                            id: "modal-title",
103                            "{title}"
104                        }
105                    },
106                    div {
107                        class: "pf-c-modal-box__body",
108                        children
109                    },
110
111                }
112            }
113
114        })
115    }
116}