feat: add PartnerLogoMark component for dynamic partner logo rendering

This commit is contained in:
syntaxbullet
2026-07-01 11:39:45 +02:00
parent 1bc1f31940
commit 2fda7e8122
72 changed files with 99921 additions and 3421 deletions

View File

@@ -7,7 +7,7 @@ import { notFound } from 'next/navigation'
import NextApp from '@/spa/NextApp'
import { normalizeApplicationPhaseData, type SpaApplicationPhaseData } from '@/spa/applicationPhase'
import { normalizeFooterData, normalizeHeaderData } from '@/spa/cmsNavigation'
import type { CmsRouteDoc } from '@/spa/cmsRoute'
import type { CmsRouteCollection, CmsRouteDoc } from '@/spa/cmsRoute'
import { normalizeSiteSettings, type SpaSiteSettingsData } from '@/spa/siteSettings'
export const dynamic = 'force-dynamic'
@@ -16,7 +16,7 @@ type Args = {
params: Promise<{ slug?: string[] }>
}
type RouteCollection = 'pages' | 'posts' | 'events' | 'preistraeger'
type RouteCollection = Exclude<CmsRouteCollection, 'partners'>
function routeTarget(pathname: string): { collection: RouteCollection; slug: string } {
const parts = pathname.split('/').filter(Boolean)
@@ -57,7 +57,7 @@ async function findRouteDoc(payload: Awaited<ReturnType<typeof getPayload>>, pat
return doc ? { collection: target.collection, doc } : undefined
}
async function findList(payload: Awaited<ReturnType<typeof getPayload>>, collection: RouteCollection, draft: boolean) {
async function findList(payload: Awaited<ReturnType<typeof getPayload>>, collection: CmsRouteCollection, draft: boolean) {
const result = await payload.find({
collection,
depth: 1,
@@ -65,25 +65,33 @@ async function findList(payload: Awaited<ReturnType<typeof getPayload>>, collect
overrideAccess: draft,
limit: 300,
pagination: false,
...(collection === 'partners' ? { sort: 'sortOrder' } : {}),
})
return result.docs
}
async function findHomePage(payload: Awaited<ReturnType<typeof getPayload>>, draft: boolean) {
async function findSupportPages(payload: Awaited<ReturnType<typeof getPayload>>, draft: boolean) {
const result = await payload.find({
collection: 'pages',
depth: 1,
draft,
overrideAccess: draft,
limit: 1,
limit: 10,
pagination: false,
where: {
or: [{ spaPath: { equals: '/' } }, { slug: { equals: 'startseite' } }, { slug: { equals: 'home' } }],
or: [
{ spaPath: { equals: '/' } },
{ slug: { equals: 'startseite' } },
{ slug: { equals: 'home' } },
{ spaPath: { equals: '/netzwerk' } },
{ slug: { equals: 'netzwerk' } },
{ slug: { equals: 'network' } },
],
},
})
return result.docs[0]
return result.docs
}
export default async function Page({ params }: Args) {
@@ -91,16 +99,17 @@ export default async function Page({ params }: Args) {
const pathname = `/${slug.join('/')}`.replace(/\/$/, '') || '/'
const payload = await getPayload({ config: configPromise })
const { isEnabled: draft } = await draftMode()
const [header, footer, siteSettings, applicationPhase, route, homePage, preistraeger, events, posts] = await Promise.all([
const [header, footer, siteSettings, applicationPhase, route, supportPages, preistraeger, events, posts, partners] = await Promise.all([
payload.findGlobal({ slug: 'header', depth: 1 }).catch(() => undefined),
payload.findGlobal({ slug: 'footer', depth: 1 }).catch(() => undefined),
payload.findGlobal({ slug: 'site-settings', depth: 1 }).catch(() => undefined),
payload.findGlobal({ slug: 'application-phase', depth: 0 }).catch(() => undefined),
findRouteDoc(payload, pathname, draft),
findHomePage(payload, draft).catch(() => undefined),
findSupportPages(payload, draft).catch(() => []),
findList(payload, 'preistraeger', draft).catch(() => []),
findList(payload, 'events', draft).catch(() => []),
findList(payload, 'posts', draft).catch(() => []),
findList(payload, 'partners', draft).catch(() => []),
])
if (!route) notFound()
@@ -116,10 +125,11 @@ export default async function Page({ params }: Args) {
collection: route.collection,
doc: route.doc as unknown as CmsRouteDoc,
lists: {
pages: homePage ? [homePage as unknown as CmsRouteDoc] : [],
pages: supportPages as unknown as CmsRouteDoc[],
preistraeger: preistraeger as unknown as CmsRouteDoc[],
events: events as unknown as CmsRouteDoc[],
posts: posts as unknown as CmsRouteDoc[],
partners: partners as unknown as CmsRouteDoc[],
},
}}
/>