// 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, }), ], })