import type { GlobalConfig } from 'payload' import { adminOnly } from '../../access/adminOnly' import { revalidatePopup } from './hooks/revalidatePopup' export const PopupAnnouncement: GlobalConfig = { slug: 'popup-announcement', label: 'Popup-meddelande', admin: { group: 'Globala inställningar', description: 'Ett popup-fönster som visas för besökare. Kan begränsas till specifika sidor.', }, access: { read: () => true, update: adminOnly, }, hooks: { afterChange: [revalidatePopup], }, fields: [ { name: 'enabled', type: 'checkbox', label: 'Aktiverad', defaultValue: false, }, { name: 'heading', type: 'text', label: 'Rubrik', required: true, defaultValue: 'Nyhet', admin: { condition: (data) => Boolean(data?.enabled), }, }, { name: 'subheading', type: 'text', label: 'Underrubrik (valfri)', admin: { condition: (data) => Boolean(data?.enabled), }, }, { name: 'body', type: 'textarea', label: 'Beskrivning', admin: { condition: (data) => Boolean(data?.enabled), }, }, { name: 'ctaText', type: 'text', label: 'CTA-knapptext', defaultValue: 'Läs mer', admin: { condition: (data) => Boolean(data?.enabled), }, }, // ── CTA Link — internal page picker or custom URL ────────────────────── { name: 'ctaLink', type: 'group', label: 'CTA-länk', admin: { condition: (data) => Boolean(data?.enabled), hideGutter: true, }, fields: [ { type: 'row', fields: [ { name: 'type', type: 'radio', label: 'Länktyp', defaultValue: 'custom', options: [ { label: 'Intern sida', value: 'reference' }, { label: 'Egen URL', value: 'custom' }, ], admin: { layout: 'horizontal', width: '50%' }, }, { name: 'newTab', type: 'checkbox', label: 'Öppna i ny flik', admin: { width: '50%', style: { alignSelf: 'flex-end' } }, }, ], }, { name: 'reference', type: 'relationship', label: 'Sida', relationTo: ['pages', 'posts'] as const, admin: { condition: (_, siblingData) => siblingData?.type === 'reference', }, }, { name: 'url', type: 'text', label: 'URL', admin: { condition: (_, siblingData) => siblingData?.type === 'custom', description: 'T.ex. /bredband eller https://example.com', }, }, ], }, { name: 'image', type: 'upload', relationTo: 'media' as const, label: 'Bild (valfri, visas till höger)', admin: { condition: (data) => Boolean(data?.enabled), }, }, { name: 'badgeText', type: 'text', label: 'Badge-text (valfri)', defaultValue: 'NYHET', admin: { description: 'T.ex. "NYHET", "ERBJUDANDE", "VIKTIG INFO"', condition: (data) => Boolean(data?.enabled), }, }, { name: 'theme', type: 'select', label: 'Tema', defaultValue: 'light', options: [ { label: 'Ljust (vit bakgrund)', value: 'light' }, { label: 'Mörkt (navy bakgrund)', value: 'dark' }, ], admin: { condition: (data) => Boolean(data?.enabled), }, }, { name: 'showOnPages', type: 'select', label: 'Visa på', defaultValue: 'all', options: [ { label: 'Alla sidor', value: 'all' }, { label: 'Enbart startsidan', value: 'home' }, { label: 'Specifika sidor', value: 'specific' }, ], admin: { condition: (data) => Boolean(data?.enabled), }, }, // ── Specific pages — relationship instead of fragile comma-separated text ── { name: 'specificPages', type: 'relationship', label: 'Välj sidor', relationTo: 'pages' as const, hasMany: true, admin: { description: 'Välj exakt vilka sidor popupen ska visas på.', condition: (data) => data?.showOnPages === 'specific', }, }, { name: 'dismissDays', type: 'number', label: 'Dölj i antal dagar efter stängning', defaultValue: 7, admin: { description: 'Hur många dagar popupen ska döljas efter att besökaren stänger den.', condition: (data) => Boolean(data?.enabled), }, }, ], }