feat(admin): configure system navigation defaults
This commit is contained in:
@@ -75,6 +75,11 @@ from govoplan_core.core.module_installer_notifications import (
|
||||
installer_notification_subject,
|
||||
)
|
||||
from govoplan_core.core.module_license import module_license_decision, module_license_diagnostics
|
||||
from govoplan_core.core.navigation import (
|
||||
NavigationPreferences,
|
||||
navigation_preferences_from_settings,
|
||||
update_navigation_preferences,
|
||||
)
|
||||
from govoplan_core.core.module_package_catalog import (
|
||||
record_module_package_catalog_acceptance,
|
||||
validate_module_package_catalog,
|
||||
@@ -153,6 +158,7 @@ SYSTEM_SETTINGS_SECTIONS = (
|
||||
"languages",
|
||||
"privacy_retention_policy",
|
||||
"maintenance_mode",
|
||||
"navigation",
|
||||
"settings",
|
||||
)
|
||||
|
||||
@@ -288,6 +294,7 @@ def _system_settings_item(session: Session) -> SystemSettingsItem:
|
||||
policy = privacy_policy_from_settings(item)
|
||||
maintenance_mode = saved_maintenance_mode(session)
|
||||
i18n_payload = system_i18n_payload(item)
|
||||
navigation = navigation_preferences_from_settings(item.settings)
|
||||
return SystemSettingsItem(
|
||||
default_locale=item.default_locale,
|
||||
allow_tenant_custom_groups=item.allow_tenant_custom_groups,
|
||||
@@ -298,6 +305,7 @@ def _system_settings_item(session: Session) -> SystemSettingsItem:
|
||||
available_languages=i18n_payload["available_languages"],
|
||||
enabled_language_codes=i18n_payload["enabled_languages"],
|
||||
settings=item.settings or {},
|
||||
navigation=navigation.as_dict() if navigation is not None else None,
|
||||
)
|
||||
|
||||
|
||||
@@ -316,6 +324,7 @@ def _system_settings_sections(item: SystemSettingsItem) -> dict[str, Any]:
|
||||
},
|
||||
"privacy_retention_policy": payload["privacy_retention_policy"],
|
||||
"maintenance_mode": payload["maintenance_mode"],
|
||||
"navigation": payload["navigation"],
|
||||
"settings": payload["settings"],
|
||||
}
|
||||
|
||||
@@ -1810,6 +1819,15 @@ def write_system_settings(
|
||||
available_languages=available_languages,
|
||||
enabled_language_codes=enabled_language_codes,
|
||||
)
|
||||
if "navigation" in payload.model_fields_set:
|
||||
item.settings = update_navigation_preferences(
|
||||
item.settings,
|
||||
NavigationPreferences(
|
||||
order=tuple(payload.navigation.order),
|
||||
hidden=tuple(payload.navigation.hidden),
|
||||
locked=tuple(payload.navigation.locked),
|
||||
) if payload.navigation is not None else None,
|
||||
)
|
||||
if payload.privacy_retention_policy is not None:
|
||||
set_privacy_policy(item, payload.privacy_retention_policy.model_dump(mode="json"))
|
||||
if payload.maintenance_mode is not None:
|
||||
|
||||
@@ -5,7 +5,7 @@ from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from govoplan_core.api.v1.schemas import DeltaDeletedItem
|
||||
from govoplan_core.api.v1.schemas import DeltaDeletedItem, NavigationPreferencesPayload
|
||||
from govoplan_core.i18n import REFERENCE_LANGUAGE_CODE
|
||||
from govoplan_core.privacy.schemas import PrivacyRetentionPolicyItem
|
||||
|
||||
@@ -50,6 +50,7 @@ class SystemSettingsItem(BaseModel):
|
||||
available_languages: list[LanguagePackageItem] = Field(default_factory=list)
|
||||
enabled_language_codes: list[str] = Field(default_factory=list)
|
||||
settings: dict[str, Any] = Field(default_factory=dict)
|
||||
navigation: NavigationPreferencesPayload | None = None
|
||||
|
||||
|
||||
class SystemSettingsDeltaResponse(BaseModel):
|
||||
@@ -73,6 +74,7 @@ class SystemSettingsUpdateRequest(BaseModel):
|
||||
maintenance_mode: MaintenanceModeItem | None = None
|
||||
available_languages: list[LanguagePackageItem] | None = None
|
||||
enabled_language_codes: list[str] | None = None
|
||||
navigation: NavigationPreferencesPayload | None = None
|
||||
change_request_id: str | None = None
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user