feat: manage system appearance defaults
This commit is contained in:
@@ -4,6 +4,7 @@ import { Button } from "@govoplan/core-webui";
|
||||
import { Card } from "@govoplan/core-webui";
|
||||
import { FormField } from "@govoplan/core-webui";
|
||||
import { ToggleSwitch } from "@govoplan/core-webui";
|
||||
import { AppearancePalettePreview, AppearancePaletteSelect } from "@govoplan/core-webui";
|
||||
import { fetchSystemSettingsDelta, updateSystemSettings, type SystemSettingsItem } from "../../api/admin";
|
||||
import { AdminPageLayout, DocumentationHelpLink, NavigationPreferenceEditor, adminErrorMessage, configurableNavigationItemsForModules, dispatchPlatformModulesChanged, useDeltaWatermarks, usePlatformModules, useUnsavedDraftGuard } from "@govoplan/core-webui";
|
||||
import { ADMIN_GOVERNANCE_DOCUMENTATION, ADMIN_INTERFACE_I18N, mutationDisabledReason } from "./interfacePatterns";
|
||||
@@ -11,7 +12,7 @@ import { SYSTEM_SETTINGS_FALLBACK, applySystemSettingsSections } from "./systemS
|
||||
|
||||
const DELTA_KEY = "admin:system-settings";
|
||||
|
||||
export default function SystemSettingsPanel({ settings, canWrite, canAccessMaintenance }: {settings: ApiSettings;canWrite: boolean;canAccessMaintenance: boolean;}) {
|
||||
export default function SystemSettingsPanel({ settings, canWrite, canAccessMaintenance, canWritePolicy }: {settings: ApiSettings;canWrite: boolean;canAccessMaintenance: boolean;canWritePolicy: boolean;}) {
|
||||
const modules = usePlatformModules();
|
||||
const navigationItems = configurableNavigationItemsForModules(modules);
|
||||
const [draft, setDraft] = useState<SystemSettingsItem>(SYSTEM_SETTINGS_FALLBACK);
|
||||
@@ -63,7 +64,9 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
|
||||
allow_tenant_custom_roles: draft.allow_tenant_custom_roles,
|
||||
allow_tenant_api_keys: draft.allow_tenant_api_keys,
|
||||
maintenance_mode: draft.maintenance_mode,
|
||||
navigation: draft.navigation
|
||||
navigation: draft.navigation,
|
||||
appearance_palette: draft.appearance_palette,
|
||||
appearance_palette_locked: draft.appearance_palette_locked
|
||||
});
|
||||
setDraft(saved);
|
||||
setSavedDraft(saved);
|
||||
@@ -102,6 +105,24 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
|
||||
disabled={!canWrite || busy}
|
||||
/>
|
||||
</Card>
|
||||
<Card title="i18n:govoplan-admin.appearance_defaults">
|
||||
<FormField label="i18n:govoplan-admin.system_palette_default" help="i18n:govoplan-admin.system_palette_default_help">
|
||||
<AppearancePaletteSelect
|
||||
value={draft.appearance_palette}
|
||||
onChange={(appearance_palette) => setDraft({ ...draft, appearance_palette: appearance_palette ?? "default" })}
|
||||
disabled={!canWrite || busy || (draft.appearance_palette_locked && !canWritePolicy)}
|
||||
/>
|
||||
</FormField>
|
||||
<ToggleSwitch
|
||||
checked={draft.appearance_palette_locked}
|
||||
onChange={(appearance_palette_locked) => setDraft({ ...draft, appearance_palette_locked })}
|
||||
disabled={!canWrite || !canWritePolicy || busy}
|
||||
help={!canWritePolicy ? "i18n:govoplan-admin.appearance_lock_policy_permission" : undefined}
|
||||
label="i18n:govoplan-admin.lock_system_palette"
|
||||
/>
|
||||
<AppearancePalettePreview palette={draft.appearance_palette} />
|
||||
<p className="muted small-note">i18n:govoplan-admin.system_palette_precedence_help</p>
|
||||
</Card>
|
||||
<Card title="i18n:govoplan-admin.maintenance_mode.98cca5c6">
|
||||
<div className="settings-list">
|
||||
<ToggleSwitch
|
||||
@@ -133,6 +154,8 @@ function systemSettingsDraftKey(item: SystemSettingsItem): string {
|
||||
allow_tenant_custom_roles: item.allow_tenant_custom_roles,
|
||||
allow_tenant_api_keys: item.allow_tenant_api_keys,
|
||||
maintenance_mode: item.maintenance_mode,
|
||||
navigation: item.navigation
|
||||
navigation: item.navigation,
|
||||
appearance_palette: item.appearance_palette,
|
||||
appearance_palette_locked: item.appearance_palette_locked
|
||||
});
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ export const SYSTEM_SETTINGS_FALLBACK: SystemSettingsItem = {
|
||||
],
|
||||
enabled_language_codes: ["de", "en"],
|
||||
settings: {},
|
||||
navigation: null
|
||||
navigation: null,
|
||||
appearance_palette: "default",
|
||||
appearance_palette_locked: false
|
||||
};
|
||||
|
||||
export function applySystemSettingsSections(
|
||||
@@ -56,6 +58,7 @@ export function applySystemSettingsSections(
|
||||
: {}),
|
||||
...(sections.maintenance_mode ? { maintenance_mode: sections.maintenance_mode } : {}),
|
||||
...(sections.navigation !== undefined ? { navigation: sections.navigation } : {}),
|
||||
...(sections.appearance ?? {}),
|
||||
...(sections.settings ? { settings: sections.settings } : {})
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user