feat(admin): configure system navigation defaults

This commit is contained in:
2026-08-20 01:47:03 +02:00
parent 8a75c82a5d
commit a1d7b649aa
5 changed files with 60 additions and 6 deletions
+4 -1
View File
@@ -1,4 +1,4 @@
import type { ApiSettings, DeltaDeletedItem, PrivacyRetentionPolicy } from "@govoplan/core-webui";
import type { ApiSettings, DeltaDeletedItem, NavigationPreferences, PrivacyRetentionPolicy } from "@govoplan/core-webui";
import { apiDownload, apiFetch, apiPath, apiQuery } from "@govoplan/core-webui";
export { fetchAdminOverview, fetchPermissionCatalog, fetchTenants } from "@govoplan/core-webui";
export type {
@@ -33,6 +33,7 @@ export type SystemSettingsItem = {
available_languages: LanguagePackage[];
enabled_language_codes: string[];
settings: Record<string, unknown>;
navigation: NavigationPreferences | null;
};
export type SystemSettingsDeltaSections = Partial<{
@@ -42,6 +43,7 @@ export type SystemSettingsDeltaSections = Partial<{
privacy_retention_policy: SystemSettingsItem["privacy_retention_policy"];
maintenance_mode: SystemSettingsItem["maintenance_mode"];
settings: SystemSettingsItem["settings"];
navigation: SystemSettingsItem["navigation"];
}>;
export type SystemSettingsUpdatePayload = {
@@ -53,6 +55,7 @@ export type SystemSettingsUpdatePayload = {
maintenance_mode?: MaintenanceMode | null;
available_languages?: LanguagePackage[] | null;
enabled_language_codes?: string[] | null;
navigation?: NavigationPreferences | null;
change_request_id?: string | null;
};
@@ -5,7 +5,7 @@ import { Card } from "@govoplan/core-webui";
import { FormField } from "@govoplan/core-webui";
import { ToggleSwitch } from "@govoplan/core-webui";
import { fetchSystemSettingsDelta, updateSystemSettings, type LanguagePackage, type PrivacyRetentionLimitPermissions, type PrivacyRetentionPolicy, type SystemSettingsDeltaSections, type SystemSettingsItem } from "../../api/admin";
import { AdminPageLayout, AdminSelectionList, DocumentationHelpLink, adminErrorMessage, useDeltaWatermarks, useUnsavedDraftGuard } from "@govoplan/core-webui";
import { AdminPageLayout, AdminSelectionList, DocumentationHelpLink, NavigationPreferenceEditor, adminErrorMessage, configurableNavigationItemsForModules, dispatchPlatformModulesChanged, useDeltaWatermarks, usePlatformModules, useUnsavedDraftGuard } from "@govoplan/core-webui";
import { ADMIN_GOVERNANCE_DOCUMENTATION, ADMIN_INTERFACE_I18N, mutationDisabledReason } from "./interfacePatterns";
const DELTA_KEY = "admin:system-settings";
@@ -43,10 +43,13 @@ const fallback: SystemSettingsItem = {
{ code: "en", label: "English", native_label: "English" }
],
enabled_language_codes: ["de", "en"],
settings: {}
settings: {},
navigation: null
};
export default function SystemSettingsPanel({ settings, canWrite, canAccessMaintenance }: {settings: ApiSettings;canWrite: boolean;canAccessMaintenance: boolean;}) {
const modules = usePlatformModules();
const navigationItems = configurableNavigationItemsForModules(modules);
const [draft, setDraft] = useState<SystemSettingsItem>(fallback);
const [savedDraft, setSavedDraft] = useState<SystemSettingsItem>(fallback);
const [loading, setLoading] = useState(true);
@@ -102,11 +105,13 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
allow_tenant_api_keys: draft.allow_tenant_api_keys,
maintenance_mode: draft.maintenance_mode,
available_languages: draft.available_languages,
enabled_language_codes: draft.enabled_language_codes
enabled_language_codes: draft.enabled_language_codes,
navigation: draft.navigation
});
setDraft(saved);
setSavedDraft(saved);
resetDeltaWatermark(DELTA_KEY);
dispatchPlatformModulesChanged();
setSuccess("i18n:govoplan-admin.system_settings_saved.dac4f17b");
return true;
} catch (err) {setError(adminErrorMessage(err));return false;} finally
@@ -187,6 +192,15 @@ export default function SystemSettingsPanel({ settings, canWrite, canAccessMaint
</div>
<p className="muted small-note">i18n:govoplan-admin.these_settings_are_enforced_by_the_backend_centr.8112ed6f</p>
</Card>
<Card title="System navigation order">
<NavigationPreferenceEditor
items={navigationItems}
value={draft.navigation}
onChange={(navigation) => setDraft({ ...draft, navigation })}
scope="system"
disabled={!canWrite || busy}
/>
</Card>
<Card title="i18n:govoplan-admin.maintenance_mode.98cca5c6">
<div className="settings-list">
<ToggleSwitch
@@ -232,7 +246,8 @@ function systemSettingsDraftKey(item: SystemSettingsItem): string {
allow_tenant_api_keys: item.allow_tenant_api_keys,
maintenance_mode: item.maintenance_mode,
available_languages: item.available_languages,
enabled_language_codes: item.enabled_language_codes
enabled_language_codes: item.enabled_language_codes,
navigation: item.navigation
});
}
@@ -244,6 +259,7 @@ function applySystemSettingsSections(item: SystemSettingsItem, sections: SystemS
...(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 } : {})
};
}