feat: setup globals (Footer), sqlite migration, seed update and access rules
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import React from 'react'
|
||||
import { notFound } from 'next/navigation'
|
||||
import { getPayload } from 'payload'
|
||||
import configPromise from '@payload-config'
|
||||
import { resolveRoute } from '@intecion/ipal-kit'
|
||||
import { getLocalizedSlugs } from '@intecion/ipal-kit'
|
||||
import { i18n } from '../../../../i18n.config'
|
||||
import { SetLanguageSlugs } from '../../../../components/LanguageSlugsProvider'
|
||||
|
||||
export default async function Page(props: {
|
||||
params: Promise<{ locale: string; slug?: string[] }>
|
||||
}) {
|
||||
const params = await props.params;
|
||||
const { locale, slug } = params;
|
||||
const payload = await getPayload({ config: configPromise })
|
||||
|
||||
// Rozwiązanie routingu z użyciem mechanizmów ipal-kit
|
||||
const route = await resolveRoute({ payload, locale, segments: slug || [] })
|
||||
|
||||
// Jeśli strona nie istnieje, 404
|
||||
if (!route) {
|
||||
notFound()
|
||||
}
|
||||
|
||||
// Pobranie pełnego rekordu strony we wszystkich językach (locale: 'all'),
|
||||
// by przekazać prawidłowe zlokalizowane slugi do LanguageSwitcher
|
||||
const doc = await payload.findByID({
|
||||
collection: ('collection' in route ? route.collection : 'pages') as 'pages',
|
||||
id: route.doc.id as string,
|
||||
locale: 'all',
|
||||
})
|
||||
|
||||
// getLocalizedSlugs oczekuje pola slug jako obiektu ze slugami we wszystkich językach
|
||||
// Rzutowanie na any jest zabronione przez wytyczne, rzutujemy na Record<string, unknown> (zgodnie z .d.ts)
|
||||
const slugs = getLocalizedSlugs({
|
||||
config: i18n,
|
||||
slugField: doc.slug as unknown as Record<string, unknown>,
|
||||
})
|
||||
|
||||
// Dla obecnego języka potrzebujemy konkretnych danych do renderowania (fallback default locale behavior)
|
||||
const docForRender = await payload.findByID({
|
||||
collection: ('collection' in route ? route.collection : 'pages') as 'pages',
|
||||
id: route.doc.id as string,
|
||||
locale: locale as any, // Payload locale typ nie zawsze przyjmuje string
|
||||
})
|
||||
|
||||
const layout = docForRender.layout || []
|
||||
|
||||
return (
|
||||
<div className="pt-8 pb-24">
|
||||
{/* Rejestracja zlokalizowanych slugów w globalnym kontekście dla LanguageSwitcher */}
|
||||
<SetLanguageSlugs slugs={slugs} />
|
||||
|
||||
{layout.length === 0 && (
|
||||
<div className="container-premium text-center text-muted-foreground mt-20">
|
||||
Strona jest pusta. Skonfiguruj układ (layout) w panelu CMS.
|
||||
</div>
|
||||
)}
|
||||
|
||||
{layout.map((block: any, index: number) => {
|
||||
if (block.blockType === 'TextSection') {
|
||||
return (
|
||||
<div key={index} className="container-premium py-12">
|
||||
<p className="text-lg">{block.text}</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
return <div key={index}>Nieznany blok: {block.blockType}</div>
|
||||
})}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user