Make element vectors reactive

This commit is contained in:
Aaron Fenyes 2024-11-01 19:01:14 -07:00
parent 037a0c376f
commit 33dd5dbe82
3 changed files with 63 additions and 41 deletions

View file

@ -1,5 +1,5 @@
use itertools::Itertools;
use sycamore::{prelude::*, web::tags::div};
use sycamore::prelude::*;
use web_sys::{
Event,
HtmlInputElement,
@ -64,10 +64,11 @@ fn ElementOutlineItem(key: ElementKey, element: assembly::Element) -> View {
move |sel| if sel.contains(&key) { "selected" } else { "" }
);
let label = element.label.clone();
let rep_components = element.representation.iter().map(|u| {
let u_coord = format!("{:.3}", u).replace("-", "\u{2212}");
View::from(div().children(u_coord))
}).collect::<Vec<_>>();
let rep_components = element.representation.map(
|rep| rep.iter().map(
|u| format!("{:.3}", u).replace("-", "\u{2212}")
).collect()
);
let constrained = element.constraints.map(|csts| csts.len() > 0);
let constraint_list = element.constraints.map(
|csts| csts.clone().into_iter().collect()
@ -139,7 +140,14 @@ fn ElementOutlineItem(key: ElementKey, element: assembly::Element) -> View {
}
) {
div(class="elt-label") { (label) }
div(class="elt-rep") { (rep_components) }
div(class="elt-rep") {
Indexed(
list=rep_components,
view=|coord_str| view! {
div { (coord_str) }
}
)
}
div(class="status")
}
}
@ -192,12 +200,7 @@ pub fn Outline() -> View {
view=|(key, elt)| view! {
ElementOutlineItem(key=key, element=elt)
},
key=|(key, elt)| (
key.clone(),
elt.id.clone(),
elt.label.clone(),
elt.representation.into_iter().map(|u| u.to_bits()).collect::<Vec<_>>()
)
key=|(key, _)| key.clone()
)
}
}