From 1d41b6022ebd94927e5ce0c54a1db06d945de8b7 Mon Sep 17 00:00:00 2001 From: Lucas Vas Date: Wed, 25 Mar 2026 12:39:50 -0400 Subject: [PATCH] fix: hopeful fix for blank IDs in submissions --- src/pages/student/eligibility_page.rs | 53 ++++++++++++++------------- src/pages/student/form_setup.rs | 49 +++++++++++++------------ 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/src/pages/student/eligibility_page.rs b/src/pages/student/eligibility_page.rs index 39257e7..4847aaa 100644 --- a/src/pages/student/eligibility_page.rs +++ b/src/pages/student/eligibility_page.rs @@ -4,7 +4,7 @@ use crate::pages::api::files::list_files; use crate::pages::api::students::get_all_student_data; use crate::pages::api::{get_all_scholarship_info, get_comparison_info}; use crate::utils::get_user_claims; -use leptos::logging::{debug_log, debug_error}; +use leptos::logging::{debug_error, debug_log}; use leptos::prelude::*; use leptos_oidc::AuthSignal; @@ -23,6 +23,11 @@ pub fn StudentEligibilityPage() -> impl IntoView { let auth = expect_context::(); let user_claims = get_user_claims(); let user_id = Memo::new(move |_| user_claims.get().map(|info| info.claims.subject.clone())); + let access_token = Memo::new(move |_| auth.get().authenticated().map(|a| a.access_token())); + + Effect::new(move || { + debug_log!("User ID was updated: {}", user_id.get().unwrap_or_default()); + }); let form_id = StoredValue::new("scholarship_essays".to_string()); @@ -111,23 +116,23 @@ pub fn StudentEligibilityPage() -> impl IntoView { true } else { list.iter() - .any( - |requirement| { - let result = requirement - .compare(&student_info); - - match result.as_ref() { - Ok(status) => { - debug_log!("Requirement with id {} is Ok({})", requirement.id, status); - status.clone() - }, - Err(e) => { - debug_error!("Requirement with id {} failed: {}", requirement.id, e); - false - } + .any(|requirement| { + let result = requirement.compare(&student_info); + match result.as_ref() { + Ok(status) => { + debug_log!( + "Requirement with id {} is Ok({})", requirement.id, status + ); + status.clone() } - }, - ) + Err(e) => { + debug_error!( + "Requirement with id {} failed: {}", requirement.id, e + ); + false + } + } + }) } }); if valid { @@ -135,19 +140,15 @@ pub fn StudentEligibilityPage() -> impl IntoView { let scholarship_id = StoredValue::new(scholarship.subject.clone()); let resource = Resource::new( move || ( - auth - .try_with(|a| a.authenticated().map(|a| a.access_token())) - .flatten(), + access_token.get(), form_id.get_value(), scholarship_id.get_value(), ), async move |(access_token, form_id, scholarship_id)| { - list_files( - access_token.unwrap_or_default(), - form_id, - scholarship_id, - ) - .await + let Some(access_token) = access_token else { + return Ok(Vec::new()); + }; + list_files(access_token, form_id, scholarship_id).await }, ); Some((scholarship.clone(), resource)) diff --git a/src/pages/student/form_setup.rs b/src/pages/student/form_setup.rs index 70c5222..6b4f215 100644 --- a/src/pages/student/form_setup.rs +++ b/src/pages/student/form_setup.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; -use leptos::prelude::*; -use uuid::Uuid; use crate::common::ValueType; use crate::components::{Toast, ToastContext}; -use crate::pages::api::students::{get_student_data, PutStudentData}; +use crate::pages::api::students::{PutStudentData, get_student_data}; use crate::utils::get_user_claims; +use leptos::prelude::*; +use std::collections::HashMap; +use uuid::Uuid; pub struct StudentFormInfo { pub data_map: RwSignal>, @@ -20,22 +20,21 @@ pub fn use_student_form( enable_toasts: bool, ) -> StudentFormInfo { let form_type = form_type.into(); - + let user_claims = get_user_claims(); - let user_id = Memo::new(move |_| { - user_claims.get() - .map(|info| info.claims.subject.clone()) - }); + let user_id = Memo::new(move |_| user_claims.get().map(|info| info.claims.subject.clone())); let data_map = RwSignal::new(HashMap::new()); let refresh_trigger = Trigger::new(); let data_resource = Resource::new( - move || (user_id.get().unwrap_or_default(), form_type.get(), refresh_trigger.track()), - async move |(id, form_type, _)| get_student_data( - id, - form_type, - ).await + move || (user_id.get(), form_type.get(), refresh_trigger.track()), + async move |(id, form_type, _)| { + let Some(id) = id else { + return Ok(HashMap::new()); + }; + get_student_data(id, form_type).await + }, ); Effect::new(move || { @@ -50,13 +49,15 @@ pub fn use_student_form( let submit_action = ServerAction::::new(); let on_submit = move || { - submit_action.dispatch(PutStudentData { - subject: user_id.get().unwrap_or_default(), - data_type: form_type.get(), - data_map: data_map.get() - }); + if let Some(id) = user_id.get() { + submit_action.dispatch(PutStudentData { + subject: id, + data_type: form_type.get(), + data_map: data_map.get(), + }); + } }; - + if enable_toasts { let mut toasts = expect_context::(); Effect::watch( @@ -74,13 +75,13 @@ pub fn use_student_form( Err(e) => Toast::new() .id(Uuid::new_v4()) .header("Submission Failed") - .msg(e.to_string()) + .msg(e.to_string()), }; toasts.toast(toast); untrack(move || submit_action.clear()); }, - false + false, ); } @@ -90,6 +91,6 @@ pub fn use_student_form( data_resource, user_id, submit_action: on_submit.into(), - submit_pending: submit_action.pending() + submit_pending: submit_action.pending(), } -} \ No newline at end of file +} -- 2.54.0