diff --git a/packages/next/src/views/Root/getCustomViewByRoute.ts b/packages/next/src/views/Root/getCustomViewByRoute.ts
index 3226f1e2a..7bc4821dc 100644
--- a/packages/next/src/views/Root/getCustomViewByRoute.ts
+++ b/packages/next/src/views/Root/getCustomViewByRoute.ts
@@ -22,9 +22,11 @@ export const getCustomViewByRoute = ({
routes: { admin: adminRoute },
} = config
- const currentRoute = currentRouteWithAdmin.replace(adminRoute, '')
let viewKey: string
+ const currentRoute =
+ adminRoute === '/' ? currentRouteWithAdmin : currentRouteWithAdmin.replace(adminRoute, '')
+
const foundViewConfig =
(views &&
typeof views === 'object' &&
diff --git a/test/admin-root/CustomView/index.tsx b/test/admin-root/CustomView/index.tsx
new file mode 100644
index 000000000..b36f89062
--- /dev/null
+++ b/test/admin-root/CustomView/index.tsx
@@ -0,0 +1,5 @@
+import type { AdminViewServerProps } from 'payload'
+
+export function CustomView(args: AdminViewServerProps) {
+ return
Hello, world!
+}
diff --git a/test/admin-root/app/(payload)/[[...segments]]/not-found.tsx b/test/admin-root/app/(payload)/[[...segments]]/not-found.tsx
index 2e97dec0d..180e6f81c 100644
--- a/test/admin-root/app/(payload)/[[...segments]]/not-found.tsx
+++ b/test/admin-root/app/(payload)/[[...segments]]/not-found.tsx
@@ -5,7 +5,7 @@ import type { Metadata } from 'next'
import config from '@payload-config'
import { generatePageMetadata, NotFoundPage } from '@payloadcms/next/views'
-import { importMap } from '../admin/importMap.js'
+import { importMap } from '../importMap.js'
type Args = {
params: Promise<{
diff --git a/test/admin-root/app/(payload)/[[...segments]]/page.tsx b/test/admin-root/app/(payload)/[[...segments]]/page.tsx
index 0a26178aa..e59b2d3a8 100644
--- a/test/admin-root/app/(payload)/[[...segments]]/page.tsx
+++ b/test/admin-root/app/(payload)/[[...segments]]/page.tsx
@@ -5,7 +5,7 @@ import type { Metadata } from 'next'
import config from '@payload-config'
import { generatePageMetadata, RootPage } from '@payloadcms/next/views'
-import { importMap } from '../admin/importMap.js'
+import { importMap } from '../importMap.js'
type Args = {
params: Promise<{
diff --git a/test/admin-root/app/(payload)/importMap.js b/test/admin-root/app/(payload)/importMap.js
new file mode 100644
index 000000000..7e732f320
--- /dev/null
+++ b/test/admin-root/app/(payload)/importMap.js
@@ -0,0 +1,5 @@
+import { CustomView as CustomView_c4f0e2747eca2be436a06a63cea31567 } from '../../CustomView/index.js'
+
+export const importMap = {
+ "/CustomView/index.js#CustomView": CustomView_c4f0e2747eca2be436a06a63cea31567
+}
diff --git a/test/admin-root/app/(payload)/layout.tsx b/test/admin-root/app/(payload)/layout.tsx
index 5e7b56435..0ac1a5ec1 100644
--- a/test/admin-root/app/(payload)/layout.tsx
+++ b/test/admin-root/app/(payload)/layout.tsx
@@ -6,7 +6,7 @@ import config from '@payload-config'
import { handleServerFunctions, RootLayout } from '@payloadcms/next/layouts'
import React from 'react'
-import { importMap } from './admin/importMap.js'
+import { importMap } from './importMap.js'
import '@payloadcms/next/css'
import './custom.scss'
diff --git a/test/admin-root/config.ts b/test/admin-root/config.ts
index 55af94985..6e3110fc9 100644
--- a/test/admin-root/config.ts
+++ b/test/admin-root/config.ts
@@ -22,6 +22,14 @@ export default buildConfigWithDefaults({
baseDir: path.resolve(dirname),
},
theme: 'dark',
+ components: {
+ views: {
+ CustomDefaultView: {
+ Component: '/CustomView/index.js#CustomView',
+ path: '/custom-view',
+ },
+ },
+ },
},
cors: ['http://localhost:3000', 'http://localhost:3001'],
globals: [MenuGlobal],
diff --git a/test/admin-root/e2e.spec.ts b/test/admin-root/e2e.spec.ts
index cd08fd523..99cf45c2c 100644
--- a/test/admin-root/e2e.spec.ts
+++ b/test/admin-root/e2e.spec.ts
@@ -2,7 +2,6 @@ import type { BrowserContext, Page } from '@playwright/test'
import { expect, test } from '@playwright/test'
import * as path from 'path'
-import { wait } from 'payload/shared'
import { adminRoute } from 'shared.js'
import { fileURLToPath } from 'url'
@@ -11,7 +10,7 @@ import {
initPageConsoleErrorCatch,
login,
saveDocAndAssert,
- throttleTest,
+ // throttleTest,
} from '../helpers.js'
import { AdminUrlUtil } from '../helpers/adminUrlUtil.js'
import { initPayloadE2ENoConfig } from '../helpers/initPayloadE2ENoConfig.js'
@@ -134,4 +133,9 @@ test.describe('Admin Panel (Root)', () => {
await expect(page.locator('#field-theme')).toBeHidden()
await expect(page.locator('#field-theme-auto')).toBeHidden()
})
+
+ test('should mount custom root views', async () => {
+ await page.goto(`${url.admin}/custom-view`)
+ await expect(page.locator('#custom-view')).toBeVisible()
+ })
})
diff --git a/test/admin-root/next-env.d.ts b/test/admin-root/next-env.d.ts
index 40c3d6809..1b3be0840 100644
--- a/test/admin-root/next-env.d.ts
+++ b/test/admin-root/next-env.d.ts
@@ -2,4 +2,4 @@
///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.