use crate::*;
pub(crate) fn use_toggle(signal: Signal<bool>) -> NativeEventHandler {
NativeEventHandler::create(NativeEventName::Click, move |_event: Event| {
let current: bool = signal.get();
signal.set(!current);
})
}
pub(crate) fn on_input_value(signal: Signal<String>) -> NativeEventHandler {
NativeEventHandler::create(NativeEventName::Input, move |event: Event| {
let value: Option<String> = event.target().and_then(|target: EventTarget| {
if let Ok(input) = target.clone().dyn_into::<HtmlInputElement>() {
return Some(input.value());
}
if let Ok(textarea) = target.clone().dyn_into::<HtmlTextAreaElement>() {
return Some(textarea.value());
}
if let Ok(select) = target.clone().dyn_into::<HtmlSelectElement>() {
return Some(select.value());
}
None
});
if let Some(value) = value {
signal.set(value);
}
})
}
pub(crate) fn on_change_value(signal: Signal<String>) -> NativeEventHandler {
NativeEventHandler::create(NativeEventName::Change, move |event: Event| {
let value: Option<String> = event.target().and_then(|target: EventTarget| {
if let Ok(input) = target.clone().dyn_into::<HtmlInputElement>() {
return Some(input.value());
}
if let Ok(select) = target.clone().dyn_into::<HtmlSelectElement>() {
return Some(select.value());
}
if let Ok(textarea) = target.clone().dyn_into::<HtmlTextAreaElement>() {
return Some(textarea.value());
}
None
});
if let Some(value) = value {
signal.set(value);
}
})
}
pub(crate) fn on_change_checked(signal: Signal<bool>) -> NativeEventHandler {
NativeEventHandler::create(NativeEventName::Change, move |event: Event| {
if let Some(target) = event.target()
&& let Ok(input) = target.clone().dyn_into::<HtmlInputElement>()
{
signal.set(input.checked());
}
})
}