diff --git a/e2e/create-pages.spec.ts b/e2e/create-pages.spec.ts
index 9e702dd80..4cbb8efd6 100644
--- a/e2e/create-pages.spec.ts
+++ b/e2e/create-pages.spec.ts
@@ -35,6 +35,16 @@ for (const mode of ['DEV', 'PRD'] as const) {
await expect(page.getByRole('heading', { name: 'Foo' })).toBeVisible();
});
+ test('dynamic', async ({ page }) => {
+ await page.goto(`http://localhost:${port}/dynamic`);
+ await expect(page.getByRole('navigation')).toHaveText(
+ 'Current path: /dynamic',
+ );
+ await expect(
+ page.getByRole('heading', { name: 'Dynamic Page' }),
+ ).toBeVisible();
+ });
+
test('nested/foo', async ({ page }) => {
// /nested/foo is defined as a staticPath of /nested/[id] which matches this layout
await page.goto(`http://localhost:${port}/nested/foo`);
diff --git a/e2e/fixtures/create-pages/src/components/DynamicLayout.tsx b/e2e/fixtures/create-pages/src/components/DynamicLayout.tsx
new file mode 100644
index 000000000..9cb748f6a
--- /dev/null
+++ b/e2e/fixtures/create-pages/src/components/DynamicLayout.tsx
@@ -0,0 +1,16 @@
+import type { ReactNode } from 'react';
+
+export default function DynamicLayout({
+ children,
+ path,
+}: {
+ children: ReactNode;
+ path: string;
+}) {
+ return (
+ <>
+
+ {children}
+ >
+ );
+}
diff --git a/e2e/fixtures/create-pages/src/entries.tsx b/e2e/fixtures/create-pages/src/entries.tsx
index 8dae9d499..ce09b722f 100644
--- a/e2e/fixtures/create-pages/src/entries.tsx
+++ b/e2e/fixtures/create-pages/src/entries.tsx
@@ -3,6 +3,7 @@ import type { PathsForPages } from 'waku/router';
import FooPage from './components/FooPage.js';
import HomeLayout from './components/HomeLayout.js';
+import DynamicLayout from './components/DynamicLayout.js';
import HomePage from './components/HomePage.js';
import NestedBazPage from './components/NestedBazPage.js';
import NestedLayout from './components/NestedLayout.js';
@@ -140,6 +141,18 @@ const pages: ReturnType = createPages(
exactPath: true,
component: () => EXACTLY!!
,
}),
+
+ createLayout({
+ render: 'dynamic',
+ path: '/dynamic',
+ component: DynamicLayout,
+ }),
+
+ createPage({
+ render: 'dynamic',
+ path: '/dynamic',
+ component: () => Dynamic Page
,
+ }),
],
);
diff --git a/packages/waku/src/router/create-pages.ts b/packages/waku/src/router/create-pages.ts
index 020bfdc10..62f05c302 100644
--- a/packages/waku/src/router/create-pages.ts
+++ b/packages/waku/src/router/create-pages.ts
@@ -624,7 +624,7 @@ export const createPages = <
dynamicLayoutPathMap.get(segment)?.[1] ??
staticComponentMap.get(joinPath(segment, 'layout').slice(1)); // feels like a hack
- const isDynamic = !dynamicLayoutPathMap.has(segment);
+ const isDynamic = dynamicLayoutPathMap.has(segment);
// always true
if (layout) {