Improve admin UX: hub i18n, dynamic topbar, settings strings, staff logs DataTable.
Local Build and Deploy / deploy (push) Successful in 1m12s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-17 20:14:55 +02:00
1 parent 604e63da51
commit 1039044e48
11 files changed
+526 -305

No files matched your search

+6 -6
View File
@@ -11,6 +11,7 @@ import {
Shield,
UserPlus,
} from "lucide-react";
import { useTranslations } from "next-intl";
import { useState } from "react";
import { saveManagedSettings } from "@/actions/admin-settings";
import { Button } from "@/components/ui/button";
@@ -45,6 +46,7 @@ export function CmsSettingsForm({
}) {
const [values, setValues] = useState(initialValues);
const { isPending, run } = useServerAction();
const t = useTranslations("pages.admin.settings");
function handleChange(key: string, value: string) {
setValues((prev) => ({ ...prev, [key]: value }));
@@ -58,8 +60,8 @@ export function CmsSettingsForm({
normalized[key] = values[key] === "1" ? "1" : "0";
}
run(() => saveManagedSettings({ settings: normalized }), {
successMessage: "Settings saved.",
errorMessage: "Could not save settings.",
successMessage: t("saved"),
errorMessage: t("saveFailed"),
});
}
@@ -83,13 +85,11 @@ export function CmsSettingsForm({
) : (
<Save className="mr-2 h-4 w-4" />
)}
Save settings
{isPending ? t("form.saving") : t("saveSettings")}
</Button>
</div>
) : (
<p className="text-sm text-muted-foreground">
You can view settings but need edit permission to change them.
</p>
<p className="text-sm text-muted-foreground">{t("viewOnly")}</p>
)}
</form>
);
+7 -3
View File
@@ -1,3 +1,4 @@
import { getTranslations } from "next-intl/server";
import { redirect } from "next/navigation";
import { canAccess, getAdminContext, PERMS } from "@/lib/permissions";
import { prisma } from "@/lib/prisma";
@@ -18,6 +19,7 @@ export default async function AdminSettings() {
PERMS.SETTINGS_EDIT,
session.user.rank,
);
const t = await getTranslations("pages.admin.settings");
let settings: Awaited<ReturnType<typeof prisma.websiteSetting.findMany>> = [];
try {
@@ -42,12 +44,14 @@ export default async function AdminSettings() {
<div className="space-y-8">
<div className="admin-stat-row">
<span className="admin-stat-chip">
{settings.length} keys in database
{t("keysInDatabase", { count: settings.length })}
</span>
<span className="admin-stat-chip">
{MANAGED_SETTING_KEYS.length} managed in form
{t("managedInForm", { count: MANAGED_SETTING_KEYS.length })}
</span>
<span className="admin-stat-chip">
{t("documented", { count: documented })}
</span>
<span className="admin-stat-chip">{documented} documented</span>
</div>
<CmsSettingsForm values={values} canEdit={canEdit} />