church-website/src/globals/Menu.ts
2026-03-06 12:46:49 +01:00

145 lines
No EOL
2.7 KiB
TypeScript

import { Block, GlobalConfig } from 'payload'
import { isAdmin } from '@/collections/access/admin'
import { revalidateTag } from 'next/cache'
const SimpleItem: Block = {
slug: 'simple-item',
labels: {
singular: 'Einfach',
plural: 'Einfach'
},
fields: [
{
name: 'text',
type: 'text',
required: true
},
{
name: 'href',
type: 'text',
label: 'Zieladresse',
required: true
},
{
name: 'type',
type: 'select',
options: [
{
label: 'Standard',
value: 'default'
},
{
label: 'Button',
value: 'button'
}
],
defaultValue: "default",
required: true
}
]
}
const MegaMenuItem: Block = {
slug: 'mega-menu',
fields: [
{
name: 'text',
type: 'text',
required: true,
},
{
name: 'quote',
label: "Bibelvers",
type: 'text',
required: true
},
{
name: 'source',
label: 'Bibelvers buch',
type: 'text',
required: true
},
{
name: 'groups',
label: 'Navigationsgruppen',
type: 'array',
fields: [
{
name: 'title',
label: 'Titel',
type: 'text',
required: true,
},
{
name: 'items',
label: 'Elemente',
type: 'array',
fields: [
{
name: 'title',
label: 'title',
type: 'text',
required: true,
},
{
name: 'description',
label: 'Beschreibung',
type: 'text',
maxLength: 100,
required: true,
},
{
name: 'href',
label: 'Zieladresse',
type: 'text',
required: true,
}
],
required: true,
}
],
minRows: 1,
maxRows: 5,
required: true,
}
]
}
export const MenuGlobal: GlobalConfig = {
slug: 'menu',
label: {
de: 'Navigationsmenü'
},
admin: {
description: "Hier können Sie die Einträge und die Reihenfolge der Hauptnavigation festlegen."
},
fields: [
{
name: 'leftItems',
label: 'Elemente links',
type: 'blocks',
required: true,
blocks: [
SimpleItem,
MegaMenuItem
]
},
{
name: 'rightItems',
label: 'Elemente Rechts',
type: 'blocks',
required: true,
blocks: [
SimpleItem,
MegaMenuItem
]
}
],
access: {
read: () => true,
update: isAdmin()
},
hooks: {
afterChange: [() => revalidateTag("menu")]
}
}