fix routers without an index route (#2477)
This commit is contained in:
1 parent
5e57779435
commit
b6cdcb4e7f
3 files changed
+49
-6
No files matched your search
@@ -17,7 +17,7 @@ use std::sync::Arc;
|
|||||||
/// #[route("/")]
|
/// #[route("/")]
|
||||||
/// Index {},
|
/// Index {},
|
||||||
/// }
|
/// }
|
||||||
/// let cfg = RouterConfig::default().history(WebHistory::<Route>::default());
|
/// let cfg = RouterConfig::default().history(MemoryHistory::<Route>::default());
|
||||||
/// ```
|
/// ```
|
||||||
pub struct RouterConfig<R: Routable> {
|
pub struct RouterConfig<R: Routable> {
|
||||||
pub(crate) failure_external_navigation: fn() -> Element,
|
pub(crate) failure_external_navigation: fn() -> Element,
|
||||||
@@ -46,13 +46,14 @@ where
|
|||||||
<R as std::str::FromStr>::Err: std::fmt::Display,
|
<R as std::str::FromStr>::Err: std::fmt::Display,
|
||||||
{
|
{
|
||||||
pub(crate) fn take_history(&mut self) -> Box<dyn AnyHistoryProvider> {
|
pub(crate) fn take_history(&mut self) -> Box<dyn AnyHistoryProvider> {
|
||||||
#[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
|
self.history
|
||||||
.take()
|
.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)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
mod link;
|
mod link;
|
||||||
mod outlet;
|
mod outlet;
|
||||||
|
mod without_index;
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
// Tests for regressions of <https://github.com/DioxusLabs/dioxus/issues/2468>
|
||||||
|
#[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, "<div>router with no index route renders</div>")
|
||||||
|
}
|
||||||
|
|
||||||
|
#[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::<Route> {
|
||||||
|
config: {
|
||||||
|
move || RouterConfig::default().history(MemoryHistory::with_initial_path(path))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user