import type { CollectionConfig } from 'payload'
import { admins } from '../../access/admins'
import { adminsOrPublished } from './access/adminsOrPublished'
import { slugField } from '../../fields/slug'
import { richText } from 'src/fields/richText'
import { InlineToolbarFeature, lexicalEditor, LinkFeature } from '@payloadcms/richtext-lexical'
export const Posts: CollectionConfig = {
slug: 'posts',
admin: {
group: 'Blog',
useAsTitle: 'title',
defaultColumns: ['title', 'slug', 'updatedAt'],
preview: (doc) => {
return `${process.env.BASE_URL}/blog/${doc.slug !== 'home' ? doc.slug : ''}?preview=1`
},
},
versions: {
drafts: true,
},
access: {
read: adminsOrPublished,
update: admins,
create: admins,
delete: admins,
},
defaultPopulate: {
title: true,
featuredImage: true,
slug: true,
publishedAt: true,
},
fields: [
{
name: 'title',
type: 'text',
required: true,
},
{
name: 'perex',
type: 'richText',
editor: lexicalEditor({
features: () => [InlineToolbarFeature(), LinkFeature()],
}),
},
{
name: 'featuredImage',
type: 'upload',
relationTo: 'media',
required: true,
},
richText({
name: 'content',
}),
{
name: 'publishedAt',
type: 'date',
admin: {
position: 'sidebar',
date: {
pickerAppearance: 'dayAndTime',
},
},
hooks: {
beforeChange: [
({ siblingData, value }) => {
if (siblingData._status === 'published' && !value) {
return new Date()
}
return value
},
],
},
},
{
name: 'isNew',
label: 'Mark as new',
type: 'checkbox',
admin: {
position: 'sidebar',
},
},
{
name: 'articleBy',
type: 'relationship',
relationTo: 'designers',
hasMany: true,
admin: {
position: 'sidebar',
},
},
{
name: 'postCategories',
label: 'Categories',
type: 'relationship',
relationTo: 'postCategories',
hasMany: true,
required: true,
admin: {
position: 'sidebar',
},
},
{
name: 'relatedFamilies',
type: 'relationship',
relationTo: 'families',
hasMany: true,
admin: {
position: 'sidebar',
},
},
slugField(),
],
}