use std::rc::Rc;
use crate::{
Computed, DomNode, LazyCache, Resource, Value,
render::{collection::CollectionKey, render_list},
};
pub fn render_list_memo<T: CollectionKey + 'static>(
value: &Value<Rc<Vec<T::Value>>>,
render: impl Fn(&Computed<T::Value>) -> DomNode + 'static,
) -> DomNode {
let items = value.to_computed().map(Rc::unwrap_or_clone);
render_list(items, T::get_key, render)
}
pub fn render_resource_list_memo<T: CollectionKey + 'static>(
value: &LazyCache<Vec<T::Value>>,
render: impl Fn(&Computed<T::Value>) -> DomNode + 'static,
) -> DomNode {
let items = value.to_computed().map(|resource| match resource {
Resource::Ready(list) => Rc::unwrap_or_clone(list),
Resource::Loading | Resource::Error(_) => Vec::new(),
});
render_list(items, T::get_key, render)
}