import { Camera } from "lucide-react"; import Link from "next/link"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { deletePhoto } from "@/actions/admin-photos"; import { AdminPageShell } from "@/components/admin/admin-page-shell"; import { StatusCard } from "@/components/admin/dashboard"; import { Button } from "@/components/ui/button"; import { calcPagination, parseListParams } from "@/lib/admin-helpers"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; export default async function AdminPhotos({ searchParams, }: { searchParams: Promise>; }) { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.PAGES_VIEW, session.user.rank)) { redirect("/admin"); } const t = await getTranslations("pages.admin.photos"); const parsed = parseListParams(new URLSearchParams(await searchParams)); const total = await prisma.cameraWeb.count().catch(() => 0); const pagination = calcPagination(total, parsed.page, parsed.perPage || 24); let photos: Awaited> = []; try { photos = await prisma.cameraWeb.findMany({ orderBy: { timestamp: "desc" }, skip: pagination.offset, take: pagination.perPage, }); } catch { photos = []; } const userIds = [...new Set(photos.map((p) => p.userId))]; const users = userIds.length > 0 ? await prisma.user .findMany({ where: { id: { in: userIds } }, select: { id: true, username: true }, }) .catch(() => []) : []; const usernameById = new Map(users.map((u) => [u.id, u.username])); const uniqueRooms = new Set(photos.map((p) => p.roomId)).size; const uniqueUsers = new Set(photos.map((p) => p.userId)).size; const canEdit = canAccess(permissions, PERMS.PAGES_EDIT, session.user.rank); return (

{t("recentPhotos")}

{photos.length === 0 ? (
{t("noPhotos")}
) : (
{photos.map((p) => { const username = usernameById.get(p.userId) ?? `#${p.userId}`; return (
{/* eslint-disable-next-line @next/next/no-img-element */} {t("photoAlt",
#{String(p.id)} {t("colRoom")} {p.roomId}

{t("byUser", { username })} {" "} ยท{" "} {new Date(p.timestamp * 1000) .toISOString() .slice(0, 16) .replace("T", " ")}

{canEdit ? (
) : null}
); })}
)} {pagination.lastPage > 1 ? (

{t("pageOf", { page: pagination.page, last: pagination.lastPage, total, })}

) : null}
); }