leptos_forms_rs/events/
event_system.rs1use crate::core::*;
7use crate::events::event_handlers::{
8 FormResetHandler, FormSubmitHandler as EventFormSubmitHandler,
9};
10use crate::events::event_types::EventHandler;
11use crate::events::field_event_handlers::{
12 FieldBlurHandler, FieldChangeHandler, FieldFocusHandler, FieldInputHandler,
13};
14use leptos::prelude::*;
15use std::collections::HashMap;
16
17pub struct EventSystem<T: Form + Send + Sync> {
19 form_handle: FormHandle<T>,
20 event_handlers: HashMap<String, Box<dyn EventHandler>>,
21}
22
23impl<T: Form + PartialEq + Clone + Send + Sync> EventSystem<T> {
24 pub fn new(form_handle: FormHandle<T>) -> Self {
26 Self {
27 form_handle,
28 event_handlers: HashMap::new(),
29 }
30 }
31
32 pub fn register_handler(&mut self, name: String, handler: Box<dyn EventHandler>) {
34 self.event_handlers.insert(name, handler);
35 }
36
37 pub fn get_submit_handler(&self) -> EventFormSubmitHandler<T> {
39 EventFormSubmitHandler::new(self.form_handle.clone())
40 }
41
42 pub fn get_reset_handler(&self) -> FormResetHandler<T> {
44 FormResetHandler::new(self.form_handle.clone())
45 }
46
47 pub fn get_field_change_handler(&self, field_name: String) -> FieldChangeHandler<T> {
49 FieldChangeHandler::new(self.form_handle.clone(), field_name)
50 }
51
52 pub fn get_field_focus_handler(&self, field_name: String) -> FieldFocusHandler<T> {
54 FieldFocusHandler::new(self.form_handle.clone(), field_name)
55 }
56
57 pub fn get_field_blur_handler(&self, field_name: String) -> FieldBlurHandler<T> {
59 FieldBlurHandler::new(self.form_handle.clone(), field_name)
60 }
61
62 pub fn get_field_input_handler(&self, field_name: String) -> FieldInputHandler<T> {
64 FieldInputHandler::new(self.form_handle.clone(), field_name)
65 }
66
67 pub fn form_handle(&self) -> &FormHandle<T> {
69 &self.form_handle
70 }
71
72 pub fn event_handlers(&self) -> &HashMap<String, Box<dyn EventHandler>> {
74 &self.event_handlers
75 }
76
77 pub fn has_handler(&self, name: &str) -> bool {
79 self.event_handlers.contains_key(name)
80 }
81
82 pub fn remove_handler(&mut self, name: &str) -> Option<Box<dyn EventHandler>> {
84 self.event_handlers.remove(name)
85 }
86
87 pub fn clear_handlers(&mut self) {
89 self.event_handlers.clear();
90 }
91
92 pub fn handler_count(&self) -> usize {
94 self.event_handlers.len()
95 }
96}
97
98pub struct EventSystemBuilder<T: Form + Send + Sync> {
100 form_handle: FormHandle<T>,
101 event_handlers: HashMap<String, Box<dyn EventHandler>>,
102}
103
104impl<T: Form + PartialEq + Clone + Send + Sync> EventSystemBuilder<T> {
105 pub fn new(form_handle: FormHandle<T>) -> Self {
107 Self {
108 form_handle,
109 event_handlers: HashMap::new(),
110 }
111 }
112
113 pub fn with_handler(mut self, name: String, handler: Box<dyn EventHandler>) -> Self {
115 self.event_handlers.insert(name, handler);
116 self
117 }
118
119 pub fn build(self) -> EventSystem<T> {
121 EventSystem {
122 form_handle: self.form_handle,
123 event_handlers: self.event_handlers,
124 }
125 }
126}
127
128pub struct EventSystemUtils;
130
131impl EventSystemUtils {
132 pub fn create_submit_handler<T: Form + PartialEq + Clone + Send + Sync>(
134 form_handle: FormHandle<T>,
135 ) -> EventFormSubmitHandler<T> {
136 EventFormSubmitHandler::new(form_handle)
137 }
138
139 pub fn create_reset_handler<T: Form + PartialEq + Clone + Send + Sync>(
141 form_handle: FormHandle<T>,
142 confirm_message: Option<String>,
143 ) -> FormResetHandler<T> {
144 let mut handler = FormResetHandler::new(form_handle);
145
146 if let Some(message) = confirm_message {
147 handler = handler.with_confirmation(message);
148 }
149
150 handler
151 }
152
153 pub fn create_field_change_handler<T: Form + PartialEq + Clone + Send + Sync>(
155 form_handle: FormHandle<T>,
156 field_name: String,
157 ) -> FieldChangeHandler<T> {
158 FieldChangeHandler::new(form_handle, field_name)
159 }
160}