use crate::*;
#[derive(Clone, Copy)]
pub struct UseModal {
pub show_basic: Signal<bool>,
pub show_confirm: Signal<bool>,
pub show_form: Signal<bool>,
pub confirm_result: Signal<String>,
pub modal_name: Signal<String>,
pub modal_email: Signal<String>,
pub modal_submitted: Signal<String>,
}
pub fn use_modal() -> UseModal {
UseModal {
show_basic: use_signal(|| false),
show_confirm: use_signal(|| false),
show_form: use_signal(|| false),
confirm_result: use_signal(|| "".to_string()),
modal_name: use_signal(|| "".to_string()),
modal_email: use_signal(|| "".to_string()),
modal_submitted: use_signal(|| "".to_string()),
}
}
pub fn modal_on_open_basic(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.show_basic.set(true);
})
}
pub fn modal_on_open_confirm(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.show_confirm.set(true);
state.confirm_result.set("".to_string());
})
}
pub fn modal_on_open_form(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.show_form.set(true);
state.modal_name.set("".to_string());
state.modal_email.set("".to_string());
state.modal_submitted.set("".to_string());
})
}
pub fn modal_on_confirm(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
state.confirm_result.set("Action confirmed!".to_string());
state.show_confirm.set(false);
})
}
pub fn modal_on_form_submit(state: UseModal) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
let name: String = state.modal_name.get();
let email: String = state.modal_email.get();
if !name.trim().is_empty() && !email.trim().is_empty() {
state
.modal_submitted
.set(format!("Signed up: {} ({})", name, email));
state.show_form.set(false);
}
})
}