feat: manage custom appearance policy

This commit is contained in:
2026-08-20 10:50:55 +02:00
parent 50c952565b
commit 935cee8ccd
7 changed files with 49 additions and 7 deletions
+3 -1
View File
@@ -36,6 +36,7 @@ export type SystemSettingsItem = {
navigation: NavigationPreferences | null;
appearance_palette: UserUiPalette;
appearance_palette_locked: boolean;
appearance_custom_overrides_allowed: boolean;
};
export type SystemSettingsDeltaSections = Partial<{
@@ -46,7 +47,7 @@ export type SystemSettingsDeltaSections = Partial<{
maintenance_mode: SystemSettingsItem["maintenance_mode"];
settings: SystemSettingsItem["settings"];
navigation: SystemSettingsItem["navigation"];
appearance: Pick<SystemSettingsItem, "appearance_palette" | "appearance_palette_locked">;
appearance: Pick<SystemSettingsItem, "appearance_palette" | "appearance_palette_locked" | "appearance_custom_overrides_allowed">;
}>;
export type SystemSettingsUpdatePayload = {
@@ -61,6 +62,7 @@ export type SystemSettingsUpdatePayload = {
navigation?: NavigationPreferences | null;
appearance_palette?: UserUiPalette;
appearance_palette_locked?: boolean;
appearance_custom_overrides_allowed?: boolean;
change_request_id?: string | null;
};
@@ -66,7 +66,8 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
maintenance_mode: draft.maintenance_mode,
navigation: draft.navigation,
appearance_palette: draft.appearance_palette,
appearance_palette_locked: draft.appearance_palette_locked
appearance_palette_locked: draft.appearance_palette_locked,
appearance_custom_overrides_allowed: draft.appearance_custom_overrides_allowed
});
setDraft(saved);
setSavedDraft(saved);
@@ -120,6 +121,13 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
help={!canWritePolicy ? "i18n:govoplan-admin.appearance_lock_policy_permission" : undefined}
label="i18n:govoplan-admin.lock_system_palette"
/>
<ToggleSwitch
checked={draft.appearance_custom_overrides_allowed}
onChange={(appearance_custom_overrides_allowed) => setDraft({ ...draft, appearance_custom_overrides_allowed })}
disabled={!canWrite || !canWritePolicy || busy}
help={!canWritePolicy ? "i18n:govoplan-admin.appearance_policy_permission" : "i18n:govoplan-admin.custom_overrides_policy_help"}
label="i18n:govoplan-admin.allow_custom_appearance_overrides"
/>
<AppearancePalettePreview palette={draft.appearance_palette} />
<p className="muted small-note">i18n:govoplan-admin.system_palette_precedence_help</p>
</Card>
@@ -156,6 +164,7 @@ function systemSettingsDraftKey(item: SystemSettingsItem): string {
maintenance_mode: item.maintenance_mode,
navigation: item.navigation,
appearance_palette: item.appearance_palette,
appearance_palette_locked: item.appearance_palette_locked
appearance_palette_locked: item.appearance_palette_locked,
appearance_custom_overrides_allowed: item.appearance_custom_overrides_allowed
});
}
@@ -41,7 +41,8 @@ export const SYSTEM_SETTINGS_FALLBACK: SystemSettingsItem = {
settings: {},
navigation: null,
appearance_palette: "default",
appearance_palette_locked: false
appearance_palette_locked: false,
appearance_custom_overrides_allowed: false
};
export function applySystemSettingsSections(
+6
View File
@@ -8,6 +8,9 @@ export const generatedTranslations: PlatformTranslations = {
"i18n:govoplan-admin.appearance_lock_policy_permission": "Policy-write permission is required to change this lock.",
"i18n:govoplan-admin.lock_system_palette": "Lock the system palette",
"i18n:govoplan-admin.system_palette_precedence_help": "A system lock suppresses tenant and personal palette choices. Without a lock, explicit child choices take precedence.",
"i18n:govoplan-admin.allow_custom_appearance_overrides": "Allow governed personal color overrides",
"i18n:govoplan-admin.custom_overrides_policy_help": "Allows tenants to inherit or restrict access to the validated advanced editor. Palette locks still suppress overrides.",
"i18n:govoplan-admin.appearance_policy_permission": "Policy-write permission is required to change this appearance policy.",
"i18n:govoplan-admin.data_subject_requests.ds001": "Data-subject requests",
"i18n:govoplan-admin.data_subject_requests.ds002": "Search, export, and govern erasure requests with explicit provider coverage and retained evidence.",
"i18n:govoplan-admin.data_subject_requests.ds003": "Create request",
@@ -541,6 +544,9 @@ export const generatedTranslations: PlatformTranslations = {
"i18n:govoplan-admin.appearance_lock_policy_permission": "Zum Ändern dieser Sperre ist das Recht zum Bearbeiten von Richtlinien erforderlich.",
"i18n:govoplan-admin.lock_system_palette": "Systempalette verbindlich festlegen",
"i18n:govoplan-admin.system_palette_precedence_help": "Eine Systemsperre unterdrückt Mandanten- und Benutzerauswahlen. Ohne Sperre haben ausdrückliche untergeordnete Auswahlen Vorrang.",
"i18n:govoplan-admin.allow_custom_appearance_overrides": "Gesteuerte persönliche Farbanpassungen zulassen",
"i18n:govoplan-admin.custom_overrides_policy_help": "Mandanten können den Zugang zum geprüften erweiterten Editor erben oder einschränken. Palettensperren unterdrücken Anpassungen weiterhin.",
"i18n:govoplan-admin.appearance_policy_permission": "Zum Ändern dieser Darstellungsrichtlinie ist das Recht zum Bearbeiten von Richtlinien erforderlich.",
"i18n:govoplan-admin.data_subject_requests.ds001": "Betroffenenanfragen",
"i18n:govoplan-admin.data_subject_requests.ds002": "Auskunfts- und Löschanfragen mit expliziter Anbieterabdeckung und Aufbewahrungsnachweisen suchen, exportieren und steuern.",
"i18n:govoplan-admin.data_subject_requests.ds003": "Anfrage anlegen",