Kostra prezentace s vlastní administrací pro Martina Reinera. Obsah: - kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí), Media se zmenšeninami, Pages, Users bez veřejné registrace - veřejná část: výpis nabídky, detail položky, statické stránky - /api/health pro Docker HEALTHCHECK Provoz: - Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml (nasazení z Gitea registry) - CI v Gitea Actions: lint -> testy -> build -> push image - úvodní migrace databáze Stránky jsou force-dynamic, aby se úprava položky projevila hned; schéma se za běhu nedomýšlí (push: false), migrace se commitují. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { notFound } from 'next/navigation'
|
|
import { getPayload } from 'payload'
|
|
import React from 'react'
|
|
import { RichText } from '@payloadcms/richtext-lexical/react'
|
|
|
|
import config from '@/payload.config'
|
|
import type { Page } from '@/payload-types'
|
|
import '../styles.css'
|
|
|
|
export const dynamic = 'force-dynamic'
|
|
|
|
type Props = { params: Promise<{ slug: string }> }
|
|
|
|
export async function generateMetadata({ params }: Props) {
|
|
const stranka = await najdiStranku((await params).slug)
|
|
return { title: stranka ? `${stranka.nazev} — Reiner zbraně` : 'Stránka nenalezena' }
|
|
}
|
|
|
|
/** Statické stránky z kolekce Pages — /kontakt, /o-nas a podobně. */
|
|
export default async function StatickaStranka({ params }: Props) {
|
|
const stranka = await najdiStranku((await params).slug)
|
|
if (!stranka) notFound()
|
|
|
|
return (
|
|
<article className="stranka">
|
|
<h1>{stranka.nazev}</h1>
|
|
{stranka.obsah && <RichText data={stranka.obsah} />}
|
|
</article>
|
|
)
|
|
}
|
|
|
|
async function najdiStranku(slug: string): Promise<Page | null> {
|
|
const payload = await getPayload({ config: await config })
|
|
|
|
const { docs } = await payload.find({
|
|
collection: 'pages',
|
|
where: { slug: { equals: slug } },
|
|
limit: 1,
|
|
})
|
|
|
|
return docs[0] ?? null
|
|
}
|