diff --git a/package.json b/package.json index d23a7a3..5e42397 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/organizations-webui", - "version": "0.1.20", + "version": "0.1.21", "private": true, "type": "module", "main": "webui/src/index.ts", @@ -19,7 +19,7 @@ "LICENSE" ], "peerDependencies": { - "@govoplan/core-webui": "^0.1.18", + "@govoplan/core-webui": "^0.1.45", "@vitejs/plugin-react": "^5.2.0", "lucide-react": "^1.23.0", "react": ">=19.2.7 <20", diff --git a/pyproject.toml b/pyproject.toml index 07015ef..aec49e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-organizations" -version = "0.1.20" +version = "0.1.21" description = "GovOPlaN organizational model module." readme = "README.md" requires-python = ">=3.12" authors = [{ name = "GovOPlaN" }] dependencies = [ - "govoplan-core>=0.1.18", + "govoplan-core>=0.1.45", "govoplan-tenancy>=0.1.18", ] diff --git a/src/govoplan_organizations/__init__.py b/src/govoplan_organizations/__init__.py index ba685b0..29ad261 100644 --- a/src/govoplan_organizations/__init__.py +++ b/src/govoplan_organizations/__init__.py @@ -1,3 +1,3 @@ """GovOPlaN organizations module.""" -__version__ = "0.1.20" +__version__ = "0.1.21" diff --git a/src/govoplan_organizations/backend/manifest.py b/src/govoplan_organizations/backend/manifest.py index abf09a8..b6adc55 100644 --- a/src/govoplan_organizations/backend/manifest.py +++ b/src/govoplan_organizations/backend/manifest.py @@ -144,7 +144,7 @@ def _organizations_dsar_provider(context: ModuleContext) -> object: manifest = ModuleManifest( id="organizations", name="Organizations", - version="0.1.20", + version="0.1.21", required_capabilities=( CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR, @@ -265,6 +265,21 @@ manifest = ModuleManifest( ), }, documentation=( + DocumentationTopic( + id="organizations.workspace-layout", + title="Organizations workspace layout", + summary="Find workspace actions and read consistently arranged content.", + body="Organization model tables use the complete card width; headings and creation actions stay in the card header, while the shared DataGrid owns filtering, sizing, pagination, and row actions. Unit types, structures, relation types, function types, units, relations, and functions follow the same layout. Model upgrades keep their meaningful version and decision context separate from the result table. Administrators and configurators must use Core's table-card layout instead of local padding or width overrides. The change does not modify model permissions, effective dates, or template-copy semantics.", + layer="static", + documentation_types=("user", "admin"), + audience=("user", "module_admin", "operator"), + order=5, + translations={"de": { + "title": "Organisationen: Aufbau des Arbeitsbereichs", + "summary": "Arbeitsbereichsaktionen finden und einheitlich angeordnete Inhalte lesen.", + "body": "Tabellen des Organisationsmodells nutzen die gesamte Kartenbreite. Überschrift und Anlegen-Aktionen bleiben im Kartenkopf; das gemeinsame DataGrid übernimmt Filter, Größe, Seitennavigation und Zeilenaktionen. Einheitentypen, Strukturen, Beziehungstypen, Funktionstypen, Einheiten, Beziehungen und Funktionen folgen demselben Layout. Modell-Upgrades behalten ihren relevanten Versions- und Entscheidungskontext getrennt von der Ergebnistabelle. Administratoren und Konfiguratoren verwenden Cores Tabellenkartenlayout statt lokaler Innenabstands- oder Breitenregeln. Rechte, Gültigkeitsdaten und das Kopierprinzip der Vorlagen ändern sich dadurch nicht.", + }}, + ), DocumentationTopic( id="organizations.privacy.data-subject-requests", title="Review Organizations data in a data-subject request", diff --git a/webui/package.json b/webui/package.json index c3eebb0..f0eb3cd 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/organizations-webui", - "version": "0.1.20", + "version": "0.1.21", "private": true, "type": "module", "main": "src/index.ts", @@ -19,7 +19,7 @@ "./styles/organizations.css": "./src/styles/organizations.css" }, "peerDependencies": { - "@govoplan/core-webui": "^0.1.18", + "@govoplan/core-webui": "^0.1.45", "@vitejs/plugin-react": "^5.2.0", "lucide-react": "^1.23.0", "react": ">=19.2.7 <20", diff --git a/webui/scripts/test-interface-pattern-language.mjs b/webui/scripts/test-interface-pattern-language.mjs index c9720ca..deddd6a 100644 --- a/webui/scripts/test-interface-pattern-language.mjs +++ b/webui/scripts/test-interface-pattern-language.mjs @@ -17,7 +17,8 @@ const translations = source("../src/i18n/generatedTranslations.ts"); assert(page.includes("DocumentationHelpLink") && settings.includes("DocumentationHelpLink"), "Workspace and tenant settings expose contextual documentation"); assert(page.includes("ActionBlockerHint") && settings.includes("ActionBlockerHint"), "Read-only states identify action, actor, and destination"); assert(page.includes("disabledReason") && settings.includes("disabledReason"), "Unavailable organization actions explain their state"); -assert(page.includes("requestDiscard(() => void loadModel())") && settings.includes("requestDiscard(() => void load())"), "Reload preserves dirty organization drafts and settings"); +assert(page.includes(" void loadModel()") && settings.includes("requestDiscard(() => void load())"), "Reload uses the guarded semantic page action or the settings draft guard"); +assert((page.match(/ {error && {error}} {success && {success}} - void load()} disabled={loading || busy}> -