From 1bc1f31940459ed2939d21f31bf366287cba7802 Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Tue, 30 Jun 2026 19:21:05 +0200 Subject: [PATCH] feat: Add preload script for header awards navigation and update nav items --- package.json | 1 + src/scripts/preload-header-awards-nav-cms.ts | 66 ++++++++++++++++++++ src/spa/cmsNavigation.ts | 1 + 3 files changed, 68 insertions(+) create mode 100644 src/scripts/preload-header-awards-nav-cms.ts diff --git a/package.json b/package.json index 4f8d3eb..b19f65e 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "setup:fresh-db": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/setup-fresh-database.ts", "preload:blog-detail-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-blog-detail-cms.ts", "preload:globals-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-globals-cms.ts", + "preload:header-awards-nav-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-header-awards-nav-cms.ts", "preload:about-page-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-about-page-cms.ts", "preload:contact-page-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-contact-page-cms.ts", "preload:datenschutz-page-cms": "cross-env NODE_OPTIONS=--no-deprecation tsx src/scripts/preload-datenschutz-page-cms.ts", diff --git a/src/scripts/preload-header-awards-nav-cms.ts b/src/scripts/preload-header-awards-nav-cms.ts new file mode 100644 index 0000000..2cffd2a --- /dev/null +++ b/src/scripts/preload-header-awards-nav-cms.ts @@ -0,0 +1,66 @@ +import 'dotenv/config' + +process.env.PAYLOAD_MIGRATING ||= 'true' + +import config from '@payload-config' +import { getPayload } from 'payload' + +import { defaultHeaderData, type SpaHeaderNavItem } from '@/spa/cmsNavigation' + +const awardsNavLink = { + label: 'Unsere Auszeichnungen', + path: '/teilnahme#auszeichnungen', +} + +const isBmpNavItem = (item: Pick) => + item.key === 'bmp' || item.label === 'Der BMP' + +async function main() { + const payload = await getPayload({ config }) + const header = await payload.findGlobal({ + slug: 'header', + depth: 0, + overrideAccess: true, + }) + + const navItems = + header.navItems?.length && Array.isArray(header.navItems) + ? (header.navItems as SpaHeaderNavItem[]) + : defaultHeaderData.navItems + + const updatedNavItems = navItems.map((item) => { + if (!isBmpNavItem(item)) return item + + const sub = item.sub ?? [] + const hasAwardsLink = sub.some( + (subItem) => + subItem.path === awardsNavLink.path || + subItem.label.trim().toLowerCase() === awardsNavLink.label.toLowerCase(), + ) + + return hasAwardsLink + ? item + : { + ...item, + sub: [...sub, awardsNavLink], + } + }) + + await payload.updateGlobal({ + slug: 'header', + overrideAccess: true, + context: { disableRevalidate: true }, + data: { + navItems: updatedNavItems, + } as never, + }) + + payload.logger.info('Ensured Der BMP header nav includes Unsere Auszeichnungen.') + await payload.destroy() + process.exit(0) +} + +main().catch((error) => { + console.error(error) + process.exit(1) +}) diff --git a/src/spa/cmsNavigation.ts b/src/spa/cmsNavigation.ts index 4455ac1..bdb6787 100644 --- a/src/spa/cmsNavigation.ts +++ b/src/spa/cmsNavigation.ts @@ -89,6 +89,7 @@ export const defaultHeaderData: SpaHeaderData = { { label: 'Was ist der Preis?', path: '/der-bmp#was-ist' }, { label: 'Geschichte & Werte', path: '/der-bmp#geschichte' }, { label: 'Vorteile der Auszeichnung', path: '/der-bmp#vorteile' }, + { label: 'Unsere Auszeichnungen', path: '/teilnahme#auszeichnungen' }, ], }, {