diff --git a/packages/next/src/views/NotFound/index.client.tsx b/packages/next/src/views/NotFound/index.client.tsx
index c7b09ad048..b800df549f 100644
--- a/packages/next/src/views/NotFound/index.client.tsx
+++ b/packages/next/src/views/NotFound/index.client.tsx
@@ -18,7 +18,7 @@ export const NotFoundClient: React.FC<{
const { t } = useTranslation()
const {
- routes: { admin },
+ routes: { admin: adminRoute },
} = useConfig()
useEffect(() => {
@@ -38,7 +38,7 @@ export const NotFoundClient: React.FC<{
{t('general:nothingFound')}
{t('general:sorryNotFound')}
-
diff --git a/packages/next/src/views/NotFound/index.tsx b/packages/next/src/views/NotFound/index.tsx
index 5abe6e54fa..0b4b4c2a4e 100644
--- a/packages/next/src/views/NotFound/index.tsx
+++ b/packages/next/src/views/NotFound/index.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next'
import type { AdminViewComponent, SanitizedConfig } from 'payload'
import { HydrateClientUser } from '@payloadcms/ui'
+import { formatAdminURL } from '@payloadcms/ui/shared'
import React, { Fragment } from 'react'
import { DefaultTemplate } from '../../templates/Default/index.js'
@@ -52,7 +53,7 @@ export const NotFoundPage = async ({
const initPageResult = await initPage({
config,
redirectUnauthenticatedUser: true,
- route: `${adminRoute}/not-found`,
+ route: formatAdminURL({ adminRoute, path: '/not-found' }),
searchParams,
})
diff --git a/packages/next/src/views/ResetPassword/index.client.tsx b/packages/next/src/views/ResetPassword/index.client.tsx
index fbb930e0fc..6b700e76d6 100644
--- a/packages/next/src/views/ResetPassword/index.client.tsx
+++ b/packages/next/src/views/ResetPassword/index.client.tsx
@@ -12,6 +12,7 @@ import {
useFormFields,
useTranslation,
} from '@payloadcms/ui'
+import { formatAdminURL } from '@payloadcms/ui/shared'
import { useRouter } from 'next/navigation.js'
import React from 'react'
import { toast } from 'sonner'
@@ -36,8 +37,11 @@ const initialState: FormState = {
export const ResetPasswordClient: React.FC
= ({ token }) => {
const i18n = useTranslation()
const {
- admin: { user: userSlug },
- routes: { admin, api },
+ admin: {
+ routes: { login: loginRoute },
+ user: userSlug,
+ },
+ routes: { admin: adminRoute, api: apiRoute },
serverURL,
} = useConfig()
@@ -49,18 +53,23 @@ export const ResetPasswordClient: React.FC = ({ token }) => {
async (data) => {
if (data.token) {
await fetchFullUser()
- history.push(`${admin}`)
+ history.push(adminRoute)
} else {
- history.push(`${admin}/login`)
+ history.push(
+ formatAdminURL({
+ adminRoute,
+ path: loginRoute,
+ }),
+ )
toast.success(i18n.t('general:updatedSuccessfully'))
}
},
- [fetchFullUser, history, admin, i18n],
+ [fetchFullUser, history, adminRoute, i18n],
)
return (
diff --git a/packages/next/src/views/Root/getViewFromConfig.tsx b/packages/next/src/views/Root/getViewFromConfig.tsx
index 25c7c26781..978b1fd274 100644
--- a/packages/next/src/views/Root/getViewFromConfig.tsx
+++ b/packages/next/src/views/Root/getViewFromConfig.tsx
@@ -1,5 +1,7 @@
import type { AdminViewComponent, SanitizedConfig } from 'payload'
+import { formatAdminURL } from '@payloadcms/ui/shared'
+
import type { initPage } from '../../utilities/initPage/index.js'
import { Account } from '../Account/index.js'
@@ -93,7 +95,7 @@ export const getViewFromConfig = ({
return isPathMatchingRoute({
currentRoute,
exact: true,
- path: `${adminRoute}${route}`,
+ path: formatAdminURL({ adminRoute, path: route }),
})
})
diff --git a/packages/next/src/views/Root/index.tsx b/packages/next/src/views/Root/index.tsx
index 8e890ab45b..c1261a5d38 100644
--- a/packages/next/src/views/Root/index.tsx
+++ b/packages/next/src/views/Root/index.tsx
@@ -2,7 +2,7 @@ import type { I18nClient } from '@payloadcms/translations'
import type { Metadata } from 'next'
import type { SanitizedConfig } from 'payload'
-import { WithServerSideProps } from '@payloadcms/ui/shared'
+import { WithServerSideProps, formatAdminURL } from '@payloadcms/ui/shared'
import { notFound, redirect } from 'next/navigation.js'
import React, { Fragment } from 'react'
@@ -37,13 +37,16 @@ export const RootPage = async ({
const {
admin: {
- routes: { createFirstUser: createFirstUserRoute },
+ routes: { createFirstUser: _createFirstUserRoute },
user: userSlug,
},
routes: { admin: adminRoute },
} = config
- const currentRoute = `${adminRoute}${Array.isArray(params.segments) ? `/${params.segments.join('/')}` : ''}`
+ const currentRoute = formatAdminURL({
+ adminRoute,
+ path: `${Array.isArray(params.segments) ? `/${params.segments.join('/')}` : ''}`,
+ })
const segments = Array.isArray(params.segments) ? params.segments : []
@@ -71,20 +74,20 @@ export const RootPage = async ({
})
?.then((doc) => !!doc)
- const routeWithAdmin = `${adminRoute}${createFirstUserRoute}`
+ const createFirstUserRoute = formatAdminURL({ adminRoute, path: _createFirstUserRoute })
const collectionConfig = config.collections.find(({ slug }) => slug === userSlug)
const disableLocalStrategy = collectionConfig?.auth?.disableLocalStrategy
- if (disableLocalStrategy && currentRoute === routeWithAdmin) {
+ if (disableLocalStrategy && currentRoute === createFirstUserRoute) {
redirect(adminRoute)
}
- if (!dbHasUser && currentRoute !== routeWithAdmin && !disableLocalStrategy) {
- redirect(routeWithAdmin)
+ if (!dbHasUser && currentRoute !== createFirstUserRoute && !disableLocalStrategy) {
+ redirect(createFirstUserRoute)
}
- if (dbHasUser && currentRoute === routeWithAdmin) {
+ if (dbHasUser && currentRoute === createFirstUserRoute) {
redirect(adminRoute)
}
}
diff --git a/packages/next/src/views/Verify/index.tsx b/packages/next/src/views/Verify/index.tsx
index 7ec9b2d98a..069a793ceb 100644
--- a/packages/next/src/views/Verify/index.tsx
+++ b/packages/next/src/views/Verify/index.tsx
@@ -1,5 +1,6 @@
import type { AdminViewProps } from 'payload'
+import { formatAdminURL } from '@payloadcms/ui/shared'
import { redirect } from 'next/navigation.js'
import React from 'react'
@@ -39,10 +40,10 @@ export const Verify: React.FC