App: pass app state into outline as context

This commit is contained in:
Aaron Fenyes 2024-09-13 15:15:55 -07:00
parent 49170671b4
commit 959e4cc8b5
3 changed files with 41 additions and 34 deletions

View File

@ -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<Vec<Element>>

View File

@ -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::<f64>::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::<f64>::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::<f64>::from_column_slice(&[0.0, 0.0, 0.0, 0.25, -1.0])
}
])
}
}
);
view! {
App {}
Outline {}
Display {}
}
});

View File

@ -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::<f64>::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::<f64>::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::<f64>::from_column_slice(&[0.0, 0.0, 0.0, 0.25, -1.0])
}
])
}
};
pub fn Outline() -> View {
let state = use_context::<AppState>();
// sort the elements alphabetically by ID
let elements_sorted = create_memo(move ||