diff --git a/src/app.rs b/src/app.rs
index 5358b9c..dfdd2e2 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, StudentShell, StudentHomePage, StudentDemographicsPage, AdditionalPage};
+use crate::pages::{ProviderPortal, ScholarshipInfoPage, ProviderContactPage, LoanerShell, LoanerFallback, LoanerBorrowForm, LoanerReturnForm, AuthCallbackPage, ApplicantsPageFallback, AdminShell, AdminHomePage, AdminProviderPage, AdminScholarshipPage, StudentShell, StudentHomePage, StudentDemographicsPage, AdditionalPage, AdminUtilsPage};
use leptos::prelude::*;
use leptos_meta::{MetaTags, Stylesheet, Title, provide_meta_context};
use leptos_oidc::AuthSignal;
@@ -110,6 +110,7 @@ fn AdminRoutes() -> impl MatchNestedRoutes + Clone {
+
}
.into_inner()
diff --git a/src/pages/admin/mod.rs b/src/pages/admin/mod.rs
index d5400ea..3bb847a 100644
--- a/src/pages/admin/mod.rs
+++ b/src/pages/admin/mod.rs
@@ -1,8 +1,11 @@
mod shell;
-pub use shell::*;
mod home_page;
-pub use home_page::*;
mod provider_page;
-pub use provider_page::*;
mod scholarship_page;
+mod utils_page;
+
+pub use shell::*;
+pub use home_page::*;
+pub use provider_page::*;
pub use scholarship_page::*;
+pub use utils_page::*;
diff --git a/src/pages/admin/shell.rs b/src/pages/admin/shell.rs
index c5d78a7..84add78 100644
--- a/src/pages/admin/shell.rs
+++ b/src/pages/admin/shell.rs
@@ -18,25 +18,8 @@ pub fn AdminShell() -> impl IntoView {
TabInfo::new("Home", "/admin/home", None),
TabInfo::new("Providers", "/admin/providers", None),
TabInfo::new("Scholarships", "/admin/scholarships", None),
+ TabInfo::new("Utilities", "/admin/utilities", None),
] />
}
}
-
-#[component]
-pub fn AdminFallback() -> impl IntoView {
- view! {
-
-
"This is a fallback page"
-
- }
-}
-
-#[component]
-pub fn AdminTesting() -> impl IntoView {
- view! {
-
-
"This is a testing page"
-
- }
-}
diff --git a/src/pages/admin/utils_page.rs b/src/pages/admin/utils_page.rs
new file mode 100644
index 0000000..218b7b8
--- /dev/null
+++ b/src/pages/admin/utils_page.rs
@@ -0,0 +1,77 @@
+use chrono::DateTime;
+use crate::components::ActionButton;
+use leptos::prelude::*;
+use crate::common::{DateInfo, DateRange};
+use crate::pages::api::{CreateDates, CreateTestComparisons};
+
+fn get_important_dates() -> Vec {
+ vec! [
+ DateInfo {
+ id: uuid::Uuid::new_v4().to_string(),
+ title: "Provider Forms Open".to_string(),
+ date: DateRange::Range(
+ DateTime::parse_from_rfc3339("2026-01-20T07:15:00-05:00").unwrap(),
+ DateTime::parse_from_rfc3339("2026-03-03T23:59:00-05:00").unwrap()
+ ),
+ description: "".to_string(),
+ },
+ DateInfo {
+ id: uuid::Uuid::new_v4().to_string(),
+ title: "Student Forms Open".to_string(),
+ date: DateRange::Range(
+ DateTime::parse_from_rfc3339("2026-03-03T07:15:00-05:00").unwrap(),
+ DateTime::parse_from_rfc3339("2026-03-27T14:05:00-05:00").unwrap()
+ ),
+ description: "".to_string(),
+ },
+ DateInfo {
+ id: uuid::Uuid::new_v4().to_string(),
+ title: "Scholarship Decision Window".to_string(),
+ date: DateRange::Range(
+ DateTime::parse_from_rfc3339("2026-04-10T07:15:00-05:00").unwrap(),
+ DateTime::parse_from_rfc3339("2026-05-01T23:59:00-05:00").unwrap()
+ ),
+ description: "Start date may change if available sooner.".to_string(),
+ },
+ DateInfo {
+ id: uuid::Uuid::new_v4().to_string(),
+ title: "PHS Scholarship Committee".to_string(),
+ date: DateRange::Single(
+ DateTime::parse_from_rfc3339("2026-05-18T00:00:00-05:00").unwrap(),
+ ),
+ description: "Time TBD".to_string(),
+ },
+ DateInfo {
+ id: uuid::Uuid::new_v4().to_string(),
+ title: "Scholarship and Awards Night".to_string(),
+ date: DateRange::Single(
+ DateTime::parse_from_rfc3339("2026-06-09T00:00:00-05:00").unwrap(),
+ ),
+ description: "Time TBD".to_string(),
+ },
+ ]
+}
+
+#[component]
+pub fn AdminUtilsPage() -> impl IntoView {
+ let create_comparisons = ServerAction::::new();
+ let create_dates = ServerAction::::new();
+
+ let on_click_comparisons = move |_| {
+ create_comparisons.dispatch(CreateTestComparisons{});
+ };
+
+ let on_click_dates = move |_| {
+ create_dates.dispatch(CreateDates{dates: get_important_dates()});
+ };
+
+ view! {
+
+
+
"This utility page provides buttons to initialize the corresponding lists of information."
+
"Create Comparisons"
+
"Create Dates"
+
+
+ }.into_any()
+}