leptos-use/examples/watch_pausable/src/main.rs

60 lines
1.7 KiB
Rust
Raw Normal View History

2023-06-09 23:10:33 +01:00
use leptos::*;
use leptos_use::docs::{demo_or_body, Note};
use leptos_use::{watch_pausable, WatchPausableReturn};
#[component]
fn Demo(cx: Scope) -> impl IntoView {
let input = create_node_ref(cx);
let (log, set_log) = create_signal(cx, "".to_string());
let (source, set_source) = create_signal(cx, "".to_string());
let WatchPausableReturn {
pause,
resume,
is_active,
2023-06-10 03:19:00 +01:00
..
} = watch_pausable(cx, move || source.get(), move |v, _, _| {
2023-06-09 23:10:33 +01:00
set_log.update(|log| *log = format!("{log}Changed to \"{v}\"\n"));
});
let clear = move |_| set_log.set("".to_string());
2023-06-09 23:10:33 +01:00
let pause = move |_| {
set_log.update(|log| *log = format!("{log}Paused\n"));
pause();
};
let resume = move |_| {
set_log.update(|log| *log = format!("{log}Resumed\n"));
resume();
};
view! { cx,
<Note class="mb-2">"Type something below to trigger the watch"</Note>
<input
node_ref=input
class="block"
prop:value=move || source.get()
on:input=move |e| set_source.set(event_target_value(&e))
2023-06-09 23:10:33 +01:00
type="text"
/>
<p>"Value: " {source}</p>
<button prop:disabled=move || !is_active.get() class="orange" on:click=pause>"Pause"</button>
<button prop:disabled=move || is_active.get() on:click=resume>"Resume"</button>
2023-06-09 23:10:33 +01:00
<button on:click=clear>"Clear Log"</button>
<br />
<br />
<Note>"Log"</Note>
<pre>{log}</pre>
}
}
fn main() {
_ = console_log::init_with_level(log::Level::Debug);
console_error_panic_hook::set_once();
mount_to(demo_or_body(), |cx| {
view! { cx, <Demo /> }
})
}