Migrate Calendar interface patterns

This commit is contained in:
2026-08-03 15:08:18 +02:00
parent a125b666da
commit d7fd9447a2
13 changed files with 486 additions and 42 deletions
+121 -3
View File
@@ -545,7 +545,23 @@ manifest = ModuleManifest(
documentation_types=("user",),
audience=("user", "calendar_manager"),
related_modules=("scheduling", "notifications"),
metadata={"kind": "reference"},
metadata={
"kind": "reference",
"help_contexts": [
"calendar.page",
"calendar.page.sidebar",
"calendar.page.agenda",
"calendar.page.workspace",
"calendar.event-editor",
"calendar.settings.preferences",
"calendar.widget.upcoming",
"calendar.state.read-only",
],
"consequence_classes": {
"save_event": "create or update the authoritative event and queue synchronized writes when required",
"delete_event": "delete the selected occurrence or series and queue synchronized deletion when required",
},
},
),
DocumentationTopic(
id="calendar.external-sources-and-sync",
@@ -555,7 +571,22 @@ manifest = ModuleManifest(
documentation_types=("admin", "user"),
audience=("user", "calendar_manager", "operator"),
related_modules=("connectors", "audit", "ops"),
metadata={"kind": "reference"},
metadata={
"kind": "reference",
"help_contexts": [
"calendar.collection-editor",
"calendar.sync-status",
"calendar.migration",
"calendar.state.source-admin-required",
],
"consequence_classes": {
"change_collection": "change calendar identity, source configuration, credentials, and synchronization policy",
"delete_or_remove_collection": "delete a local calendar or remove an external source after explicit event handling",
"synchronize_source": "read and, where configured, write remote state using bounded synchronization evidence",
"force_full_sync": "re-read the complete remote source and reconcile it against local state",
"execute_remote_move": "copy all destination resources before conditionally deleting source resources",
},
},
),
DocumentationTopic(
id="calendar.campaign-invitations-and-replies",
@@ -593,7 +624,16 @@ manifest = ModuleManifest(
documentation_types=("admin", "user"),
audience=("calendar_manager", "operator", "tenant_admin"),
related_modules=("ops", "audit"),
metadata={"kind": "runbook"},
metadata={
"kind": "runbook",
"help_contexts": [
"calendar.outbox",
"calendar.state.outbox-recovery",
],
"consequence_classes": {
"reconcile_outbox": "compare the latest desired generation with remote state before retry or discard",
},
},
),
),
capability_factories={
@@ -616,6 +656,84 @@ manifest = ModuleManifest(
),
nav_items=(NavItem(path="/calendar", label="Calendar", icon="calendar", required_any=("calendar:event:read",), order=55),),
view_surfaces=(
ViewSurface(
id="calendar.navigation",
module_id="calendar",
kind="navigation",
label="Calendar navigation",
order=10,
),
ViewSurface(
id="calendar.page",
module_id="calendar",
kind="route",
label="Calendar workspace",
order=20,
),
ViewSurface(
id="calendar.page.sidebar",
module_id="calendar",
kind="section",
label="Calendar list",
parent_id="calendar.page",
order=10,
),
ViewSurface(
id="calendar.page.agenda",
module_id="calendar",
kind="section",
label="Calendar agenda",
parent_id="calendar.page.sidebar",
order=20,
),
ViewSurface(
id="calendar.page.workspace",
module_id="calendar",
kind="section",
label="Calendar view",
parent_id="calendar.page",
order=30,
),
ViewSurface(
id="calendar.event-editor",
module_id="calendar",
kind="action",
label="Event editor",
parent_id="calendar.page",
order=40,
),
ViewSurface(
id="calendar.collection-editor",
module_id="calendar",
kind="action",
label="Calendar source editor",
parent_id="calendar.page.sidebar",
order=50,
),
ViewSurface(
id="calendar.sync-status",
module_id="calendar",
kind="section",
label="Calendar synchronization status",
parent_id="calendar.collection-editor",
order=60,
),
ViewSurface(
id="calendar.outbox",
module_id="calendar",
kind="action",
label="Outbound calendar changes",
parent_id="calendar.sync-status",
order=70,
),
ViewSurface(
id="calendar.migration",
module_id="calendar",
kind="action",
label="Remote calendar move",
parent_id="calendar.sync-status",
order=80,
),
ViewSurface(
id="calendar.widget.upcoming",
module_id="calendar",