syncova-policies/app/page.tsx
Weapie 265ca8ac38
All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
Improve accessibility and access controls; verify production and database recovery
2026-09-14 11:44:41 +02:00

39 lines
1.2 KiB
TypeScript

import { PolicyList } from "@/components/policy-list"
import { PublicHeader } from "@/components/public-header"
import { SiteFooter } from "@/components/site-footer"
import { readPolicyDefaults, toApiPolicy } from "@/lib/policy-defaults.server"
import { sortByTitle } from "@/lib/policy-sort"
// Prisma client instance
import { prisma } from "@/lib/prisma"
// Liste und Fußzeile kommen aus der Datenbank.
export const dynamic = "force-dynamic"
/**
* Öffentliche Übersicht.
*
* Die Liste wird serverseitig geladen und als Startwert an die Suchkomponente
* gegeben: So stehen alle Erklärungen samt Adresse bereits im ausgelieferten
* HTML und sind auch ohne JavaScript erreichbar.
*/
export default async function PublicDashboard() {
const [policies, defaults] = await Promise.all([
prisma.privacyPolicy.findMany({
where: { isPublic: true },
}),
readPolicyDefaults(prisma),
])
return (
<div className="flex min-h-screen flex-col bg-background">
<PublicHeader subtitle="Datenschutz" />
<PolicyList
initial={sortByTitle(policies.map((policy) => toApiPolicy(policy, defaults)))}
/>
<SiteFooter />
</div>
)
}