Files
bmp-website-2026/src/scripts/preload-header-awards-nav-cms.ts

67 lines
1.6 KiB
TypeScript

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<SpaHeaderNavItem, 'key' | 'label'>) =>
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)
})