Files
website/src/app/(payload)/admin/[[...segments]]/page.tsx
T

67 lines
2.1 KiB
TypeScript
Raw Normal View History

2026-04-23 01:08:18 +08:00
import configPromise from '@payload-config'
import { RootPage, generatePageMetadata } from '@payloadcms/next/views'
2026-04-28 09:16:15 +08:00
import { headers as getHeaders } from 'next/headers'
import { redirect } from 'next/navigation'
import { executeAuthStrategies, getPayload } from 'payload'
2026-04-23 01:08:18 +08:00
// @ts-expect-error generated by Payload admin import map generator
import { importMap } from '../importMap.js'
import { AdminHome } from '../_components/admin-home'
2026-04-28 09:16:15 +08:00
import { AdminLoginForm } from '../_components/admin-login-form'
2026-04-23 01:08:18 +08:00
type AdminPageProps = {
params: Promise<{ segments?: string[] }>
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}
2026-04-28 09:16:15 +08:00
async function getAdminUser() {
const [config, headers] = await Promise.all([configPromise, getHeaders()])
const payload = await getPayload({
config,
importMap,
})
const { user } = await executeAuthStrategies({
headers,
payload,
})
return user
}
2026-04-23 01:08:18 +08:00
export async function generateMetadata({ params, searchParams }: AdminPageProps) {
return generatePageMetadata({
config: configPromise,
params: params as Promise<{ [key: string]: string | string[] }>,
searchParams: searchParams as Promise<{ [key: string]: string | string[] }>,
})
}
export default async function PayloadAdminPage({ params, searchParams }: AdminPageProps) {
const normalizedParams = params.then(async (value) => {
const segments = Array.isArray(value.segments) ? value.segments.filter(Boolean) : []
return { segments }
})
const { segments } = await normalizedParams
const resolvedSearchParams = await searchParams
2026-04-28 09:16:15 +08:00
if (segments.length === 1 && segments[0] === 'login') {
if (await getAdminUser()) redirect('/admin')
return <AdminLoginForm />
}
2026-04-23 01:08:18 +08:00
if (segments.length === 0) {
2026-04-28 09:16:15 +08:00
if (!(await getAdminUser())) redirect('/admin/login?redirect=/admin')
2026-04-23 01:08:18 +08:00
return <AdminHome cacheCleared={resolvedSearchParams.cache === 'cleared'} />
}
return RootPage({
config: configPromise,
importMap,
params: Promise.resolve({ segments }),
searchParams: Promise.resolve(resolvedSearchParams as { [key: string]: string | string[] }),
})
}