church-website/src/payload.config.ts
2026-04-10 11:39:30 +02:00

200 lines
5.3 KiB
TypeScript

// storage-adapter-import-placeholder
import {
lexicalEditor,
BoldFeature,
InlineToolbarFeature,
ItalicFeature,
UnderlineFeature,
ParagraphFeature,
HeadingFeature,
AlignFeature,
UnorderedListFeature,
LinkFeature,
FixedToolbarFeature,
} from '@payloadcms/richtext-lexical'
import path from 'path'
import { buildConfig } from 'payload'
import { fileURLToPath } from 'url'
import sharp from 'sharp'
import { Users } from './collections/Users'
import { Media } from './collections/Media'
import { Worship } from '@/collections/Worship'
import { Churches } from '@/collections/Churches'
import { de } from '@payloadcms/translations/languages/de'
import { Parish } from '@/collections/Parish'
import { Groups } from '@/collections/Groups'
import { Events } from '@/collections/Events'
import { Announcements } from '@/collections/Announcements'
import { Blog } from '@/collections/Blog'
import { Highlight } from '@/collections/Highlight'
import { Documents } from '@/collections/Documents'
import { Locations } from '@/collections/Locations'
import { ContactPerson } from '@/collections/ContactPerson'
import { postgresAdapter } from '@payloadcms/db-postgres'
import { gcsStorage } from '@payloadcms/storage-gcs'
import { PopesPrayerIntentions } from '@/collections/PopesPrayerIntentions'
import { LiturgicalCalendar } from '@/collections/LiturgicalCalendar'
import { Classifieds } from '@/collections/Classifieds'
import { MenuGlobal } from '@/globals/Menu'
import { FooterGlobal } from '@/globals/Footer'
import { Magazine } from '@/collections/Magazine'
import { DonationForms } from '@/collections/DonationForms'
import { Pages } from '@/collections/Pages'
import { Prayers } from '@/collections/Prayers'
import { siteConfig } from '@/config/site'
import { generateRecurringMassesTask } from '@/jobs/generateRecurringMasses'
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
export default buildConfig({
admin: {
user: Users.slug,
meta: {
title: 'Dashboard',
titleSuffix: `- ${siteConfig.shortName}`
},
importMap: {
baseDir: dirname,
},
components: {
graphics: {
Logo: {
path: '/components/Logo/Logo',
serverProps: {
withText: true,
height: 90
}
},
Icon: {
path: '/components/Logo/Logo',
serverProps: {
height: 18
}
}
}
},
livePreview: {
collections: ['blog', 'event', 'group', 'pages', 'parish'],
},
},
collections: [
Parish,
Churches,
Worship,
PopesPrayerIntentions,
Announcements,
LiturgicalCalendar,
Blog,
Highlight,
Events,
Classifieds,
ContactPerson,
Locations,
Groups,
DonationForms,
Pages,
Prayers,
Magazine,
Documents,
Media,
Users,
],
globals: [
MenuGlobal,
FooterGlobal,
],
jobs: {
tasks: [generateRecurringMassesTask],
autoRun: [
{
// every 15 minutes (6-field cron, seconds first)
cron: '0 */15 * * * *',
queue: 'default',
limit: 10,
},
],
// show jobs in the admin panel
jobsCollectionOverrides: ({ defaultJobsCollection }) => {
if (!defaultJobsCollection.admin) {
defaultJobsCollection.admin = {}
}
defaultJobsCollection.admin.hidden = process.env.NODE_ENV === 'production'
return defaultJobsCollection
},
shouldAutoRun: () => process.env.NODE_ENV === 'production',
},
graphQL: {
disable: true
},
editor: lexicalEditor(
{
features: () => [
BoldFeature(),
ItalicFeature(),
UnderlineFeature(),
HeadingFeature({ enabledHeadingSizes: ["h3","h4","h5"]}),
AlignFeature(),
UnorderedListFeature(),
LinkFeature({
fields: ({ defaultFields }) => [
...defaultFields,
{
name: 'appearance',
type: 'select',
defaultValue: 'link',
label: 'Darstellung',
options: [
{ label: 'Link', value: 'link' },
{ label: 'Button', value: 'button' },
],
},
],
}),
ParagraphFeature(),
InlineToolbarFeature(),
FixedToolbarFeature()
]
}
),
secret: process.env.PAYLOAD_SECRET || '',
typescript: {
outputFile: path.resolve(dirname, 'payload-types.ts'),
},
i18n: {
supportedLanguages: { de },
},
db: postgresAdapter({
idType: "uuid",
push: false,
pool: {
connectionString: process.env.DATABASE_URI,
}
}),
sharp,
plugins: [
gcsStorage({
enabled: !!process.env.GOOGLE_BUCKET,
alwaysInsertFields: true,
collections: {
media: {
disablePayloadAccessControl: true,
prefix: 'media/',
generateFileURL: (args) =>
`https://storage.googleapis.com/${process.env.GOOGLE_BUCKET}/media/${args.filename}`,
},
documents: {
disablePayloadAccessControl: true,
prefix: 'documents/',
generateFileURL: (args) =>
`https://storage.googleapis.com/${process.env.GOOGLE_BUCKET}/documents/${args.filename}`,
},
},
bucket: process.env.GOOGLE_BUCKET || '',
options: {},
acl: undefined,
}),
],
})