leptos-use/examples/use_interval_fn/src/main.rs
2023-07-27 19:48:21 +01:00

72 lines
1.7 KiB
Rust

use leptos::*;
use leptos_use::docs::demo_or_body;
use leptos_use::use_interval_fn;
use leptos_use::utils::Pausable;
#[component]
fn Demo() -> impl IntoView {
let greetings = [
"Hello",
"Hi",
"Yo!",
"Hey",
"Hola",
"こんにちは",
"Bonjour",
"Salut!",
"你好",
"Привет",
];
let (word, set_word) = create_signal(greetings[0]);
let (interval, set_interval) = create_signal(500_u64);
let (index, set_index) = create_signal(0);
let Pausable {
pause,
resume,
is_active,
} = use_interval_fn(
move || {
set_index.set((index.get() + 1) % greetings.len());
set_word.set(greetings[index.get()]);
},
interval,
);
view! {
<p>{move || word.get()}</p>
<p>
"Interval:"
<input
prop:value=move || interval.get()
on:input=move |e| set_interval.set(event_target_value(&e).parse().unwrap())
type="number"
placeholder="interval"
/>
</p>
<Show
when=move || is_active.get()
fallback=move || {
let resume = resume.clone();
view! { <button on:click=move |_| resume()>"Resume"</button> }
}
>
{
let pause = pause.clone();
view! { <button on:click=move |_| pause()>"Pause"</button> }
}
</Show>
}
}
fn main() {
_ = console_log::init_with_level(log::Level::Debug);
console_error_panic_hook::set_once();
mount_to(demo_or_body(), || {
view! { <Demo/> }
})
}