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}