import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { deletePermission, upsertPermission, } from "@/actions/admin-housekeeping"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; export default async function AdminHousekeeping({ searchParams, }: { searchParams: Promise<{ q?: string; mode?: "manage" | "import" }>; }) { const t = await getTranslations("pages.admin.housekeeping"); const sp = await searchParams; const q = (sp.q ?? "").trim(); const mode = sp.mode === "import" ? "import" : "manage"; let permissions: Awaited< ReturnType > = []; try { permissions = await prisma.websiteHousekeepingPermissions.findMany({ orderBy: [{ permission: "asc" }], }); } catch { permissions = []; } const filtered = q ? permissions.filter((p) => p.permission.toLowerCase().includes(q.toLowerCase()), ) : permissions; const ranks = permissions.map((p) => p.minRank); const maxRank = ranks.length ? Math.max(...ranks) : 0; const totalMin = ranks.reduce((sum, r) => sum + r, 0); const selectedIds = new Set(); if (mode === "import") { const importRaw = String(sp.q ?? ""); if (importRaw) { const importIds = importRaw .split(",") .map((i) => Number(i.trim())) .filter((i) => !Number.isNaN(i)); importIds.forEach((id) => { selectedIds.add(id); }); } } return (
🔑

{t("title")}

{t("subtitle")}

{t("permissionsCount", { count: permissions.length })} {t("highestMinRank", { rank: maxRank })} {t("totalMinRank", { total: totalMin })}
{t("manage")} {t("importSelection")}
{mode === "manage" ? (

{t("addPermission")}

) : (

{t("importPermissions")}

{t("importHint")}

)}

{t("permissions")}{" "} {filtered.length}

{filtered.length === 0 ? (
{t("noPermissions")}
) : (
{filtered.map((p, i) => ( ))}
# {t("colPermission")} {t("colDescription")} {t("colMinRank")}
{i + 1} {p.permission} {p.description ?? "—"}
)}
); }