Filter organization surfaces by View

This commit is contained in:
2026-07-28 21:04:54 +02:00
parent 28f799e426
commit 35aebe8759
3 changed files with 29 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ from govoplan_core.core.modules import (
RoleTemplate, RoleTemplate,
) )
from govoplan_core.core.organizations import CAPABILITY_ORGANIZATION_DIRECTORY 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_core.db.base import Base
from govoplan_organizations.backend.db import models as organization_models # noqa: F401 - populate metadata 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", package_name="@govoplan/organizations-webui",
routes=(FrontendRoute(path="/organizations", component="OrganizationsPage", required_any=ORGANIZATIONS_READ_SCOPES, order=70),), 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),), 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( migration_spec=MigrationSpec(
module_id="organizations", module_id="organizations",

View File

@@ -18,8 +18,11 @@ import {
TableActionGroup, TableActionGroup,
ToggleSwitch, ToggleSwitch,
hasScope, hasScope,
isViewSurfaceVisible,
useEffectiveView,
useUnsavedDraftGuard, useUnsavedDraftGuard,
usePlatformUiCapabilities, usePlatformUiCapabilities,
useViewSurfaces,
type ApiSettings, type ApiSettings,
type AuthInfo, type AuthInfo,
type DataGridColumn, type DataGridColumn,
@@ -378,6 +381,8 @@ export default function OrganizationsPage({
const [selectedUnitId, setSelectedUnitId] = useState(""); const [selectedUnitId, setSelectedUnitId] = useState("");
const [changeRequestId, setChangeRequestId] = useState(""); const [changeRequestId, setChangeRequestId] = useState("");
const functionActionCapabilities = usePlatformUiCapabilities<OrganizationFunctionActionsUiCapability>("organizations.functionActions"); const functionActionCapabilities = usePlatformUiCapabilities<OrganizationFunctionActionsUiCapability>("organizations.functionActions");
const effectiveView = useEffectiveView();
const viewSurfaces = useViewSurfaces();
const canWriteModel = hasScope(auth, "organizations:model:write"); const canWriteModel = hasScope(auth, "organizations:model:write");
const canWriteUnits = hasScope(auth, "organizations:unit:write"); const canWriteUnits = hasScope(auth, "organizations:unit:write");
@@ -393,8 +398,11 @@ export default function OrganizationsPage({
() => functionActionCapabilities () => functionActionCapabilities
.flatMap((capability) => capability.actions) .flatMap((capability) => capability.actions)
.filter((contribution) => contributionVisible(auth, contribution)) .filter((contribution) => contributionVisible(auth, contribution))
.filter((contribution) =>
isViewSurfaceVisible(effectiveView, contribution.surfaceId, viewSurfaces)
)
.sort((left, right) => (left.order ?? 100) - (right.order ?? 100)), .sort((left, right) => (left.order ?? 100) - (right.order ?? 100)),
[auth, functionActionCapabilities] [auth, effectiveView, functionActionCapabilities, viewSurfaces]
); );
const unitsByParentId = useMemo(() => { const unitsByParentId = useMemo(() => {
const mapped = new Map<string, OrganizationUnitItem[]>(); const mapped = new Map<string, OrganizationUnitItem[]>();

View File

@@ -23,6 +23,7 @@ const organizationAdminSections: AdminSectionsUiCapability = {
sections: [ sections: [
{ {
id: "tenant-organization-settings", id: "tenant-organization-settings",
surfaceId: "organizations.admin.tenant",
label: "i18n:govoplan-organizations.organizations.220edf64", label: "i18n:govoplan-organizations.organizations.220edf64",
group: "TENANT", group: "TENANT",
order: 85, order: 85,
@@ -45,6 +46,15 @@ export const organizationsModule: PlatformWebModule = {
dependencies: ["access"], dependencies: ["access"],
optionalDependencies: ["admin"], optionalDependencies: ["admin"],
translations, translations,
viewSurfaces: [
{
id: "organizations.admin.tenant",
moduleId: "organizations",
kind: "section",
label: "Organizations administration",
order: 85
}
],
navItems: [ navItems: [
{ {
to: "/organizations", to: "/organizations",