import { Plus } from "lucide-react"; import Link from "next/link"; import { redirect } from "next/navigation"; import { MotionFade } from "@/components/motion-fade"; import { PortfolioSubnav } from "@/components/root/portfolio-subnav"; import { RootDashboardShell } from "@/components/root/root-dashboard-shell"; import { AppCard } from "@/components/ui/app-card"; import { Button } from "@/components/ui/button"; import { CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { clearAdminSessionCookie, isAdminAuthenticated } from "@/lib/admin-auth"; import { getAdminPortfolioCategories, getAdminPortfolioProjects, getLocalizedValue, } from "@/lib/portfolio"; export const dynamic = "force-dynamic"; const copy = { title: "Portfolio Projekte", subtitle: "Alle Projekte mit Status, Kategorie und Reihenfolge.", overview: "Uebersicht", maintenance: "Wartungsmodus", uiKit: "UI Kit", media: "Media", portfolio: "Portfolio", logout: "Ausloggen", backToSite: "Zur Website", newProject: "Neues Projekt", category: "Kategorie", all: "Alle", status: "Status", draft: "Entwurf", published: "Veroeffentlicht", filter: "Filtern", sort: "Sortierung", previewSet: "Preview Link gesetzt", previewMissing: "Kein Preview Link", editProject: "Projekt bearbeiten", empty: "Keine Projekte fuer die aktuellen Filter gefunden.", }; type RootPortfolioProjectsPageProps = { searchParams?: { category?: string; status?: "all" | "draft" | "published"; success?: string; error?: string; }; }; export default async function RootPortfolioProjectsPage({ searchParams, }: RootPortfolioProjectsPageProps) { if (!isAdminAuthenticated()) { redirect("/root"); } async function logoutAction() { "use server"; clearAdminSessionCookie(); redirect("/root"); } const selectedStatus = searchParams?.status === "draft" || searchParams?.status === "published" ? searchParams.status : "all"; const [categories, projects] = await Promise.all([ getAdminPortfolioCategories(), getAdminPortfolioProjects({ categoryId: searchParams?.category || undefined, status: selectedStatus, }), ]); return ( } headerActions={ } >
{searchParams?.success ? (

{searchParams.success}

) : null} {searchParams?.error ? (

{searchParams.error}

) : null}
{projects.map((project, index) => (
{getLocalizedValue(project.title, "de")}

{project.category.name.de}

{project.isPublished ? copy.published : copy.draft} {project.projectYear} {copy.sort} {project.sortOrder}

{project.slug}

{project.previewUrl ? copy.previewSet : copy.previewMissing}

))} {projects.length === 0 ? ( {copy.empty} ) : null}
); }