Files
neta/app/portal/settings/language/actions.ts
T

68 lines
2.3 KiB
TypeScript

"use server";
import { revalidatePath } from "next/cache";
import { eq } from "drizzle-orm";
import { getSqliteConnection } from "@/server/db/client";
import {
clients,
instanceI18nSettings,
instanceLocales,
} from "@/server/db/schema";
import { updateLanguagePreference } from "@/server/settings/preferences";
import { requirePortalBackend } from "@/server/web/portal";
export async function savePortalLanguagePreferenceAction(language: string) {
try {
const { actor } = await requirePortalBackend();
const preferences = updateLanguagePreference(actor, { language });
revalidatePortalSettings();
return { success: true, language: preferences.language };
} catch (error) {
console.error("Portal language preference update failed", error);
return { errorKey: "settings.languagePreference.errors.saveFailed" };
}
}
export async function resetPortalLanguagePreferenceAction() {
try {
const { actor, context } = await requirePortalBackend();
const language = readClientAssignedLanguage(context.profile.clientId);
const preferences = updateLanguagePreference(actor, { language });
revalidatePortalSettings();
return { success: true, language: preferences.language };
} catch (error) {
console.error("Portal language preference reset failed", error);
return { errorKey: "settings.portal.language.errors.resetFailed" };
}
}
function readClientAssignedLanguage(clientId: string | null) {
const { db } = getSqliteConnection();
const defaultLocale = db
.select({ defaultLocale: instanceI18nSettings.defaultLocale })
.from(instanceI18nSettings)
.where(eq(instanceI18nSettings.key, "default"))
.get()?.defaultLocale ?? "tr";
const portalLocale = clientId
? db
.select({ portalLocale: clients.portalLocale })
.from(clients)
.where(eq(clients.id, clientId))
.get()?.portalLocale
: null;
const candidate = portalLocale ?? defaultLocale;
const active = db
.select({ code: instanceLocales.code, status: instanceLocales.status })
.from(instanceLocales)
.where(eq(instanceLocales.code, candidate))
.get();
return active?.status === "active" ? candidate : defaultLocale;
}
function revalidatePortalSettings() {
revalidatePath("/", "layout");
revalidatePath("/portal", "layout");
revalidatePath("/portal/settings/language");
}