use super::*;
#[component]
pub fn euv_steps(node: VirtualNode<EuvStepsProps>) -> VirtualNode {
let EuvStepsProps { steps, current }: EuvStepsProps = node.try_get_props().unwrap_or_default();
let total: usize = steps.len();
let mut parts: Vec<VirtualNode> = Vec::with_capacity(total * 2);
for (index, step) in steps.into_iter().enumerate() {
parts.push(euv_step(index, step, current));
if index + 1 < total {
parts.push(html! {
div {
class: c_euv_step_line()
}
});
}
}
html! {
div {
class: c_euv_steps()
parts
}
}
}
fn euv_step(index: usize, step: EuvStep, current: Signal<usize>) -> VirtualNode {
html! {
div {
key: step.title
class: if { index == current.get() } {
c_euv_step_active()
} else if { index < current.get() } {
c_euv_step_done()
} else {
c_euv_step()
}
div {
class: c_euv_step_marker()
if { index < current.get() } {
"✓"
} else {
{ (index + 1).to_string() }
}
}
div {
class: c_euv_step_title()
step.title
}
if !step.description.is_empty() {
div {
class: c_euv_step_desc()
step.description
}
}
}
}
}