diff --git a/integrations/actix/src/lib.rs b/integrations/actix/src/lib.rs index 982d41c7c7..7b41d156c6 100644 --- a/integrations/actix/src/lib.rs +++ b/integrations/actix/src/lib.rs @@ -923,11 +923,34 @@ pub fn generate_route_list_with_exclusions_and_ssg( app_fn: impl Fn() -> IV + 'static + Clone, excluded_routes: Option>, ) -> (Vec, StaticDataMap) +where + IV: IntoView + 'static, +{ + generate_route_list_with_exclusions_and_ssg_and_context( + app_fn, + excluded_routes, + || {}, + ) +} + +/// Generates a list of all routes defined in Leptos's Router in your app. We can then use this to automatically +/// create routes in Actix's App without having to use wildcard matching or fallbacks. Takes in your root app Element +/// as an argument so it can walk you app tree. This version is tailored to generated Actix compatible paths. Adding excluded_routes +/// to this function will stop `.leptos_routes()` from generating a route for it, allowing a custom handler. These need to be in Actix path format. +/// Additional context will be provided to the app Element. +pub fn generate_route_list_with_exclusions_and_ssg_and_context( + app_fn: impl Fn() -> IV + 'static + Clone, + excluded_routes: Option>, + additional_context: impl Fn() + 'static + Clone, +) -> (Vec, StaticDataMap) where IV: IntoView + 'static, { let (mut routes, static_data_map) = - leptos_router::generate_route_list_inner(app_fn); + leptos_router::generate_route_list_inner_with_context( + app_fn, + additional_context, + ); // Actix's Router doesn't follow Leptos's // Match `*` or `*someword` to replace with replace it with "/{tail.*} diff --git a/integrations/axum/src/lib.rs b/integrations/axum/src/lib.rs index 2eb9a9509b..24eede3ad3 100644 --- a/integrations/axum/src/lib.rs +++ b/integrations/axum/src/lib.rs @@ -1364,11 +1364,35 @@ pub fn generate_route_list_with_exclusions_and_ssg( app_fn: impl Fn() -> IV + 'static + Clone, excluded_routes: Option>, ) -> (Vec, StaticDataMap) +where + IV: IntoView + 'static, +{ + generate_route_list_with_exclusions_and_ssg_and_context( + app_fn, + excluded_routes, + || {}, + ) +} + +/// Generates a list of all routes defined in Leptos's Router in your app. We can then use this to automatically +/// create routes in Axum's Router without having to use wildcard matching or fallbacks. Takes in your root app Element +/// as an argument so it can walk you app tree. This version is tailored to generate Axum compatible paths. Adding excluded_routes +/// to this function will stop `.leptos_routes()` from generating a route for it, allowing a custom handler. These need to be in Axum path format +/// Additional context will be provided to the app Element. +#[tracing::instrument(level = "trace", fields(error), skip_all)] +pub fn generate_route_list_with_exclusions_and_ssg_and_context( + app_fn: impl Fn() -> IV + 'static + Clone, + excluded_routes: Option>, + additional_context: impl Fn() + 'static + Clone, +) -> (Vec, StaticDataMap) where IV: IntoView + 'static, { let (routes, static_data_map) = - leptos_router::generate_route_list_inner(app_fn); + leptos_router::generate_route_list_inner_with_context( + app_fn, + additional_context, + ); // Axum's Router defines Root routes as "/" not "" let mut routes = routes .into_iter() diff --git a/integrations/viz/src/lib.rs b/integrations/viz/src/lib.rs index d1870b979a..f5648217cd 100644 --- a/integrations/viz/src/lib.rs +++ b/integrations/viz/src/lib.rs @@ -1027,6 +1027,7 @@ where { generate_route_list_with_exclusions_and_ssg(app_fn, excluded_routes).0 } + /// Generates a list of all routes defined in Leptos's Router in your app. We can then use this to automatically /// create routes in Viz's Router without having to use wildcard matching or fallbacks. Takes in your root app Element /// as an argument so it can walk you app tree. This version is tailored to generate Viz compatible paths. @@ -1034,11 +1035,33 @@ pub fn generate_route_list_with_exclusions_and_ssg( app_fn: impl Fn() -> IV + 'static + Clone, excluded_routes: Option>, ) -> (Vec, StaticDataMap) +where + IV: IntoView + 'static, +{ + generate_route_list_with_exclusions_and_ssg_and_context( + app_fn, + excluded_routes, + || {}, + ) +} + +/// Generates a list of all routes defined in Leptos's Router in your app. We can then use this to automatically +/// create routes in Viz's Router without having to use wildcard matching or fallbacks. Takes in your root app Element +/// as an argument so it can walk you app tree. This version is tailored to generate Viz compatible paths. +/// Additional context will be provided to the app Element. +pub fn generate_route_list_with_exclusions_and_ssg_and_context( + app_fn: impl Fn() -> IV + 'static + Clone, + excluded_routes: Option>, + additional_context: impl Fn() + 'static + Clone, +) -> (Vec, StaticDataMap) where IV: IntoView + 'static, { let (routes, static_data_map) = - leptos_router::generate_route_list_inner(app_fn); + leptos_router::generate_route_list_inner_with_context( + app_fn, + additional_context, + ); // Viz's Router defines Root routes as "/" not "" let mut routes = routes .into_iter() diff --git a/router/src/extract_routes.rs b/router/src/extract_routes.rs index b85aff1e1d..031632f13d 100644 --- a/router/src/extract_routes.rs +++ b/router/src/extract_routes.rs @@ -109,6 +109,22 @@ impl RouteListing { pub fn generate_route_list_inner( app_fn: impl Fn() -> IV + 'static + Clone, ) -> (Vec, StaticDataMap) +where + IV: IntoView + 'static, +{ + generate_route_list_inner_with_context(app_fn, || {}) +} +/// Generates a list of all routes this application could possibly serve. This returns the raw routes in the leptos_router +/// format. Odds are you want `generate_route_list()` from either the [`actix`], [`axum`], or [`viz`] integrations if you want +/// to work with their router. +/// +/// [`actix`]: +/// [`axum`]: +/// [`viz`]: +pub fn generate_route_list_inner_with_context( + app_fn: impl Fn() -> IV + 'static + Clone, + additional_context: impl Fn() + 'static + Clone, +) -> (Vec, StaticDataMap) where IV: IntoView + 'static, { @@ -122,6 +138,8 @@ where let branches = PossibleBranchContext::default(); provide_context(branches.clone()); + additional_context(); + leptos::suppress_resource_load(true); _ = app_fn().into_view(); leptos::suppress_resource_load(false);