44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
"use server";
|
|
|
|
import { revalidatePath } from "next/cache";
|
|
import { z } from "zod";
|
|
import {
|
|
ADMIN_NAV_CONFIG_KEY,
|
|
type AdminNavConfig,
|
|
serializeAdminNavConfig,
|
|
} from "@/lib/admin-nav-config";
|
|
import { actionOk, adminAction } from "@/lib/foundation/action";
|
|
import { PERMS } from "@/lib/permissions";
|
|
import { siteSettings } from "@/lib/services/site-settings";
|
|
|
|
const schema = z.object({
|
|
groupOrder: z.array(z.string()),
|
|
hiddenGroups: z.array(z.string()),
|
|
hiddenItems: z.array(z.string()),
|
|
itemOrder: z.record(z.string(), z.array(z.string())),
|
|
});
|
|
|
|
export const saveAdminNavConfig = adminAction(
|
|
{
|
|
permission: PERMS.SETTINGS_EDIT,
|
|
schema,
|
|
rateLimitKey: "admin-nav-config-save",
|
|
rateLimitMax: 30,
|
|
},
|
|
async (ctx) => {
|
|
const config: AdminNavConfig = {
|
|
groupOrder: ctx.data.groupOrder,
|
|
hiddenGroups: ctx.data.hiddenGroups,
|
|
hiddenItems: ctx.data.hiddenItems,
|
|
itemOrder: ctx.data.itemOrder,
|
|
};
|
|
await siteSettings.update(
|
|
ADMIN_NAV_CONFIG_KEY,
|
|
serializeAdminNavConfig(config),
|
|
);
|
|
revalidatePath("/admin", "layout");
|
|
revalidatePath("/admin/menu");
|
|
return actionOk({ saved: true });
|
|
},
|
|
);
|