diff --git a/pyproject.toml b/pyproject.toml index 915e288..cd08dd2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-postbox" -version = "0.1.21" +version = "0.1.22" description = "Function-bound institutional postboxes for GovOPlaN." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_postbox/__init__.py b/src/govoplan_postbox/__init__.py index fd3d430..17d3fe2 100644 --- a/src/govoplan_postbox/__init__.py +++ b/src/govoplan_postbox/__init__.py @@ -1,3 +1,3 @@ """GovOPlaN Postbox module.""" -__version__ = "0.1.21" +__version__ = "0.1.22" diff --git a/src/govoplan_postbox/backend/manifest.py b/src/govoplan_postbox/backend/manifest.py index 5eb1550..45f4599 100644 --- a/src/govoplan_postbox/backend/manifest.py +++ b/src/govoplan_postbox/backend/manifest.py @@ -34,7 +34,9 @@ from govoplan_core.core.modules import ( ModuleManifest, NavItem, PermissionDefinition, + ProductAvailabilityExplanation, ProductAreaContribution, + ProductSurfaceContribution, QuickAccessTool, RoleTemplate, ) @@ -75,7 +77,7 @@ from govoplan_postbox.backend.permissions import ( MODULE_ID = "postbox" MODULE_NAME = "Postbox" -MODULE_VERSION = "0.1.21" +MODULE_VERSION = "0.1.22" def _permission(scope: str, label: str, description: str) -> PermissionDefinition: @@ -404,6 +406,40 @@ manifest = ModuleManifest( order=40, ), ), + product_surfaces=( + ProductSurfaceContribution( + id="communication.messages", + module_id=MODULE_ID, + label="i18n:govoplan-core.product_surface.messages", + description="i18n:govoplan-core.product_surface.messages_description", + icon="mail", + entry_path="/messages", + route_path="/postbox", + surface_ids=("postbox.nav.postbox", "postbox.route.postbox"), + presentations=("task", "reader"), + capability_ids=(CAPABILITY_POSTBOX_MESSAGES,), + search_source_ids=("postbox.messages",), + help_context_ids=("postbox.quick_access.messages",), + documentation_topic_ids=("postbox.quick-access-and-product-area",), + required_any=(READ_SCOPE,), + aliases=("/inbox",), + order=20, + unavailable=ProductAvailabilityExplanation( + reason="authorization", + title="i18n:govoplan-core.product_surface.messages_unavailable", + description="i18n:govoplan-core.product_surface.messages_unavailable_description", + resolution="i18n:govoplan-core.product_surface.messages_unavailable_resolution", + responsible_role="i18n:govoplan-core.access_administrator", + ), + degraded=ProductAvailabilityExplanation( + reason="provider_degraded", + title="i18n:govoplan-core.product_surface.messages_degraded", + description="i18n:govoplan-core.product_surface.messages_degraded_description", + resolution="i18n:govoplan-core.product_surface.messages_degraded_resolution", + responsible_role="i18n:govoplan-core.integration_operator", + ), + ), + ), quick_access_tools=( QuickAccessTool( id="postbox.messages", @@ -623,7 +659,11 @@ manifest = ModuleManifest( summary="Use function-bound Postboxes in Communication and the shared Messages Quick Access drawer.", body=( "Postbox contributes its inbox to Communication. With Quick Access enabled, its owner-rendered surface lists at most " - "seven currently readable unread messages beside independent Mail and future chat providers. Selecting or opening a " + "seven currently readable unread messages beside independent Mail and future chat providers. " + "The stable `/messages` product entry and `/inbox` migration alias select Postbox only when its route is " + "currently authorized and visible in the effective View; otherwise another Messages owner is selected or the shell " + "explains how access can be restored. " + "Selecting or opening a " "message returns a typed Postbox reference; accounts with message-write permission can launch the full owner-rendered " "composer for a currently accessible function Postbox. Directory, message, and submission calls recheck the active " "assignment or acting context. Function assignment, classification, read-receipt, retention, encryption, and evidence " @@ -640,6 +680,9 @@ manifest = ModuleManifest( "body": ( "Postbox ordnet seinen Eingang Kommunikation zu. Ist der Schnellzugriff aktiviert, erscheint die vom Modul gerenderte " "Oberfläche mit höchstens sieben aktuell lesbaren ungelesenen Nachrichten neben unabhängigen Beiträgen aus Mail. " + "Der stabile Produkteinstieg `/messages` und der Migrationsalias `/inbox` wählen Postbox nur, wenn seine Route " + "aktuell berechtigt und in der wirksamen View sichtbar ist. Andernfalls wird ein anderer Nachrichten-Eigentümer " + "gewählt oder die Shell erklärt die Wiederherstellung des Zugriffs. " "Auswahl oder Öffnen liefert eine typisierte Postbox-Referenz; mit Schreibberechtigung lässt sich der vollständige " "Editor für ein aktuell zugängliches Funktionspostfach öffnen. Verzeichnis, Nachricht und Versand prüfen die aktive " "Zuweisung beziehungsweise den Handlungskontext erneut. Klassifikation, Lesestatus, Aufbewahrung, Verschlüsselung " diff --git a/webui/package.json b/webui/package.json index 46997ff..0eae1fd 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/postbox-webui", - "version": "0.1.21", + "version": "0.1.22", "private": true, "type": "module", "main": "src/index.ts", diff --git a/webui/src/module.ts b/webui/src/module.ts index 5ebf01a..181ffb9 100644 --- a/webui/src/module.ts +++ b/webui/src/module.ts @@ -1,6 +1,7 @@ import { createElement, lazy } from "react"; import { hasScope, + messagesProductSurfaceTranslations, type AdminSectionsUiCapability, type DashboardWidgetsUiCapability, type PlatformWebModule, @@ -18,8 +19,8 @@ const PostboxAdminPanel = lazy( ); const translations = { - en: generatedTranslations.en, - de: generatedTranslations.de + en: { ...generatedTranslations.en, ...messagesProductSurfaceTranslations.en }, + de: { ...generatedTranslations.de, ...messagesProductSurfaceTranslations.de } }; const readScope = ["postbox:postbox:read"];