feat: setup globals (Footer), sqlite migration, seed update and access rules

This commit is contained in:
MichalC
2026-08-31 22:37:06 +02:00
parent 5f2eaa0b37
commit 5a9128e2f5
31 changed files with 2281 additions and 362 deletions
@@ -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>
)
}