use crate::*;
pub fn use_modal() -> UseModal {
UseModal::default()
}
pub fn validate_modal_name(state: UseModal) {
let name_value: String = state.get_modal_name().get();
if name_value.trim().is_empty() {
state.get_name_error().set("Name is required".to_string());
} else {
state.get_name_error().set(String::new());
}
}
pub fn validate_modal_email(state: UseModal) {
let email_value: String = state.get_modal_email().get();
if email_value.trim().is_empty() {
state.get_email_error().set("Email is required".to_string());
} else if !email_value.contains('@') || !email_value.contains('.') {
state
.get_email_error()
.set("Please enter a valid email".to_string());
} else {
state.get_email_error().set(String::new());
}
}
pub fn modal_on_open_basic(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.get_show_basic().set(true);
})
}
pub fn modal_on_open_confirm(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.get_show_confirm().set(true);
state.get_confirm_result().set(String::new());
})
}
pub fn modal_on_open_form(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.get_show_form().set(true);
state.get_modal_name().set(String::new());
state.get_modal_email().set(String::new());
state.get_modal_submitted().set(String::new());
state.get_modal_error().set(String::new());
state.get_name_error().set(String::new());
state.get_email_error().set(String::new());
})
}
pub fn modal_on_confirm(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state
.get_confirm_result()
.set("Action confirmed!".to_string());
state.get_show_confirm().set(false);
})
}
pub fn modal_on_input_name(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Input, move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
state.get_modal_name().set(input_event.get_value().clone());
}
validate_modal_name(state);
})
}
pub fn modal_on_input_email(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Input, move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
state.get_modal_email().set(input_event.get_value().clone());
}
validate_modal_email(state);
})
}
pub fn modal_on_form_submit(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
validate_modal_name(state);
validate_modal_email(state);
let name_error_value: String = state.get_name_error().get();
let email_error_value: String = state.get_email_error().get();
let mut validation_errors: Vec<String> = Vec::new();
if !name_error_value.is_empty() {
validation_errors.push(name_error_value);
}
if !email_error_value.is_empty() {
validation_errors.push(email_error_value);
}
if validation_errors.is_empty() {
state.get_modal_error().set(String::new());
state.get_modal_submitted().set(format!(
"Signed up: {} ({})",
state.get_modal_name().get(),
state.get_modal_email().get()
));
state.get_show_form().set(false);
} else {
state.get_modal_error().set(validation_errors.join("; "));
}
})
}