import { Settings } from "lucide-react"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { AdminPageShell } from "@/components/admin/admin-page-shell"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; import { AdvancedSettingsPanel } from "./advanced-settings-panel"; import { FIELD_DEFAULTS, MANAGED_SETTING_KEYS } from "./cms-settings-config"; import { CmsSettingsForm } from "./cms-settings-form"; export const metadata = { title: "CMS Settings" }; export default async function AdminSettings() { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.SETTINGS_VIEW, session.user.rank)) { redirect("/admin"); } const canEdit = canAccess( permissions, PERMS.SETTINGS_EDIT, session.user.rank, ); const t = await getTranslations("pages.admin.settings"); let settings: Awaited> = []; try { settings = await prisma.websiteSetting.findMany({ orderBy: { key: "asc" }, }); } catch { settings = []; } const dbValues = new Map(settings.map((s) => [s.key, s.value])); const values: Record = Object.fromEntries( MANAGED_SETTING_KEYS.map((key) => [ key, dbValues.get(key) ?? FIELD_DEFAULTS[key] ?? "", ]), ); const documented = settings.filter((s) => !!s.comment).length; return (
{t("keysInDatabase", { count: settings.length })} {t("managedInForm", { count: MANAGED_SETTING_KEYS.length })} {t("documented", { count: documented })}
({ key: s.key, value: s.value, comment: s.comment, }))} canEdit={canEdit} />
); }