darth_ui/components/examples/form/
register.rs1#![cfg(feature = "examples")]
2use crate::components::button::button::{Button, ButtonBuild};
3use crate::components::container::container::ContainerBuild;
4use crate::components::form::components::text::{InputBuild, InputText, LabelBuild};
5use crate::components::form::form::{Form, FormBuild};
6use crate::components::icons::{icon::Icon, icons::IconBuild};
7use crate::components::toast::toast::{toast, ToastBodyBuild, ToastBuild, ToastPosition};
8use darth_rust::DarthRust;
9use leptos::*;
10
11#[derive(DarthRust, Debug)]
12pub struct Form {
13 #[pattern(r"^.{3,32}$")]
14 #[pattern_notify("user must be valid")]
15 user: String,
16 #[pattern(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")]
17 #[pattern_notify("e-mail must be valid")]
18 email: String,
19 #[pattern(r"^.{6,32}$")]
20 #[pattern_notify("password must be valid")]
21 password: String,
22}
23
24#[component]
25pub fn RegisterForm() -> impl IntoView {
26 view! {
27 <Form props=FormBuild::new()
28 .class("")
29 .submit(|hashmap, _| {
30 let user = hashmap.get("user").expect("Input name user not found");
31 let email = hashmap.get("email").expect("Input name email not found");
32 let password = hashmap.get("password").expect("Input name password not found");
33 let form = Form::new()
34 .user(user)
35 .email(email)
36 .password(password)
37 .build();
38 if let Ok(form) = form {
39 let body_content = format!(
40 "(200, user: {}, email: {}, password: {})",
41 form.user, form.email, form.password
42 );
43 toast(ToastBuild::new()
44 .class("bg-green-500")
45 .position(ToastPosition::TopEnd)
46 .duration_seconds(3)
47 .body(
48 ToastBodyBuild::new()
49 .class("p-2")
50 .content(body_content)
51 .tag("p")
52 )
53 );
54 } else if let Err(content) = form {
55 toast(ToastBuild::new()
56 .class("bg-indigo-600")
57 .position(ToastPosition::TopMid)
58 .duration_seconds(10)
59 .body(
60 ToastBodyBuild::new()
61 .class("p-2 font-bold")
62 .content(content)
63 )
64 .unique(true)
65 );
66 }
67 })>
68 <InputText props=InputBuild::new()
69 .label(LabelBuild::new()
70 .name("User")
71 .forhtml("User")
72 )
73 .icon(IconBuild::new()
74 .class("text-white")
75 .icon(Icon::User)
76 .size::<usize>(24)
77 )
78 .input_box(ContainerBuild::new()
79 .class("box_ghost hover:border-indigo-400")
80 )
81 .container(ContainerBuild::new()
82 .class("p-2")
83 )
84 .class("input focus:bg-indigo-950")
85 .placeholder("Your user")
86 .name("user")
87 />
88 <InputText props=InputBuild::new()
89 .label(LabelBuild::new()
90 .name("Email")
91 .forhtml("Email")
92 )
93 .icon(IconBuild::new()
94 .class("text-white")
95 .icon(Icon::Email)
96 .size::<usize>(24)
97 )
98 .input_box(ContainerBuild::new()
99 .class("box_ghost border-white hover:border-indigo-400")
100 )
101 .container(ContainerBuild::new()
102 .class("p-2")
103 )
104 .class("input focus:bg-indigo-950")
105 .placeholder("Your best email")
106 .name("email")
107 />
108 <InputText props=InputBuild::new()
109 .label(LabelBuild::new()
110 .name("password")
111 .forhtml("Password")
112 )
113 .icon(IconBuild::new()
114 .class("text-white")
115 .icon(Icon::Key)
116 .size::<usize>(24)
117 )
118 .input_box(ContainerBuild::new()
119 .class("box_ghost hover:border-indigo-400")
120 )
121 .container(ContainerBuild::new()
122 .class("p-2")
123 )
124 .class("input focus:bg-indigo-950")
125 .placeholder("Your password")
126 .name("password")
127 />
128 <Button props=ButtonBuild::new()
129 .class("button_sunset w-full")
130 .kind("submit")
131 >
132 "Register"
133 </Button>
134 </Form>
135 }
136}