use super::*;
pub(crate) fn use_modal() -> UseModal {
UseModal::default()
}
pub(crate) fn open_modal(visible: Signal<bool>) {
visible.set(true);
Router::modal_push(
visible,
Rc::new(move || {
visible.set(false);
}),
);
}
pub(crate) fn dismiss_modal(visible: Signal<bool>) {
Router::modal_close_via_ui(visible);
visible.set(false);
}
pub(crate) fn modal_dismiss_handler(visible: Signal<bool>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
if !visible.get() {
return;
}
dismiss_modal(visible);
}))
}
pub(crate) 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(crate) 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(crate) fn modal_on_open_basic(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
open_modal(state.get_show_basic());
}))
}
pub(crate) fn modal_on_open_confirm(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
state.get_confirm_result().set(String::new());
open_modal(state.get_show_confirm());
}))
}
pub(crate) fn modal_on_open_form(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
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());
open_modal(state.get_show_form());
}))
}
pub(crate) fn modal_on_open_nested_1(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
open_modal(state.get_show_nested_1());
}))
}
pub(crate) fn modal_on_open_nested_2(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
open_modal(state.get_show_nested_2());
}))
}
pub(crate) fn modal_on_open_nested_3(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
open_modal(state.get_show_nested_3());
}))
}
pub(crate) fn modal_on_confirm(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
if !state.get_show_confirm().get() {
return;
}
state
.get_confirm_result()
.set("Action confirmed!".to_string());
dismiss_modal(state.get_show_confirm());
}))
}
pub(crate) fn modal_on_cancel_confirm(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
if !state.get_show_confirm().get() {
return;
}
state
.get_confirm_result()
.set("Action cancelled!".to_string());
dismiss_modal(state.get_show_confirm());
}))
}
pub(crate) fn modal_on_input_name(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
if let Some(target) = event.target()
&& let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
{
state.get_modal_name().set(input.value());
}
validate_modal_name(state);
}))
}
pub(crate) fn modal_on_input_email(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
if let Some(target) = event.target()
&& let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
{
state.get_modal_email().set(input.value());
}
validate_modal_email(state);
}))
}
pub(crate) fn modal_on_form_submit(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
if !state.get_show_form().get() {
return;
}
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()
));
dismiss_modal(state.get_show_form());
} else {
state.get_modal_error().set(validation_errors.join("; "));
}
}))
}
pub(crate) fn modal_on_cancel_form(state: UseModal) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
if !state.get_show_form().get() {
return;
}
state
.get_modal_submitted()
.set("Form cancelled!".to_string());
dismiss_modal(state.get_show_form());
}))
}