diff --git a/src/app.rs b/src/app.rs index ac7f713..b3b1aa6 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,4 @@ -use crate::pages::{AboutPage, HomePage, LoanerPage, ProviderPortal, ScholarshipInfoPage, TestPage}; +use crate::pages::{AboutPage, HomePage, LoanerPage, ProviderPortal, ComparisonTestPage, ScholarshipInfoPage, TestPage}; use leptos::leptos_dom::log; use leptos::prelude::*; use leptos_meta::{MetaTags, Stylesheet, Title, provide_meta_context}; @@ -96,17 +96,18 @@ pub fn AppWithRoutes() -> impl IntoView { // sets the document title - + <main> // TODO Create a 404 page <Routes fallback=|| "Page not found.".into_view()> <Route path=path!("") view=HomePage/> - <Route path=path!("about") view=AboutPage/> - <Route path=path!("test_page") view=TestPage/> - <Route path=path!("comparison") view=ComparisonTestPage /> - <ParentRoute path=path!("providers/scholarships") view=ScholarshipInfoPage> - <Route path=path!(":id") view=ScholarshipInfoPage /> - <Route path=path!("") view=ScholarshipInfoPage /> + <Route path=path!("/about") view=AboutPage/> + <Route path=path!("/test_page") view=TestPage/> + <Route path=path!("/comparison") view=ComparisonTestPage /> + <Route path=path!("/providers") view=ProviderPortal/> + <ParentRoute path=path!("/providers/scholarships") view=ScholarshipInfoPage> + <Route path=path!(":id") view=ScholarshipInfoPage/> + <Route path=path!("") view=ScholarshipInfoPage/> </ParentRoute> <ParentRoute path=path!("loaners") view=LoanerPage> <Route path=path!("") view=LoanerPage /> diff --git a/src/pages/provider_portal.rs b/src/pages/provider_portal.rs index 9274dba..ea833c0 100644 --- a/src/pages/provider_portal.rs +++ b/src/pages/provider_portal.rs @@ -23,7 +23,7 @@ pub fn ProviderPortal() -> impl IntoView { title="Create Scholarship" description="Navigate to Scholarship Creation Page" icon="/Create_Black.png" - path="/" + path="/providers/scholarships" /> <DashboardButton title="Applicants" diff --git a/src/pages/scholarship_info.rs b/src/pages/scholarship_info.rs index bd0d433..b40bff1 100644 --- a/src/pages/scholarship_info.rs +++ b/src/pages/scholarship_info.rs @@ -33,6 +33,11 @@ pub fn ScholarshipInfoPage() -> impl IntoView { let create_test_comps = ServerAction::<CreateTestComparisons>::new(); + let on_delete = move || { + let navigate = use_navigate(); + navigate("/providers/scholarships", Default::default()); + }; + // Remember that we only want to show the page after we've got authentication information // and if there's data for us to use. view! { @@ -45,7 +50,10 @@ pub fn ScholarshipInfoPage() -> impl IntoView { <Authenticated unauthenticated=UnauthenticatedPage> <div class="flex flex-row align-top items-start"> <div class="flex flex-col flex-1" /> - <ScholarshipList refresh_token=list_refresh/> + <ScholarshipList + refresh_token=list_refresh + on_delete=on_delete + /> <Transition fallback=Loading> <ScholarshipForm scholarship_id=scholarship_id @@ -67,22 +75,28 @@ pub fn ScholarshipInfoPage() -> impl IntoView { /// is authenticated, this component will get all the scholarships that this provider owns and /// will display them in a list, giving them the option to edit, delete, or create new scholarships. /// -/// It does not accept any props, and instead pulls the provider's information from the surrounding -/// environment. -/// /// Example usage: /// ``` +/// let refresh = RwSignal::new(0); +/// /// view! { /// <AuthLoaded> /// <Authenticated> -/// <ScholarshipList /> +/// <ScholarshipList +/// refresh_token=refresh +/// on_delete=move || log!("This is run when an item is deleted on the server.") +/// /> /// </Authenticated> /// </AuthLoaded> /// } /// ``` #[component] fn ScholarshipList( + /// A signal that refreshes the list when changed. Most times, we don't need to worry about the + /// user reloading our page 2 billion times. #[prop()] refresh_token: RwSignal<i32>, + /// A callback that is run on successful server-side deletion of an item. + #[prop(into)] on_delete: Callback<()> ) -> impl IntoView { // List state let pending_delete = RwSignal::new(None::<ExpandableInfo>); @@ -125,7 +139,7 @@ fn ScholarshipList( }); }; - let on_delete = move |s| { + let on_item_delete = move |s| { pending_delete.set(Some(s)); }; @@ -149,6 +163,7 @@ fn ScholarshipList( scholarships.refetch(); pending_delete.set(None); delete_action.clear(); + on_delete.run(()); } }); @@ -213,7 +228,7 @@ fn ScholarshipList( let views = list.iter().map(|entry| { view! { <ScholarshipListEntry scholarship=entry.clone() - on_delete=Callback::new(on_delete)/> + on_delete=Callback::new(on_item_delete)/> } }); Either::Left(views.collect_view())