diff --git a/app-proto/sketch-outline/src/assembly.rs b/app-proto/sketch-outline/src/assembly.rs index e18242b..b53e38d 100644 --- a/app-proto/sketch-outline/src/assembly.rs +++ b/app-proto/sketch-outline/src/assembly.rs @@ -10,6 +10,7 @@ pub struct Element { } // a complete, view-independent description of an assembly +#[derive(Clone)] pub struct Assembly { // the order of the elements is arbitrary, and it could change at any time pub elements: Signal> diff --git a/app-proto/sketch-outline/src/main.rs b/app-proto/sketch-outline/src/main.rs index c375a9c..9e74d28 100644 --- a/app-proto/sketch-outline/src/main.rs +++ b/app-proto/sketch-outline/src/main.rs @@ -1,16 +1,50 @@ -mod app; mod assembly; mod display; +mod outline; +use nalgebra::DVector; use sycamore::prelude::*; -use app::App; +use assembly::{Assembly, Element}; use display::Display; +use outline::Outline; + +#[derive(Clone)] +struct AppState { + assembly: Assembly +} fn main() { sycamore::render(|| { + provide_context( + AppState { + assembly: Assembly { + elements: create_signal(vec![ + Element { + id: String::from("wing_a"), + label: String::from("Wing A"), + color: [1.00_f32, 0.25_f32, 0.00_f32], + rep: DVector::::from_column_slice(&[0.5, 0.5, 0.0, 0.5, -0.25]) + }, + Element { + id: String::from("wing_b"), + label: String::from("Wing B"), + color: [1.00_f32, 0.25_f32, 0.00_f32], + rep: DVector::::from_column_slice(&[-0.5, -0.5, 0.0, 0.5, -0.25]) + }, + Element { + id: String::from("central"), + label: String::from("Central"), + color: [0.75_f32, 0.75_f32, 0.75_f32], + rep: DVector::::from_column_slice(&[0.0, 0.0, 0.0, 0.25, -1.0]) + } + ]) + } + } + ); + view! { - App {} + Outline {} Display {} } }); diff --git a/app-proto/sketch-outline/src/app.rs b/app-proto/sketch-outline/src/outline.rs similarity index 51% rename from app-proto/sketch-outline/src/app.rs rename to app-proto/sketch-outline/src/outline.rs index dca056a..546b272 100644 --- a/app-proto/sketch-outline/src/app.rs +++ b/app-proto/sketch-outline/src/outline.rs @@ -1,39 +1,11 @@ use itertools::Itertools; -use nalgebra::DVector; use sycamore::{prelude::*, web::tags::div}; -use crate::assembly::{Assembly, Element}; - -struct AppState { - assembly: Assembly -} +use crate::AppState; #[component] -pub fn App() -> View { - let state = AppState { - assembly: Assembly { - elements: create_signal(vec![ - Element { - id: String::from("wing_a"), - label: String::from("Wing A"), - color: [1.00_f32, 0.25_f32, 0.00_f32], - rep: DVector::::from_column_slice(&[0.5, 0.5, 0.0, 0.5, -0.25]) - }, - Element { - id: String::from("wing_b"), - label: String::from("Wing B"), - color: [1.00_f32, 0.25_f32, 0.00_f32], - rep: DVector::::from_column_slice(&[-0.5, -0.5, 0.0, 0.5, -0.25]) - }, - Element { - id: String::from("central"), - label: String::from("Central"), - color: [0.75_f32, 0.75_f32, 0.75_f32], - rep: DVector::::from_column_slice(&[0.0, 0.0, 0.0, 0.25, -1.0]) - } - ]) - } - }; +pub fn Outline() -> View { + let state = use_context::(); // sort the elements alphabetically by ID let elements_sorted = create_memo(move ||