Files
payloadcms/packages/next/src/utilities/initPage/handleAdminPage.ts

63 lines
1.6 KiB
TypeScript

import type {
Permissions,
SanitizedCollectionConfig,
SanitizedConfig,
SanitizedGlobalConfig,
} from 'payload'
import { notFound } from 'next/navigation.js'
import { getRouteWithoutAdmin, isAdminAuthRoute, isAdminRoute } from './shared.js'
export const handleAdminPage = ({
adminRoute,
config,
permissions,
route,
}: {
adminRoute: string
config: SanitizedConfig
permissions: Permissions
route: string
}) => {
if (isAdminRoute({ adminRoute, config, route })) {
const routeWithoutAdmin = getRouteWithoutAdmin({ adminRoute, route })
const routeSegments = routeWithoutAdmin.split('/').filter(Boolean)
const [entityType, entitySlug, createOrID] = routeSegments
const collectionSlug = entityType === 'collections' ? entitySlug : undefined
const globalSlug = entityType === 'globals' ? entitySlug : undefined
const docID = collectionSlug && createOrID !== 'create' ? createOrID : undefined
let collectionConfig: SanitizedCollectionConfig | undefined
let globalConfig: SanitizedGlobalConfig | undefined
if (collectionSlug) {
collectionConfig = config.collections.find((collection) => collection.slug === collectionSlug)
if (!collectionConfig) {
notFound()
}
}
if (globalSlug) {
globalConfig = config.globals.find((global) => global.slug === globalSlug)
if (!globalConfig) {
notFound()
}
}
if (!permissions.canAccessAdmin && !isAdminAuthRoute({ adminRoute, config, route })) {
notFound()
}
return {
collectionConfig,
docID,
globalConfig,
}
}
return {}
}