Files
Zbrane-Reiner-Web/src/app/(frontend)/[slug]/page.tsx
T
HonzaandClaude Opus 5 c8e435139e
CI / test (push) Failing after 1m42s
CI / build-and-push (push) Has been skipped
Scaffold webu na Payload CMS 3 + Next.js nad SQLite
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>
2026-07-30 13:13:23 +02:00

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
}