feat: begin implementation of value display

This commit is contained in:
alphafetus committed 2026-02-17 13:58:01 -05:00
1 parent f10f01534c
commit 04ba0ff1ea
5 files changed
+325 -54

No files matched your search

+38 -30
View File
@@ -2,9 +2,24 @@ use crate::components::{Loading, ValueDisplay};
use crate::pages::api::students::get_all_student_data;
use crate::utils::get_user_claims;
use leptos::prelude::*;
use crate::common::{SchemaNode, SchemaType};
#[component]
pub fn StudentTestDisplay() -> impl IntoView {
let create_student_display_schema = move || {
SchemaNode::new(SchemaType::Map)
.header("Student Information:")
.child("first_name", SchemaNode::new(SchemaType::String).header("First Name:"))
.child("last_name", SchemaNode::new(SchemaType::String).header("Last Name:"))
.child("sports_participation", SchemaNode::new(SchemaType::List)
.header("List of Sports Activities")
.item_template(SchemaNode::new(SchemaType::Map)
.child("sport_name", SchemaNode::new(SchemaType::String).header("Sport Name:"))
.child("achievements", SchemaNode::new(SchemaType::String).header("Special Achievements"))
)
)
};
let user_claims = get_user_claims();
let user_id = Memo::new(move |_| user_claims.get().map(|info| info.claims.subject.clone()));
@@ -13,39 +28,32 @@ pub fn StudentTestDisplay() -> impl IntoView {
async move |id| get_all_student_data(id).await,
);
let schema = StoredValue::new(create_student_display_schema());
view! {
<Suspense fallback=Loading>
{move || {
resource
.get()
.map(|data_map| {
let Ok(map) = data_map else {
return view! {}.into_any();
};
let data_map = StoredValue::new(map);
<div class="flex flex-1 flex-col">
{move || {
resource
.get()
.map(|data_map| {
let Ok(map) = data_map else {
return view! {}.into_any();
};
let data_map = StoredValue::new(map);
view! {
<div>
<For
each=move || data_map.get_value()
key=|(k, v)| k.clone()
children=move |(k, v)| {
let member = StoredValue::new(k.clone());
view! {
<ValueDisplay
data_map=data_map.get_value()
data_member=member.get_value()
header=member.get_value()
/>
}
}
/>
</div>
}
.into_any()
})
}}
view! {
<div>
<ValueDisplay
schema=schema.get_value()
data_map=data_map.get_value()
/>
</div>
}
.into_any()
})
}}
</div>
</Suspense>
}
}