daisy_rsx/
modal.rs

1#![allow(non_snake_case)]
2
3use dioxus::prelude::*;
4
5#[derive(Props, Clone, PartialEq)]
6pub struct ModalProps {
7    trigger_id: String,
8    children: Element,
9    submit_action: Option<String>,
10    class: Option<String>,
11}
12
13#[component]
14pub fn Modal(props: ModalProps) -> Element {
15    let class = if let Some(class) = props.class {
16        format!("modal {}", class)
17    } else {
18        "modal".to_string()
19    };
20    rsx!(
21        if let Some(action) = &props.submit_action {
22            form {
23                action: "{action}",
24                method: "post",
25                dialog {
26                    class: "{class}",
27                    id: "{props.trigger_id}",
28                    {props.children}
29                }
30            }
31        } else {
32            dialog {
33                class: "{class}",
34                id: "{props.trigger_id}",
35                {props.children}
36            }
37        }
38    )
39}
40
41#[derive(Props, Clone, PartialEq)]
42pub struct ModalBodyProps {
43    children: Element,
44    class: Option<String>,
45}
46
47#[component]
48pub fn ModalBody(props: ModalBodyProps) -> Element {
49    let class = if let Some(class) = props.class {
50        class
51    } else {
52        "".to_string()
53    };
54
55    let class = format!("modal-box {}", class);
56    rsx!(
57        div {
58            class: "{class}",
59            {props.children}
60        }
61    )
62}
63
64#[derive(Props, Clone, PartialEq)]
65pub struct ModalActionProps {
66    children: Element,
67    class: Option<String>,
68}
69
70#[component]
71pub fn ModalAction(props: ModalActionProps) -> Element {
72    let class = if let Some(class) = props.class {
73        class
74    } else {
75        "".to_string()
76    };
77
78    let class = format!("modal-action {}", class);
79    rsx!(
80        div {
81            class: "{class}",
82            {props.children}
83        }
84    )
85}