wwwfiberdirekt/src/globals/PostSettings.ts

209 lines
6.0 KiB
TypeScript

import type { GlobalConfig } from 'payload'
import { authenticated } from '../access/authenticated'
import { revalidatePostSettings } from './hooks/revalidatePostSettings'
export const PostSettings: GlobalConfig = {
slug: 'post-settings',
label: 'Inläggsinställningar',
admin: {
group: 'Globala inställningar',
description: 'Styr utseende och innehåll för nyhetssidan och enskilda inlägg.',
},
access: {
update: authenticated,
read: () => true,
},
hooks: {
afterChange: [revalidatePostSettings],
},
fields: [
/* ── Listing page ───────────────────────────────────────────────────── */
{
type: 'collapsible',
label: 'Listningssida (/posts)',
admin: {
initCollapsed: false,
},
fields: [
{
name: 'listingHeading',
type: 'text',
label: 'Rubrik',
localized: true,
defaultValue: 'Nyheter',
admin: {
description: 'H1-rubrik som visas överst på sidan.',
},
},
{
name: 'listingDescription',
type: 'textarea',
label: 'Beskrivning',
localized: true,
admin: {
description:
'Valfri kort text under rubriken. Används även som meta description om inget annat anges.',
},
},
{
name: 'listingBackground',
type: 'select',
label: 'Bakgrundsfärg',
defaultValue: 'white',
options: [
{ label: 'Vit', value: 'white' },
{ label: 'Grå', value: 'gray' },
{ label: 'Navy', value: 'navy' },
],
},
{
name: 'postsPerPage',
type: 'number',
label: 'Antal inlägg per sida',
defaultValue: 12,
min: 3,
max: 48,
admin: {
step: 3,
description: 'Bör vara delbart med 3 för jämnt rutnät.',
},
},
{
name: 'showCategoriesOnCards',
type: 'checkbox',
label: 'Visa kategorier på kort',
defaultValue: true,
admin: {
description: 'Visar kategori-taggar på varje inläggskort i listan.',
},
},
],
},
/* ── Single post page ───────────────────────────────────────────────── */
{
type: 'collapsible',
label: 'Enskilt inlägg (/posts/[slug])',
admin: {
initCollapsed: false,
},
fields: [
{
name: 'backLinkText',
type: 'text',
label: 'Tillbaka-länk',
localized: true,
defaultValue: '← Tillbaka till nyheter',
admin: {
description: 'Text på länken som leder tillbaka till listningssidan.',
},
},
{
name: 'showCategoriesOnPost',
type: 'checkbox',
label: 'Visa kategorier på inlägg',
defaultValue: true,
admin: {
description: 'Visar kategori-taggar under meta-info på enskilda inlägg.',
},
},
{
name: 'showRelatedPosts',
type: 'checkbox',
label: 'Visa relaterade inlägg',
defaultValue: true,
admin: {
description: 'Visar relaterade inlägg längst ner på sidan (om de finns).',
},
},
{
name: 'relatedPostsHeading',
type: 'text',
label: 'Rubrik för relaterade inlägg',
localized: true,
defaultValue: 'Relaterade inlägg',
admin: {
condition: (data) => Boolean(data?.showRelatedPosts),
},
},
{
type: 'group',
name: 'cta',
label: 'Call to Action',
fields: [
{
name: 'enabled',
type: 'checkbox',
label: 'Visa CTA-knapp',
defaultValue: true,
},
{
name: 'text',
type: 'text',
label: 'Knapptext',
localized: true,
defaultValue: 'Kontakta oss',
admin: {
condition: (_, siblingData) => Boolean(siblingData?.enabled),
},
},
{
name: 'link',
type: 'text',
label: 'Länk',
defaultValue: '/kontakt',
admin: {
condition: (_, siblingData) => Boolean(siblingData?.enabled),
},
},
{
name: 'variant',
type: 'select',
label: 'Stil',
defaultValue: 'primary',
options: [
{ label: 'Primär (gul)', value: 'primary' },
{ label: 'Kontur', value: 'outline' },
],
admin: {
condition: (_, siblingData) => Boolean(siblingData?.enabled),
},
},
],
},
],
},
/* ── SEO overrides ──────────────────────────────────────────────────── */
{
type: 'collapsible',
label: 'SEO',
admin: {
initCollapsed: true,
},
fields: [
{
name: 'metaTitle',
type: 'text',
label: 'Meta-titel',
localized: true,
admin: {
description:
'Titel för <title>-taggen. Lämna tomt för att använda listningsrubriken + "| Fiber Direkt".',
},
},
{
name: 'metaDescription',
type: 'textarea',
label: 'Meta-beskrivning',
localized: true,
admin: {
description:
'Lämna tomt för att använda listningsbeskrivningen ovan.',
},
},
],
},
],
}