83 lines
1.7 KiB
TypeScript
83 lines
1.7 KiB
TypeScript
import { type CollectionConfig } from 'payload';
|
|
import { lexicalEditor, UploadFeature } from '@payloadcms/richtext-lexical';
|
|
|
|
export const Posts: CollectionConfig = {
|
|
slug: 'posts',
|
|
|
|
labels: {
|
|
singular: 'Artikel',
|
|
plural: 'Artikel'
|
|
},
|
|
|
|
admin: {
|
|
useAsTitle: 'title',
|
|
group: 'Inhalte',
|
|
description: 'Artikel verwalten',
|
|
defaultColumns: [ 'id', 'slug', 'title', 'author', '_status' ],
|
|
hideAPIURL: true,
|
|
preview: doc =>
|
|
`${process.env.NEXT_PUBLIC_PAYLOAD_URL}/post/${doc.slug}/?preview`
|
|
},
|
|
|
|
versions: {
|
|
drafts: true
|
|
},
|
|
|
|
access: {
|
|
read: ({ data, req }) => (data?._status && data?._status !== 'draft') || [ 'admin', 'superadmin' ].includes(req.user?.role),
|
|
create: ({ req }) => [ 'admin', 'superadmin' ].includes(req.user?.role),
|
|
update: ({ req }) => [ 'admin', 'superadmin' ].includes(req.user?.role),
|
|
delete: ({ req }) => [ 'admin', 'superadmin' ].includes(req.user?.role)
|
|
},
|
|
|
|
orderable: true,
|
|
|
|
fields: [
|
|
{
|
|
name: 'title',
|
|
label: 'Titel',
|
|
type: 'text',
|
|
required: true
|
|
},
|
|
{
|
|
name: 'slug',
|
|
label: 'Slug',
|
|
type: 'text',
|
|
required: true,
|
|
unique: true,
|
|
admin: {
|
|
placeholder: 'Zum Beispiel: mein-toller-post'
|
|
|
|
}
|
|
},
|
|
{
|
|
name: 'content',
|
|
label: 'Inhalt',
|
|
type: 'richText',
|
|
editor: lexicalEditor({
|
|
features: ({ defaultFeatures }) => [
|
|
...defaultFeatures,
|
|
UploadFeature({
|
|
collections: {
|
|
media: {
|
|
fields: []
|
|
}
|
|
}
|
|
})
|
|
]
|
|
})
|
|
},
|
|
{
|
|
name: 'author',
|
|
label: 'Autor',
|
|
type: 'relationship',
|
|
relationTo: 'users',
|
|
filterOptions: () => {
|
|
return {
|
|
// eslint-disable-next-line camelcase
|
|
role: { not_equals: 'superadmin' }
|
|
};
|
|
}
|
|
}
|
|
]
|
|
}; |