200 lines
5.3 KiB
TypeScript
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,
|
|
}),
|
|
],
|
|
})
|