use std::rc::Rc;
use vertigo::{Computed, DomNode, Resource, component, dom};
use crate::Spinner;
#[component]
pub fn WithLoader<T: Clone + PartialEq + 'static>(
resource: Computed<Resource<T>>,
render: Rc<dyn Fn(T) -> DomNode>,
) {
with_loader(resource, render)
}
pub fn with_loader<T: Clone + PartialEq + 'static>(
resource: Computed<Resource<T>>,
render: Rc<dyn Fn(T) -> DomNode>,
) -> DomNode {
resource.render_value(move |res| match res {
Resource::Loading => dom! {
<Spinner />
},
Resource::Ready(value) => render(value),
Resource::Error(err) => dom! {
<main>{err}</main>
},
})
}