Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nested routes in separate component don't compile when already inside ParentRoute. #2996

Open
zakstucke opened this issue Sep 19, 2024 · 0 comments

Comments

@zakstucke
Copy link
Contributor

zakstucke commented Sep 19, 2024

Describe the bug
Separating routes into a separate component works at the top level of <Routes />, but fails to compile when already inside a <ParentRoute/>.

Leptos Dependencies
Verified on main branch.

To Reproduce
The router example fails to compile when wrapping the <ContactRoutes/> component in an outer <ParentRoute/>. Simplified below:

Fails to compile.

#[component]
pub fn RouterExample() -> impl IntoView {
    view! {
        <Router>
            <Routes fallback=|| "404">
                <ParentRoute path={path!("/foo")} view={|| view! { <Outlet /> }}>                
                    <ContactRoutes/>
                </ParentRoute>
            </Routes>
        </Router>
    }
}

// You can define other routes in their own component.
// Routes implement the MatchNestedRoutes
#[component]
pub fn ContactRoutes() -> impl MatchNestedRoutes<Dom> + Clone {
    view! {
        <ParentRoute path=path!("") view={|| view! { <Outlet /> }}>
            <Route path=path!("/") view=|| "Select a contact."/>
        </ParentRoute>
    }
    .into_inner()
}

Compiles (ContactRoutes contents in place instead of separate component)

#[component]
pub fn RouterExample() -> impl IntoView {
    view! {
        <Router>
            <Routes fallback=|| "404">
                <ParentRoute path={path!("/foo")} view={|| view! { <Outlet /> }}>                
                    <ParentRoute path=path!("") view={|| view! { <Outlet /> }}>
                        <Route path=path!("/") view=|| "Select a contact."/>
                    </ParentRoute>
                </ParentRoute>
            </Routes>
        </Router>
    }
}

Error:

error[E0599]: the method `build` exists for struct `RoutesPropsBuilder<NestedRoute<(StaticSegment<&str>,), impl MatchNestedRoutes<Dom> + Clone, (), ..., ...>, ..., ..., ...>`, but its trait bounds were not satisfied
   --> src/lib.rs:22:5
    |
22  |       view! {
    |  _____^
23  | |         <Router>
24  | |             <Routes fallback=|| "404">
25  | |                 <ParentRoute path={path!("/foo")} view={|| view! { <Outlet /> }}>
...   |
29  | |         </Router>
30  | |     }
    | |_____^ method cannot be called due to unsatisfied trait bounds
    |
   ::: /Users/zak/z/code/leptos/router/src/components.rs:208:1
    |
208 |   #[component]
    |   ------------ doesn't satisfy `<_ as ReactiveFunction>::Output = _`, `_: ReactiveFunction` or `_: Render<_>`
    |
   ::: /Users/zak/z/code/leptos/router/src/matching/nested/mod.rs:24:1
    |
24  |   pub struct NestedRoute<Segments, Children, Data, View, R> {
    |   --------------------------------------------------------- doesn't satisfy `_: MatchNestedRoutes<Dom>`
@zakstucke zakstucke changed the title Nested routes don't compile when already inside ParentRoute. Nested routes in separate component don't compile when already inside ParentRoute. Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant