fix(cms): filter unpublished relationships
This commit is contained in:
@@ -7,7 +7,8 @@ import type { SpaApplicationPhaseData } from '@/spa/applicationPhase'
|
||||
import type { SpaNewsletterFormData } from '@/spa/newsletterForm'
|
||||
import type { SpaSiteSettingsData } from '@/spa/siteSettings'
|
||||
|
||||
export type CmsRouteCollection = 'pages' | 'posts' | 'events' | 'preistraeger' | 'partners' | 'jury-mitglieder'
|
||||
export type CmsRouteCollection =
|
||||
'pages' | 'posts' | 'events' | 'preistraeger' | 'partners' | 'jury-mitglieder'
|
||||
|
||||
export type CmsRouteDoc = {
|
||||
id: number | string
|
||||
@@ -34,7 +35,13 @@ export type CmsRouteData = {
|
||||
|
||||
const CmsRouteContext = createContext<CmsRouteData | undefined>(undefined)
|
||||
|
||||
export function CmsRouteProvider({ children, value }: { children: React.ReactNode; value?: CmsRouteData }) {
|
||||
export function CmsRouteProvider({
|
||||
children,
|
||||
value,
|
||||
}: {
|
||||
children: React.ReactNode
|
||||
value?: CmsRouteData
|
||||
}) {
|
||||
return <CmsRouteContext.Provider value={value}>{children}</CmsRouteContext.Provider>
|
||||
}
|
||||
|
||||
@@ -48,10 +55,17 @@ export function useCmsCollection(collection: CmsRouteCollection) {
|
||||
|
||||
export function resolveCmsRelationship(entry: unknown, docs: CmsRouteDoc[]) {
|
||||
const entryID = entry && typeof entry === 'object' ? (entry as { id?: unknown }).id : entry
|
||||
const populatedDoc = docs.find((doc) => String(doc.id) === String(entryID))
|
||||
if (entryID === undefined || entryID === null) return undefined
|
||||
|
||||
if (populatedDoc) return populatedDoc
|
||||
return entry && typeof entry === 'object' ? (entry as CmsRouteDoc) : undefined
|
||||
return docs.find((doc) => String(doc.id) === String(entryID))
|
||||
}
|
||||
|
||||
export function resolveCmsRelationships(entries: unknown, docs: CmsRouteDoc[]) {
|
||||
if (!Array.isArray(entries)) return []
|
||||
|
||||
return entries
|
||||
.map((entry) => resolveCmsRelationship(entry, docs))
|
||||
.filter((doc): doc is CmsRouteDoc => Boolean(doc))
|
||||
}
|
||||
|
||||
export function useApplicationPhase() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { resolveCmsRelationship, type CmsRouteDoc } from '@/spa/cmsRoute'
|
||||
import { resolveCmsRelationships, type CmsRouteDoc } from '@/spa/cmsRoute'
|
||||
|
||||
const FALLBACK_YEAR = 2025
|
||||
const FALLBACK_LIMIT = 8
|
||||
@@ -14,11 +14,8 @@ export function resolveHomeWinners(
|
||||
fallbackWinners: FallbackWinner[],
|
||||
) {
|
||||
const selectedWinners = Array.isArray(featured) ? featured : []
|
||||
const selectedWinnerDocs = selectedWinners
|
||||
.map((selected) => resolveCmsRelationship(selected, cmsWinners))
|
||||
.filter((winner): winner is CmsRouteDoc => Boolean(winner))
|
||||
|
||||
if (selectedWinnerDocs.length) return selectedWinnerDocs
|
||||
if (selectedWinners.length) return resolveCmsRelationships(selectedWinners, cmsWinners)
|
||||
|
||||
return (cmsWinners.length ? cmsWinners : fallbackWinners)
|
||||
.filter((winner) => Number(winner.year) === FALLBACK_YEAR)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { resolveCmsRelationship, type CmsRouteDoc } from '@/spa/cmsRoute'
|
||||
import { resolveCmsRelationships, type CmsRouteDoc } from '@/spa/cmsRoute'
|
||||
|
||||
const hasText = (value: unknown) => typeof value === 'string' && value.trim().length > 0
|
||||
|
||||
@@ -6,12 +6,7 @@ export function selectJuryDocs(selection: unknown, docs: CmsRouteDoc[]) {
|
||||
if (selection === undefined) return docs
|
||||
if (!Array.isArray(selection)) return []
|
||||
|
||||
return selection
|
||||
.map((entry) => resolveCmsRelationship(entry, docs))
|
||||
.filter(
|
||||
(member): member is CmsRouteDoc =>
|
||||
Boolean(member && docs.some((doc) => String(doc.id) === String(member.id))),
|
||||
)
|
||||
return resolveCmsRelationships(selection, docs)
|
||||
}
|
||||
|
||||
export function sortJuryMembersQuoteFirst<T extends object>(members: T[]) {
|
||||
@@ -23,7 +18,8 @@ export function sortJuryMembersQuoteFirst<T extends object>(members: T[]) {
|
||||
const quoteOrder = Number(hasText(bSortable.quote)) - Number(hasText(aSortable.quote))
|
||||
if (quoteOrder !== 0) return quoteOrder
|
||||
|
||||
const sortOrder = Number(aSortable.sortOrder ?? a.index) - Number(bSortable.sortOrder ?? b.index)
|
||||
const sortOrder =
|
||||
Number(aSortable.sortOrder ?? a.index) - Number(bSortable.sortOrder ?? b.index)
|
||||
return sortOrder !== 0 ? sortOrder : a.index - b.index
|
||||
})
|
||||
.map(({ member }) => member)
|
||||
|
||||
Reference in New Issue
Block a user