68 lines
2.3 KiB
TypeScript
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");
|
|
}
|