Add admin site settings sections and locale defaults
This commit is contained in:
@@ -13,6 +13,7 @@ export const SITE_NAME_TOKEN = "{siteName}";
|
||||
|
||||
export const DEFAULT_SITE_NAME = "moh-sass";
|
||||
export const DEFAULT_SITE_DESCRIPTION = "Multilingual Next.js base project";
|
||||
export const DEFAULT_SITE_PRIMARY_COLOR = "#dc5a35";
|
||||
|
||||
type SiteLocaleSettings = {
|
||||
siteName: string;
|
||||
@@ -21,7 +22,13 @@ type SiteLocaleSettings = {
|
||||
subhead: string;
|
||||
};
|
||||
|
||||
type SiteBrandSettings = {
|
||||
primaryColor: string;
|
||||
};
|
||||
|
||||
export type SiteSettings = {
|
||||
defaultLocale: AppLocale;
|
||||
brand: SiteBrandSettings;
|
||||
locales: Record<AppLocale, SiteLocaleSettings>;
|
||||
};
|
||||
|
||||
@@ -64,6 +71,20 @@ function normalizeSiteLocaleSettings(
|
||||
};
|
||||
}
|
||||
|
||||
export function normalizeSiteDefaultLocale(input: unknown): AppLocale {
|
||||
return input === "ar" || input === "en" || input === "de" ? input : "de";
|
||||
}
|
||||
|
||||
export function normalizeSitePrimaryColor(input: unknown): string {
|
||||
if (typeof input !== "string") {
|
||||
return DEFAULT_SITE_PRIMARY_COLOR;
|
||||
}
|
||||
|
||||
const value = input.trim();
|
||||
|
||||
return /^#([0-9a-fA-F]{6})$/.test(value) ? value.toLowerCase() : DEFAULT_SITE_PRIMARY_COLOR;
|
||||
}
|
||||
|
||||
export function getDefaultSiteSettingsMediaBindings(): SiteSettingsMediaBindings {
|
||||
return {
|
||||
siteLogoLight: null,
|
||||
@@ -75,6 +96,10 @@ export function getDefaultSiteSettingsMediaBindings(): SiteSettingsMediaBindings
|
||||
|
||||
export function buildDefaultSiteSettings(fallbackName = DEFAULT_SITE_NAME): SiteSettings {
|
||||
return {
|
||||
defaultLocale: "de",
|
||||
brand: {
|
||||
primaryColor: DEFAULT_SITE_PRIMARY_COLOR,
|
||||
},
|
||||
locales: {
|
||||
ar: {
|
||||
siteName: fallbackName,
|
||||
@@ -115,6 +140,14 @@ export function parseSiteSettingsValue(
|
||||
: {};
|
||||
|
||||
const siteSettings: SiteSettings = {
|
||||
defaultLocale: normalizeSiteDefaultLocale(parsed.defaultLocale),
|
||||
brand: {
|
||||
primaryColor: normalizeSitePrimaryColor(
|
||||
parsed.brand && typeof parsed.brand === "object"
|
||||
? (parsed.brand as Record<string, unknown>).primaryColor
|
||||
: undefined,
|
||||
),
|
||||
},
|
||||
locales: {
|
||||
ar: normalizeSiteLocaleSettings(
|
||||
locales.ar && typeof locales.ar === "object" ? (locales.ar as Record<string, unknown>) : {},
|
||||
|
||||
Reference in New Issue
Block a user