multisite/src/payload.config.ts
2026-06-01 13:46:10 +08:00

104 lines
2.8 KiB
TypeScript

import { mongooseAdapter } from '@payloadcms/db-mongodb'
import sharp from 'sharp'
import path from 'path'
import { buildConfig, PayloadRequest } from 'payload'
import { fileURLToPath } from 'url'
import { Logo } from '@/components/Logo'
import { Icon } from '@/components/Icon'
import { Categories } from './collections/Categories'
import { Media } from './collections/Media'
import { Pages } from './collections/Pages'
import { Posts } from './collections/Posts'
import { Users } from './collections/Users'
import { Footer } from './Footer/config'
import { Header } from './Header/config'
import { plugins } from './plugins'
import { defaultLexical } from '@/fields/defaultLexical'
import { getServerSideURL } from './utilities/getURL'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfig({
admin: {
components: {
beforeLogin: ['@/components/BeforeLogin'],
beforeDashboard: ['@/components/BeforeDashboard'],
graphics: {
Logo,
Icon,
},
},
importMap: {
baseDir: path.resolve(dirname),
},
user: Users.slug,
livePreview: {
url: ({ data, collectionConfig, globalConfig }) => {
const baseURL = getServerSideURL()
const secret = process.env.PREVIEW_SECRET
if (globalConfig) {
return `${baseURL}/preview/globals/${globalConfig.slug}?previewSecret=${secret}`
}
return `${baseURL}/preview/${collectionConfig?.slug}/${data?.slug ?? data?.id}?previewSecret=${secret}`
},
collections: ['pages', 'posts'],
globals: ['header', 'footer'],
breakpoints: [
{
label: 'Mobile',
name: 'mobile',
width: 375,
height: 667,
},
{
label: 'Tablet',
name: 'tablet',
width: 768,
height: 1024,
},
{
label: 'Desktop',
name: 'desktop',
width: 1440,
height: 900,
},
],
},
meta: {
titleSuffix: '- ByMackie',
favicon: '/favicon.svg',
ogImage: '/favicon.svg',
},
},
editor: defaultLexical,
db: mongooseAdapter({
url: process.env.DATABASE_URI || '',
}),
collections: [Pages, Posts, Media, Categories, Users],
cors: [getServerSideURL()].filter(Boolean),
globals: [Header, Footer],
plugins,
secret: process.env.PAYLOAD_SECRET!,
sharp,
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
jobs: {
access: {
run: ({ req }: { req: PayloadRequest }): boolean => {
if (req.user) return true
const secret = process.env.CRON_SECRET
if (!secret) return false
const authHeader = req.headers.get('authorization')
return authHeader === `Bearer ${secret}`
},
},
tasks: [],
},
})