From 765322bccac676980eae648bf12481d2abcc4984 Mon Sep 17 00:00:00 2001 From: Lucas Vas Date: Wed, 28 Jan 2026 14:36:48 -0500 Subject: [PATCH] feat: begin implementation of student forms --- src/app.rs | 15 ++++- src/components/login/student.rs | 7 ++- src/components/tabs/sidebar.rs | 2 +- src/pages/mod.rs | 3 +- src/pages/student/demographics_page.rs | 79 ++++++++++++++++++++++++++ src/pages/student/home_page.rs | 11 ++++ src/pages/student/mod.rs | 7 +++ src/pages/student/shell.rs | 20 +++++++ 8 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 src/pages/student/demographics_page.rs create mode 100644 src/pages/student/home_page.rs create mode 100644 src/pages/student/mod.rs create mode 100644 src/pages/student/shell.rs diff --git a/src/app.rs b/src/app.rs index 87f4682..e33567e 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,4 @@ -use crate::pages::{ProviderPortal, ScholarshipInfoPage, ProviderContactPage, LoanerShell, LoanerFallback, LoanerBorrowForm, LoanerReturnForm, AuthCallbackPage, ApplicantsPageFallback, AdminShell, AdminHomePage, AdminProviderPage, AdminScholarshipPage}; +use crate::pages::{ProviderPortal, ScholarshipInfoPage, ProviderContactPage, LoanerShell, LoanerFallback, LoanerBorrowForm, LoanerReturnForm, AuthCallbackPage, ApplicantsPageFallback, AdminShell, AdminHomePage, AdminProviderPage, AdminScholarshipPage, StudentShell, StudentHomePage, StudentDemographicsPage}; use leptos::prelude::*; use leptos_meta::{MetaTags, Stylesheet, Title, provide_meta_context}; use leptos_oidc::AuthSignal; @@ -65,6 +65,7 @@ pub fn AppWithRoutes() -> impl IntoView { + @@ -115,6 +116,18 @@ fn AdminRoutes() -> impl MatchNestedRoutes + Clone { .into_any_nested_route() } +#[component(transparent)] +fn StudentRoutes() -> impl MatchNestedRoutes + Clone { + view! { + + + + + } + .into_inner() + .into_any_nested_route() +} + #[component] pub fn AuthErrorView() -> impl IntoView { let auth = use_context::().expect("AuthError: RwSignal was not found"); diff --git a/src/components/login/student.rs b/src/components/login/student.rs index 14becf8..d5c7c54 100644 --- a/src/components/login/student.rs +++ b/src/components/login/student.rs @@ -1,5 +1,4 @@ use leptos::prelude::*; -use leptos_router::components::Outlet; use super::setup::provide_auth_context; ///# Student Login Context Component @@ -16,7 +15,9 @@ use super::setup::provide_auth_context; /// /// } #[component] -pub fn StudentLoginContext() -> impl IntoView { +pub fn StudentLoginContext( + children: Children, +) -> impl IntoView { provide_auth_context( crate::utils::use_origin(), "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_Lfjuy5zaM", @@ -24,5 +25,5 @@ pub fn StudentLoginContext() -> impl IntoView { "/students/callback" ); - view! { } + view! { {children()} } } diff --git a/src/components/tabs/sidebar.rs b/src/components/tabs/sidebar.rs index bc9ee53..5a577df 100644 --- a/src/components/tabs/sidebar.rs +++ b/src/components/tabs/sidebar.rs @@ -91,7 +91,7 @@ pub fn TabSidebarList( -
+
diff --git a/src/pages/mod.rs b/src/pages/mod.rs index e1bf618..22595de 100644 --- a/src/pages/mod.rs +++ b/src/pages/mod.rs @@ -11,9 +11,10 @@ mod provider_contact; mod auth_callback; mod provider_applicants; mod admin; +mod student; pub use self::{ about_page::*, comparison_test::*, home_page::*, loaner_page::*, provider_portal::*, test_page::*, unauthenticated_page::*, scholarship_info::*, provider_contact::*, - auth_callback::*, provider_applicants::*, admin::* + auth_callback::*, provider_applicants::*, admin::*, student::*, }; diff --git a/src/pages/student/demographics_page.rs b/src/pages/student/demographics_page.rs new file mode 100644 index 0000000..c06e91c --- /dev/null +++ b/src/pages/student/demographics_page.rs @@ -0,0 +1,79 @@ +use std::collections::HashMap; +use leptos::prelude::*; +use crate::components::{OutlinedTextField, Select, TextFieldType, ValidatedForm}; + +#[component] +pub fn StudentDemographicsPage() -> impl IntoView { + // This page should show a form that the students need to fill out. + // It's a simple form, really nothing more than a contact form. + // I'm going to test out creating this form without using a panel - we'll just use the page as + // it is with a specially spaced invisible div instead of a shaded container. + + let data_map = RwSignal::new(HashMap::new()); + + view! { +
+
+ + // Inputs here. + + + // There must be a date of birth selection field here. + + + + +