)
impl IntoView {
+ provide_auth_context(
+ crate::utils::use_origin(),
+ "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_Lfjuy5zaM",
+ "56c2bqvl021rv8d5mq36blt7jv",
+ "/providers/callback"
+ );
+
+ view! {
+ {children()}
+ }
+}
\ No newline at end of file
diff --git a/src/components/login/mod.rs b/src/components/login/mod.rs
index fae50eb..c9911f2 100644
--- a/src/components/login/mod.rs
+++ b/src/components/login/mod.rs
@@ -1,5 +1,7 @@
+pub(crate) mod setup;
mod provider;
pub use provider::*;
mod student;
pub use student::*;
-pub(crate) mod setup;
\ No newline at end of file
+mod admin;
+pub use admin::*;
\ No newline at end of file
diff --git a/src/components/mod.rs b/src/components/mod.rs
index 27d6b69..89dc30c 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -13,9 +13,10 @@ mod lists;
mod toasts;
mod header;
pub mod login;
+mod tabs;
pub use self::{
action_button::*, banner::*, dashboard_button::*, lists::*,
loading::*, multi_entry::*, panel::*, row::*, text_field::*,
- validated_form::*, toasts::*, header::*, date::*
+ validated_form::*, toasts::*, header::*, date::*, tabs::*
};
diff --git a/src/components/tabs/mod.rs b/src/components/tabs/mod.rs
new file mode 100644
index 0000000..2c727dc
--- /dev/null
+++ b/src/components/tabs/mod.rs
@@ -0,0 +1,2 @@
+mod sidebar;
+pub use sidebar::*;
\ No newline at end of file
diff --git a/src/components/tabs/sidebar.rs b/src/components/tabs/sidebar.rs
new file mode 100644
index 0000000..166e5db
--- /dev/null
+++ b/src/components/tabs/sidebar.rs
@@ -0,0 +1,57 @@
+use leptos::prelude::*;
+use leptos_router::components::{Outlet, A};
+use leptos_router::hooks::use_location;
+use crate::common::TabInfo;
+
+#[component]
+fn SidebarTab(
+ #[prop(into)] name: Signal
,
+ #[prop(into)] path: Signal
+) -> impl IntoView {
+ let location = use_location();
+
+ let selected = Memo::new(move |_| {
+ let current_path = location.pathname.get();
+
+ // There's extra logic here as well, but for now this works.
+ current_path.starts_with(&path.get())
+ });
+
+ view! {
+
+
+ {name}
+
+
+ }
+}
+
+#[component]
+pub fn TabSidebarList(
+ #[prop(into)] tabs: Signal>,
+) -> impl IntoView {
+ // Create a series of tabs based on a given list of names and paths.
+
+ view! {
+
+ }
+}
diff --git a/src/pages/admin/mod.rs b/src/pages/admin/mod.rs
new file mode 100644
index 0000000..d805db1
--- /dev/null
+++ b/src/pages/admin/mod.rs
@@ -0,0 +1,2 @@
+mod shell;
+pub use shell::*;
\ No newline at end of file
diff --git a/src/pages/admin/shell.rs b/src/pages/admin/shell.rs
new file mode 100644
index 0000000..786c3b1
--- /dev/null
+++ b/src/pages/admin/shell.rs
@@ -0,0 +1,49 @@
+use leptos::prelude::*;
+use crate::common::TabInfo;
+use crate::components::{Banner, TabSidebarList};
+use crate::components::login::AdminLoginContext;
+
+/// # Admin Shell Component
+///
+/// This shell should keep track of pretty much everything that changes across the admin page. It
+/// will provide the login context, the banner, and the tabs.
+#[component]
+pub fn AdminShell() -> impl IntoView {
+ // Create login context
+ view! {
+
+
+ // We'll put the tabs here.
+
+
+ }
+}
+
+#[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/mod.rs b/src/pages/mod.rs
index 4cdf400..e1bf618 100644
--- a/src/pages/mod.rs
+++ b/src/pages/mod.rs
@@ -10,9 +10,10 @@ mod unauthenticated_page;
mod provider_contact;
mod auth_callback;
mod provider_applicants;
+mod admin;
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::*
+ auth_callback::*, provider_applicants::*, admin::*
};