From b6cdcb4e7f6704a1d7c3258df422ae654dfe3814 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Fri, 7 Jun 2024 02:03:59 +0200 Subject: [PATCH] fix routers without an index route (#2477) --- packages/router/src/router_cfg.rs | 13 +++--- packages/router/tests/via_ssr/main.rs | 1 + .../router/tests/via_ssr/without_index.rs | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 packages/router/tests/via_ssr/without_index.rs diff --git a/packages/router/src/router_cfg.rs b/packages/router/src/router_cfg.rs index 4188dbe3b..a25a40e35 100644 --- a/packages/router/src/router_cfg.rs +++ b/packages/router/src/router_cfg.rs @@ -17,7 +17,7 @@ use std::sync::Arc; /// #[route("/")] /// Index {}, /// } -/// let cfg = RouterConfig::default().history(WebHistory::::default()); +/// let cfg = RouterConfig::default().history(MemoryHistory::::default()); /// ``` pub struct RouterConfig { pub(crate) failure_external_navigation: fn() -> Element, @@ -46,13 +46,14 @@ where ::Err: std::fmt::Display, { pub(crate) fn take_history(&mut self) -> Box { - #[allow(unused)] - let initial_route = self.initial_route.clone().unwrap_or("/".parse().unwrap_or_else(|err| - panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path or RouterConfig::initial_route to set a custom path", err) - )); self.history .take() - .unwrap_or_else(|| default_history(initial_route)) + .unwrap_or_else(|| { + let initial_route = self.initial_route.clone().unwrap_or_else(|| "/".parse().unwrap_or_else(|err| + panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path or RouterConfig::initial_route to set a custom path", err) + )); + default_history(initial_route) + }) } } diff --git a/packages/router/tests/via_ssr/main.rs b/packages/router/tests/via_ssr/main.rs index f86bd4eb4..a4aabfc00 100644 --- a/packages/router/tests/via_ssr/main.rs +++ b/packages/router/tests/via_ssr/main.rs @@ -1,2 +1,3 @@ mod link; mod outlet; +mod without_index; diff --git a/packages/router/tests/via_ssr/without_index.rs b/packages/router/tests/via_ssr/without_index.rs new file mode 100644 index 000000000..9ee85706b --- /dev/null +++ b/packages/router/tests/via_ssr/without_index.rs @@ -0,0 +1,41 @@ +use dioxus::prelude::*; + +// Tests for regressions of +#[test] +fn router_without_index_route_parses() { + let mut vdom = VirtualDom::new_with_props( + App, + AppProps { + path: Route::Test {}, + }, + ); + vdom.rebuild_in_place(); + let as_string = dioxus_ssr::render(&vdom); + assert_eq!(as_string, "
router with no index route renders
") +} + +#[derive(Routable, Clone, Copy, PartialEq, Debug)] +enum Route { + #[route("/test")] + Test {}, +} + +#[component] +fn Test() -> Element { + rsx! { + div { + "router with no index route renders" + } + } +} + +#[component] +fn App(path: Route) -> Element { + rsx! { + Router:: { + config: { + move || RouterConfig::default().history(MemoryHistory::with_initial_path(path)) + } + } + } +}