use super::*;
#[component]
pub fn euv_toc(node: VirtualNode<EuvTocProps>) -> VirtualNode {
let EuvTocProps {
title,
items,
active,
}: EuvTocProps = node.try_get_props().unwrap_or_default();
if items.is_empty() {
return html! {
""
};
}
let active_href: String = active.get();
let entry_classes: Vec<fn() -> &'static Css> = items
.iter()
.map(|item: &'static EuvTocItem| {
if item.href == active_href {
if item.level > TOC_NESTED_LEVEL {
c_euv_toc_link_nested_active
} else {
c_euv_toc_link_active
}
} else if item.level > TOC_NESTED_LEVEL {
c_euv_toc_link_nested
} else {
c_euv_toc_link
}
})
.collect();
html! {
div {
class: c_euv_toc()
div {
class: c_euv_toc_title()
{
title
}
}
for (item, entry_class) in items.iter().zip(entry_classes.iter()) {
a {
key: item.href
class: entry_class()
href: item.href
{
item.text
}
}
}
}
}
}