use super::context::current_context;
use super::effect::{use_effect, Effect};
pub fn use_task<F>(callback: F) -> Effect
where
F: FnMut() + Send + Sync + 'static,
{
use_effect(callback)
}
pub fn use_visible_task(source: impl Into<String>) -> VisibleTaskId {
let source = source.into();
let id = current_context()
.map(|c| c.register_visible_task(&source))
.unwrap_or(0);
VisibleTaskId(id)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct VisibleTaskId(pub u32);
pub fn visible_task_js(body: &str) -> String {
format!("(async (state, __resuma) => {{ {} }})", body)
}
pub fn use_debounce<T, F>(signal: &super::signal::Signal<T>, ms: u64, mut on_change: F)
where
T: Clone + serde::Serialize + Send + Sync + 'static,
F: FnMut(T) + Send + Sync + 'static,
{
let signal = signal.clone();
use_effect(move || {
let value = signal.peek();
on_change(value);
let _ = ms; });
}