use super::*;
pub(crate) const HOOKS_ASYNC_RESOLVED_VALUE: &str = "hello from use_async";
pub(crate) const HOOKS_ASYNC_FAIL_MESSAGE: &str = "demo failure";
pub(crate) const HOOKS_ASYNC_LAZY_VALUE: &str = "lazy value (factory ran once)";
pub(crate) fn hooks_async_refetch(handle: UseAsyncHandle<String, ()>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
handle.set_state(AsyncState::<String, ()>::Ok(String::from(
HOOKS_ASYNC_RESOLVED_VALUE,
)));
}))
}
pub(crate) fn hooks_async_state_label(handle: UseAsyncHandle<String, ()>) -> String {
match handle.state() {
AsyncState::<String, ()>::Loading(_) => String::from("Loading"),
AsyncState::<String, ()>::Ok(value) => format!("Ok({value:?})"),
AsyncState::<String, ()>::Err(err) => format!("Err({err:?})"),
}
}
pub(crate) fn hooks_async_lazy_is_pending(lazy: &LazyComponent<String>) -> bool {
lazy.loaded().is_none()
}
pub(crate) fn hooks_async_lazy_loaded_label(lazy: &LazyComponent<String>) -> String {
lazy.loaded().unwrap_or_else(|| String::from("pending"))
}
pub(crate) fn hooks_async_lazy_on_load(lazy: LazyComponent<String>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
lazy.prefetch();
}))
}
pub(crate) fn hooks_async_lazy_on_reset(lazy: LazyComponent<String>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
lazy.reset();
}))
}
pub(crate) fn hooks_async_suspense_phase_label(handle: &SuspenseHandle<String>) -> String {
match handle.get_phase().get() {
SuspensePhase::Pending => String::from("Pending"),
SuspensePhase::Resolved(value) => format!("Resolved({value})"),
SuspensePhase::Failed(message) => format!("Failed({message})"),
}
}
pub(crate) fn hooks_async_suspense_is_resolved(handle: &SuspenseHandle<String>) -> bool {
matches!(handle.get_phase().get(), SuspensePhase::Resolved(_))
}
pub(crate) fn hooks_async_suspense_is_failed(handle: &SuspenseHandle<String>) -> bool {
matches!(handle.get_phase().get(), SuspensePhase::Failed(_))
}
pub(crate) fn hooks_async_resolve(
handle: SuspenseHandle<String>,
value: String,
) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
handle.resolve_sync(value.clone());
}))
}
pub(crate) fn hooks_async_fail(
handle: SuspenseHandle<String>,
message: String,
) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
handle.fail(message.clone());
}))
}
pub(crate) fn hooks_async_reset(handle: SuspenseHandle<String>) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |_: Event| {
handle.reset();
}))
}