use super::*;
pub(crate) fn fixture_modal_class(visible: Signal<bool>) -> Signal<String> {
computed!(visible, |open: bool| -> String {
if open {
c_automation_visible().get_name().to_string()
} else {
c_automation_hidden().get_name().to_string()
}
})
}
pub(crate) fn fixture_theme() -> ThemeState {
let mobile: Signal<bool> = App::use_signal(|| false);
ThemeState::use_theme_state(mobile)
}
pub(crate) fn fixture_state() -> FixtureState {
FixtureState::new(
App::use_signal(|| 0),
App::use_signal(String::new),
App::use_signal(|| false),
App::use_signal(|| false),
App::use_signal(|| false),
App::use_signal(|| 0),
App::use_signal(|| 0),
)
}
pub(crate) fn increment_handler(state: FixtureState) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
state.get_count().set(state.get_count().get() + 1);
state.get_trusted().set(event.is_trusted());
}))
}
pub(crate) fn input_handler(state: FixtureState) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
if let Some(target) = event
.target()
.and_then(|target: EventTarget| target.dyn_into::<HtmlInputElement>().ok())
{
state.get_text().set(target.value());
state.get_trusted().set(event.is_trusted());
}
}))
}
pub(crate) fn modal_handler(visible: Signal<bool>, next: bool) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| visible.set(next)))
}
pub(crate) fn keyboard_handler(keys: Signal<i32>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
if let Ok(keyboard) = event.dyn_into::<KeyboardEvent>()
&& keyboard.key() == ENTER_KEY
{
keys.set(keys.get() + 1);
}
}))
}
pub(crate) fn scroll_handler(position: Signal<i32>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
if let Some(target) = event
.target()
.and_then(|target: EventTarget| target.dyn_into::<HtmlElement>().ok())
{
position.set(target.scroll_top());
}
}))
}