diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverEditRouter.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverEditRouter.razor index 0b7bb07f..55353cbf 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverEditRouter.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverEditRouter.razor @@ -1,8 +1,6 @@ -@* Dispatch page: reads DriverInstance.DriverType and renders the matching typed editor - via . Falls back to the legacy DriverEdit for any type not yet in - the map. The route collides with DriverEdit.razor's identical directive — that's - intentional. Task 3.4 removes the route from DriverEdit.razor. Blazor route conflicts - are runtime, not build-time, so the build succeeds now. *@ +@* Dispatch page: reads DriverInstance.DriverType and dispatches to the matching typed editor + via using _componentMap. Shows an error panel when the driver type has + no registered typed page. *@ @page "/clusters/{ClusterId}/drivers/{DriverInstanceId}" @attribute [Microsoft.AspNetCore.Authorization.Authorize] @rendermode RenderMode.InteractiveServer diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverTypePicker.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverTypePicker.razor index eafdf2cd..ec513615 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverTypePicker.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/Clusters/Drivers/DriverTypePicker.razor @@ -1,6 +1,5 @@ -@* TODO(3.3): This route collides with DriverEdit.razor's @page "/clusters/{ClusterId}/drivers/new". - Task 3.3 removes the /drivers/new directive from DriverEdit.razor so this page takes over. - Blazor resolves route conflicts at runtime, not compile time, so the build succeeds now. *@ +@* Driver type picker — presents a card grid of registered driver types and links to the + per-type new-driver creation page (/clusters/{ClusterId}/drivers/new/{slug}). *@ @page "/clusters/{ClusterId}/drivers/new" @attribute [Microsoft.AspNetCore.Authorization.Authorize] diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverIdentitySection.razor b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverIdentitySection.razor index 4ea1b08e..92291b82 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverIdentitySection.razor +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/DriverIdentitySection.razor @@ -1,7 +1,5 @@ -@* Identity section shared across the generic DriverEdit page and the typed driver pages (Phase 4). - The parent page owns the and all data loading/persistence — this component is - purely a section of inputs. - Set ShowDriverType=true on the generic editor; typed pages leave it false (type is fixed). *@ +@* Identity section shared by the typed driver pages. The parent page owns the and all + data loading/persistence — this component is purely a section of inputs. *@ @using System.ComponentModel.DataAnnotations @using ZB.MOM.WW.OtOpcUa.Configuration.Entities diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/EndpointRouteBuilderExtensions.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/EndpointRouteBuilderExtensions.cs index d9c5d0ad..eafdbd44 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/EndpointRouteBuilderExtensions.cs +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/EndpointRouteBuilderExtensions.cs @@ -15,11 +15,6 @@ public static class EndpointRouteBuilderExtensions /// /// Mounts the AdminUI Razor components and the AdminUI static asset pipeline at the root. /// Call from the fused Host's Program.cs alongside app.MapOtOpcUaAuth(). - /// - /// Razor component migration from legacy OtOpcUa.Admin/Components/ is staged for - /// follow-up F15 — 47 .razor files plus codebehind. Until then this extension wires the - /// Blazor pipeline but the only built-in components are the v2-native ones added in this - /// library (e.g. Deployments, Task 52). /// /// The root component type for Razor pages. /// The endpoint route builder. diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs index 7e230518..5f273efb 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs @@ -7,9 +7,8 @@ namespace ZB.MOM.WW.OtOpcUa.AdminUI.Hubs; /// Browser-facing fleet-status push channel. Subscribers receive /// snapshots whenever the admin-role FleetStatusBroadcaster publishes a diff. /// -/// Server-side bridge from FleetStatusBroadcaster.broadcastIHubContext<FleetStatusHub> -/// is staged for follow-up F16. For now the hub is a passive channel; SignalR clients connect -/// and stay idle until the bridge lands. +/// Server pushes fleet-status updates to connected clients via FleetStatusSignalRBridge +/// (DistributedPubSub 'fleet-status' → IHubContext<FleetStatusHub>). /// public sealed class FleetStatusHub : Hub {