import Link from "next/link"; import { prisma } from "@/lib/prisma"; import { BackLink } from "@/components/back-link"; import { ConfirmForm } from "@/components/confirm-form"; import { formatDate } from "@/lib/format"; import { insensitiveContains } from "@/lib/prisma-search"; import { approveReviewAction, deleteReviewAction } from "../actions"; import { getLocale } from "@/i18n/locale"; import { getDictionary } from "@/i18n/get-dictionary"; export default async function AdminBewertungenPage(props: PageProps<"/admin/bewertungen">) { const t = getDictionary(await getLocale()); const { q } = await props.searchParams; const query = typeof q === "string" ? q.trim() : ""; const reviews = await prisma.review.findMany({ where: query ? { OR: [ { product: { name: insensitiveContains(query) } }, { customer: { firstName: insensitiveContains(query) } }, { customer: { lastName: insensitiveContains(query) } }, ], } : undefined, include: { product: { select: { name: true, slug: true } }, customer: { select: { firstName: true, lastName: true } }, }, orderBy: [{ isApproved: "asc" }, { createdAt: "desc" }], take: 100, }); return (

{t.adminReviewsPage.title}

{query ? ( {t.adminReviewsPage.resetFilter} ) : null}
{reviews.map((review) => ( ))}
{t.adminReviewsPage.colProduct} {t.adminReviewsPage.colCustomer} {t.adminReviewsPage.colRating} {t.adminReviewsPage.colComment} {t.adminReviewsPage.colDate} {t.adminReviewsPage.colStatus}
{review.product.name} {review.customer.firstName} {review.customer.lastName} {"★".repeat(review.rating)} {"☆".repeat(5 - review.rating)} {review.comment ?? "—"} {formatDate(review.createdAt)} {review.isApproved ? ( {t.adminReviewsPage.statusPublished} ) : ( {t.adminReviewsPage.statusPending} )}
{!review.isApproved ? (
) : null}
{reviews.length === 0 ? (

{query ? t.adminReviewsPage.noResultsFiltered : t.adminReviewsPage.noReviewsYet}

) : null}
); }