Fix layouts in child routers (#4994)
* fix layouts in child routers * test child route layouts
This commit is contained in:
1 parent
5dc22f8132
commit
702fbac2da
3 files changed
+83
-4
No files matched your search
@@ -0,0 +1,77 @@
|
||||
#![allow(unused)]
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
use dioxus::prelude::*;
|
||||
use dioxus_history::{History, MemoryHistory};
|
||||
use dioxus_router::components::HistoryProvider;
|
||||
|
||||
fn prepare(path: impl Into<String>) -> VirtualDom {
|
||||
let mut vdom = VirtualDom::new_with_props(
|
||||
App,
|
||||
AppProps {
|
||||
path: path.into().parse().unwrap(),
|
||||
},
|
||||
);
|
||||
vdom.rebuild_in_place();
|
||||
return vdom;
|
||||
|
||||
#[derive(Routable, Clone, PartialEq)]
|
||||
#[rustfmt::skip]
|
||||
enum Route {
|
||||
#[layout(Layout)]
|
||||
#[child("/")]
|
||||
Child { child: ChildRoute },
|
||||
}
|
||||
|
||||
#[derive(Routable, Clone, PartialEq)]
|
||||
#[rustfmt::skip]
|
||||
enum ChildRoute{
|
||||
#[layout(ChildLayout)]
|
||||
#[route("/")]
|
||||
RootIndex {}
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn App(path: Route) -> Element {
|
||||
rsx! {
|
||||
h1 { "App" }
|
||||
HistoryProvider {
|
||||
history: move |_| Rc::new(MemoryHistory::with_initial_path(path.clone())) as Rc<dyn History>,
|
||||
Router::<Route> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn RootIndex() -> Element {
|
||||
rsx! { h2 { "Root Index" } }
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn Layout() -> Element {
|
||||
rsx! {
|
||||
h2 { "parent layout" }
|
||||
Outlet::<Route> { }
|
||||
}
|
||||
}
|
||||
|
||||
#[component]
|
||||
fn ChildLayout() -> Element {
|
||||
rsx! {
|
||||
h2 { "child layout" }
|
||||
Outlet::<ChildRoute> { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn root_index() {
|
||||
let vdom = prepare("/");
|
||||
let html = dioxus_ssr::render(&vdom);
|
||||
|
||||
assert_eq!(
|
||||
html,
|
||||
"<h1>App</h1><h2>parent layout</h2><h2>child layout</h2><h2>Root Index</h2>"
|
||||
);
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
mod child_outlet;
|
||||
mod link;
|
||||
mod navigation;
|
||||
mod outlet;
|
||||
|
||||
Reference in new issue
Block a user