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,
)
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",

View File

@@ -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<OrganizationFunctionActionsUiCapability>("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<string, OrganizationUnitItem[]>();

View File

@@ -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",