feat(admin): separate language package lifecycle
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import type {
|
||||
PrivacyRetentionLimitPermissions,
|
||||
PrivacyRetentionPolicy,
|
||||
SystemSettingsDeltaSections,
|
||||
SystemSettingsItem
|
||||
} from "../../api/admin";
|
||||
|
||||
const defaultAllowLowerLevelLimits: PrivacyRetentionLimitPermissions = {
|
||||
store_raw_campaign_json: true,
|
||||
raw_campaign_json_retention_days: true,
|
||||
generated_eml_retention_days: true,
|
||||
stored_report_detail_retention_days: true,
|
||||
mock_mailbox_retention_days: true,
|
||||
audit_detail_retention_days: true,
|
||||
audit_detail_level: true
|
||||
};
|
||||
|
||||
const defaultPrivacyPolicy: PrivacyRetentionPolicy = {
|
||||
store_raw_campaign_json: true,
|
||||
raw_campaign_json_retention_days: null,
|
||||
generated_eml_retention_days: null,
|
||||
stored_report_detail_retention_days: null,
|
||||
mock_mailbox_retention_days: null,
|
||||
audit_detail_retention_days: null,
|
||||
audit_detail_level: "full",
|
||||
allow_lower_level_limits: defaultAllowLowerLevelLimits
|
||||
};
|
||||
|
||||
export const SYSTEM_SETTINGS_FALLBACK: SystemSettingsItem = {
|
||||
default_locale: "de",
|
||||
allow_tenant_custom_groups: true,
|
||||
allow_tenant_custom_roles: true,
|
||||
allow_tenant_api_keys: true,
|
||||
privacy_retention_policy: defaultPrivacyPolicy,
|
||||
maintenance_mode: { enabled: false, message: "" },
|
||||
available_languages: [
|
||||
{ code: "de", label: "German", native_label: "Deutsch" },
|
||||
{ code: "en", label: "English", native_label: "English" }
|
||||
],
|
||||
enabled_language_codes: ["de", "en"],
|
||||
settings: {},
|
||||
navigation: null
|
||||
};
|
||||
|
||||
export function applySystemSettingsSections(
|
||||
item: SystemSettingsItem,
|
||||
sections: SystemSettingsDeltaSections
|
||||
): SystemSettingsItem {
|
||||
return {
|
||||
...item,
|
||||
...(sections.defaults ?? {}),
|
||||
...(sections.tenant_capabilities ?? {}),
|
||||
...(sections.languages ?? {}),
|
||||
...(sections.privacy_retention_policy
|
||||
? { privacy_retention_policy: sections.privacy_retention_policy }
|
||||
: {}),
|
||||
...(sections.maintenance_mode ? { maintenance_mode: sections.maintenance_mode } : {}),
|
||||
...(sections.navigation !== undefined ? { navigation: sections.navigation } : {}),
|
||||
...(sections.settings ? { settings: sections.settings } : {})
|
||||
};
|
||||
}
|
||||
|
||||
export function normalizeLanguageCode(value: string): string {
|
||||
return value
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/_/g, "-")
|
||||
.split(/[^a-z0-9]+/)
|
||||
.filter(Boolean)
|
||||
.join("-");
|
||||
}
|
||||
|
||||
export function languageOptionLabel(language: {
|
||||
code: string;
|
||||
label: string;
|
||||
native_label?: string | null;
|
||||
}): string {
|
||||
return `${language.code.toUpperCase()} - ${language.native_label || language.label}`;
|
||||
}
|
||||
Reference in New Issue
Block a user