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 { StarRating } from "@/components/star-rating"; import { AdminActionButton, AdminBadge, AdminEmptyState, AdminPageHeader, AdminRowActions, AdminSearchForm, } from "@/components/admin-list"; 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 (
{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} {review.rating} / 5 {review.comment ?? "—"} {formatDate(review.createdAt)} {review.isApproved ? ( {t.adminReviewsPage.statusPublished} ) : ( {t.adminReviewsPage.statusPending} )} {!review.isApproved ? (
{t.adminReviewsPage.approve}
) : null} {t.adminReviewsPage.delete}
{reviews.length === 0 ? ( ) : null}
); }