"use server"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { isRedirectError } from "next/dist/client/components/redirect"; import { clearAdminSessionCookie, isAdminAuthenticated } from "@/lib/admin-auth"; import { updateMarqueeSettings } from "@/lib/app-config"; import { routing } from "@/i18n/routing"; import { getLocalizedPath } from "@/lib/locale"; function ensureAdmin() { if (!isAdminAuthenticated()) { clearAdminSessionCookie(); redirect("/root"); } } function withMessage(pathname: string, type: "success" | "error", message: string) { const params = new URLSearchParams(); params.set(type, message); return `${pathname}?${params.toString()}`; } async function revalidateMarqueePages() { revalidatePath("/root"); revalidatePath("/root/marquee"); for (const locale of routing.locales) { revalidatePath(getLocalizedPath(locale), "layout"); revalidatePath(getLocalizedPath(locale)); } } export async function saveMarqueeSettingsAction(formData: FormData) { ensureAdmin(); try { const settings = { locales: { ar: { row1: String(formData.get("row1-ar") ?? "").trim(), row2: String(formData.get("row2-ar") ?? "").trim(), row3: String(formData.get("row3-ar") ?? "").trim(), row4: String(formData.get("row4-ar") ?? "").trim(), }, en: { row1: String(formData.get("row1-en") ?? "").trim(), row2: String(formData.get("row2-en") ?? "").trim(), row3: String(formData.get("row3-en") ?? "").trim(), row4: String(formData.get("row4-en") ?? "").trim(), }, de: { row1: String(formData.get("row1-de") ?? "").trim(), row2: String(formData.get("row2-de") ?? "").trim(), row3: String(formData.get("row3-de") ?? "").trim(), row4: String(formData.get("row4-de") ?? "").trim(), }, }, }; for (const locale of routing.locales) { if (!settings.locales[locale].row1) { throw new Error(`Row 1 fuer ${locale} ist erforderlich.`); } if (!settings.locales[locale].row2) { throw new Error(`Row 2 fuer ${locale} ist erforderlich.`); } if (!settings.locales[locale].row3) { throw new Error(`Row 3 fuer ${locale} ist erforderlich.`); } if (!settings.locales[locale].row4) { throw new Error(`Row 4 fuer ${locale} ist erforderlich.`); } } await updateMarqueeSettings(settings); await revalidateMarqueePages(); redirect(withMessage("/root/marquee", "success", "Marquee gespeichert.")); } catch (error) { if (isRedirectError(error)) { throw error; } const message = error instanceof Error ? error.message : "Marquee konnte nicht gespeichert werden."; redirect(withMessage("/root/marquee", "error", message)); } }