From ef65fa8cc93d1634ea2818da63fd5a5e4dc6f542 Mon Sep 17 00:00:00 2001 From: hrmny Date: Wed, 25 Oct 2023 21:35:24 -0700 Subject: [PATCH] fix layout in group causing a 404 --- .../crates/next-core/src/app_structure.rs | 15 +++++++++++++-- .../app/(group)/layout.js | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 test/e2e/app-dir/parallel-routes-and-interception/app/(group)/layout.js diff --git a/packages/next-swc/crates/next-core/src/app_structure.rs b/packages/next-swc/crates/next-core/src/app_structure.rs index ffe3d2dfebcb0..27b6f09c355c7 100644 --- a/packages/next-swc/crates/next-core/src/app_structure.rs +++ b/packages/next-swc/crates/next-core/src/app_structure.rs @@ -677,10 +677,14 @@ async fn directory_tree_to_loader_tree( tree.segment = "children".to_string(); } + let mut has_page = false; + if let Some(page) = (app_path == for_app_path) .then_some(components.page) .flatten() { + has_page = true; + // When resolving metadata with corresponding module // (https://github.com/vercel/next.js/blob/aa1ee5995cdd92cc9a2236ce4b6aa2b67c9d32b2/packages/next/src/lib/metadata/resolve-metadata.ts#L340) // layout takes precedence over page (https://github.com/vercel/next.js/blob/aa1ee5995cdd92cc9a2236ce4b6aa2b67c9d32b2/packages/next/src/server/lib/app-dir-module.ts#L22) @@ -742,8 +746,15 @@ async fn directory_tree_to_loader_tree( } if let Some(subtree) = subtree { - let key = parallel_route_key.unwrap_or("children").to_string(); - tree.parallel_routes.insert(key, subtree); + if let Some(key) = parallel_route_key { + tree.parallel_routes.insert(key.to_string(), subtree); + continue; + } + + // TODO: detect duplicate page in group segment + if !has_page { + tree.parallel_routes.insert("children".to_string(), subtree); + } } else if let Some(key) = parallel_route_key { bail!( "missing page or default for parallel route `{}` (page: {})", diff --git a/test/e2e/app-dir/parallel-routes-and-interception/app/(group)/layout.js b/test/e2e/app-dir/parallel-routes-and-interception/app/(group)/layout.js new file mode 100644 index 0000000000000..df3717d33e78f --- /dev/null +++ b/test/e2e/app-dir/parallel-routes-and-interception/app/(group)/layout.js @@ -0,0 +1,3 @@ +export default function Layout({ children }) { + return children +}