use nalgebra::DVector; use sycamore::{prelude::*, web::tags::div}; #[derive(Clone, PartialEq)] struct Element { id: i64, name: String, rep: DVector, color: [f32; 3] } struct EditorState { elements: Signal> } #[component] pub fn Editor() -> View { let state = EditorState { elements: create_signal(vec![ Element { id: 1, name: String::from("Central"), rep: DVector::::from_column_slice(&[0.0, 0.0, 0.0, 0.25, -1.0]), color: [0.75_f32, 0.75_f32, 0.75_f32] }, Element { id: 2, name: String::from("Wing A"), rep: DVector::::from_column_slice(&[0.5, 0.5, 0.0, 0.5, -0.25]), color: [1.00_f32, 0.25_f32, 0.00_f32] }, Element { id: 3, name: String::from("Wing B"), rep: DVector::::from_column_slice(&[-0.5, -0.5, 0.0, 0.5, -0.25]), color: [1.00_f32, 0.25_f32, 0.00_f32] } ]) }; view! { ul { Keyed( list=state.elements, view=|elt| { let name = elt.name.clone(); let rep_components = elt.rep.iter().map( |u| View::from(div().children(u.to_string().replace("-", "\u{2212}"))) ).collect::>(); view! { li { div(class="elt-name") { (name) } div(class="elt-rep") { (rep_components) } } } }, key=|elt| elt.id ) } } }