From 35aebe875984c6cf3c738aaec20f5c38aaac8a5e Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Tue, 28 Jul 2026 21:04:54 +0200 Subject: [PATCH] Filter organization surfaces by View --- src/govoplan_organizations/backend/manifest.py | 10 ++++++++++ webui/src/features/organizations/OrganizationsPage.tsx | 10 +++++++++- webui/src/module.ts | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/govoplan_organizations/backend/manifest.py b/src/govoplan_organizations/backend/manifest.py index a33ebcc..00afbbe 100644 --- a/src/govoplan_organizations/backend/manifest.py +++ b/src/govoplan_organizations/backend/manifest.py @@ -16,6 +16,7 @@ from govoplan_core.core.modules import ( RoleTemplate, ) from govoplan_core.core.organizations import CAPABILITY_ORGANIZATION_DIRECTORY +from govoplan_core.core.views import ViewSurface from govoplan_core.db.base import Base from govoplan_organizations.backend.db import models as organization_models # noqa: F401 - populate metadata @@ -98,6 +99,15 @@ manifest = ModuleManifest( package_name="@govoplan/organizations-webui", routes=(FrontendRoute(path="/organizations", component="OrganizationsPage", required_any=ORGANIZATIONS_READ_SCOPES, order=70),), nav_items=(NavItem(path="/organizations", label="Organizations", icon="users", required_any=ORGANIZATIONS_READ_SCOPES, order=70),), + view_surfaces=( + ViewSurface( + id="organizations.admin.tenant", + module_id="organizations", + kind="section", + label="Organizations administration", + order=85, + ), + ), ), migration_spec=MigrationSpec( module_id="organizations", diff --git a/webui/src/features/organizations/OrganizationsPage.tsx b/webui/src/features/organizations/OrganizationsPage.tsx index 3184a71..61ee437 100644 --- a/webui/src/features/organizations/OrganizationsPage.tsx +++ b/webui/src/features/organizations/OrganizationsPage.tsx @@ -18,8 +18,11 @@ import { TableActionGroup, ToggleSwitch, hasScope, + isViewSurfaceVisible, + useEffectiveView, useUnsavedDraftGuard, usePlatformUiCapabilities, + useViewSurfaces, type ApiSettings, type AuthInfo, type DataGridColumn, @@ -378,6 +381,8 @@ export default function OrganizationsPage({ const [selectedUnitId, setSelectedUnitId] = useState(""); const [changeRequestId, setChangeRequestId] = useState(""); const functionActionCapabilities = usePlatformUiCapabilities("organizations.functionActions"); + const effectiveView = useEffectiveView(); + const viewSurfaces = useViewSurfaces(); const canWriteModel = hasScope(auth, "organizations:model:write"); const canWriteUnits = hasScope(auth, "organizations:unit:write"); @@ -393,8 +398,11 @@ export default function OrganizationsPage({ () => functionActionCapabilities .flatMap((capability) => capability.actions) .filter((contribution) => contributionVisible(auth, contribution)) + .filter((contribution) => + isViewSurfaceVisible(effectiveView, contribution.surfaceId, viewSurfaces) + ) .sort((left, right) => (left.order ?? 100) - (right.order ?? 100)), - [auth, functionActionCapabilities] + [auth, effectiveView, functionActionCapabilities, viewSurfaces] ); const unitsByParentId = useMemo(() => { const mapped = new Map(); diff --git a/webui/src/module.ts b/webui/src/module.ts index 88accb2..8936949 100644 --- a/webui/src/module.ts +++ b/webui/src/module.ts @@ -23,6 +23,7 @@ const organizationAdminSections: AdminSectionsUiCapability = { sections: [ { id: "tenant-organization-settings", + surfaceId: "organizations.admin.tenant", label: "i18n:govoplan-organizations.organizations.220edf64", group: "TENANT", order: 85, @@ -45,6 +46,15 @@ export const organizationsModule: PlatformWebModule = { dependencies: ["access"], optionalDependencies: ["admin"], translations, + viewSurfaces: [ + { + id: "organizations.admin.tenant", + moduleId: "organizations", + kind: "section", + label: "Organizations administration", + order: 85 + } + ], navItems: [ { to: "/organizations",