Fix marquee behavior and unify marquee settings

This commit is contained in:
MOH
2026-03-10 05:23:27 +01:00
parent 701c1b2a6c
commit e219295327
6 changed files with 134 additions and 91 deletions
+6 -2
View File
@@ -39,6 +39,7 @@ export {
buildDefaultMarqueeSettings,
parseMarqueeSettingsValue,
splitMarqueeRowItems,
syncMarqueeSettingsToGermanSource,
type MarqueeLocaleSettings,
type MarqueeSettings,
} from "./marquee-settings";
@@ -80,6 +81,7 @@ import {
MARQUEE_SETTINGS_KEY,
buildDefaultMarqueeSettings,
parseMarqueeSettingsValue,
syncMarqueeSettingsToGermanSource,
type MarqueeSettings,
} from "./marquee-settings";
@@ -231,14 +233,16 @@ export async function getMarqueeSettings(): Promise<MarqueeSettings> {
}
export async function updateMarqueeSettings(settings: MarqueeSettings): Promise<void> {
const normalizedSettings = syncMarqueeSettingsToGermanSource(settings);
await prisma.appConfig.upsert({
where: { key: MARQUEE_SETTINGS_KEY },
update: {
value: JSON.stringify(settings),
value: JSON.stringify(normalizedSettings),
},
create: {
key: MARQUEE_SETTINGS_KEY,
value: JSON.stringify(settings),
value: JSON.stringify(normalizedSettings),
},
});
}
+16 -4
View File
@@ -97,26 +97,38 @@ function normalizeLocaleSettings(value: unknown, defaults: MarqueeLocaleSettings
};
}
export function syncMarqueeSettingsToGermanSource(settings: MarqueeSettings): MarqueeSettings {
const source = settings.locales.de;
return {
locales: {
de: { ...source },
en: { ...source },
ar: { ...source },
},
};
}
export function parseMarqueeSettingsValue(rawValue?: string | null): MarqueeSettings {
const defaults = buildDefaultMarqueeSettings();
if (!rawValue) {
return defaults;
return syncMarqueeSettingsToGermanSource(defaults);
}
try {
const parsed = JSON.parse(rawValue) as { locales?: Record<string, unknown> };
const locales = parsed && typeof parsed === "object" ? parsed.locales : undefined;
return {
return syncMarqueeSettingsToGermanSource({
locales: {
ar: normalizeLocaleSettings(locales?.ar, defaults.locales.ar),
en: normalizeLocaleSettings(locales?.en, defaults.locales.en),
de: normalizeLocaleSettings(locales?.de, defaults.locales.de),
},
};
});
} catch {
return defaults;
return syncMarqueeSettingsToGermanSource(defaults);
}
}