import configPromise from '@payload-config' import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { headers as getHeaders } from 'next/headers' import { notFound, redirect } from 'next/navigation' import { executeAuthStrategies, getPayload } from 'payload' // @ts-expect-error generated by Payload admin import map generator import { importMap } from '../importMap.js' import { AdminHome } from '../_components/admin-home' import { AdminLoginForm } from '../_components/admin-login-form' type AdminPageProps = { params: Promise<{ segments?: string[] }> searchParams: Promise<{ [key: string]: string | string[] | undefined }> } async function getAdminSegments(params: AdminPageProps['params']) { const value = await params return Array.isArray(value.segments) ? value.segments.filter(Boolean) : [] } 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 } export async function generateMetadata({ params, searchParams }: AdminPageProps) { const segments = await getAdminSegments(params) if (segments[0] === 'forgot') notFound() return generatePageMetadata({ config: configPromise, params: Promise.resolve({ segments }), searchParams: searchParams as Promise<{ [key: string]: string | string[] }>, }) } export default async function PayloadAdminPage({ params, searchParams }: AdminPageProps) { const segments = await getAdminSegments(params) const resolvedSearchParams = await searchParams if (segments[0] === 'forgot') notFound() if (segments.length === 1 && segments[0] === 'login') { if (await getAdminUser()) redirect('/admin') return } if (segments.length === 0) { const user = await getAdminUser() if (!user) redirect('/admin/login?redirect=/admin') return } return RootPage({ config: configPromise, importMap, params: Promise.resolve({ segments }), searchParams: Promise.resolve(resolvedSearchParams as { [key: string]: string | string[] }), }) }