"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 }); }, );