Files
lmxopcua/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Pages/SecretsAdmin.razor
T
Joseph Doherty 1475991fd6 fix(adminui,client): error boundary inside the interactive scope, stale-commit OnSaved, AbCip browse delay emit, DisposeBridge cancel (review R3)
M1: PageErrorBoundary wraps the body of every InteractiveServer page; the inert layout boundary is removed.
m1: DisposeBridge cancels its CTS when the 5 s wait times out.
m2: a CSV import that commits after the modal closed still raises OnSaved.
m3: document SecurityMode=None no-fallback in Client.CLI.md / Client.UI.md.
m4: browsePageDelayMs written only when loaded or changed; negative flagged.

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
2026-10-08 07:31:19 -04:00

23 lines
1.2 KiB
Plaintext

@page "/admin/secrets"
@attribute [Authorize(Policy = ZB.MOM.WW.Secrets.Ui.SecretsAuthorization.ManagePolicy)]
@rendermode RenderMode.InteractiveServer
@using ZB.MOM.WW.Secrets.Ui
@* Host-side wrapper for the ZB.MOM.WW.Secrets.Ui secrets page (lmxopcua#483).
This host's <Routes/> is deliberately static (cookie SignInAsync needs SSR), so every
interactive page opts in per-page with @rendermode — a directive the RCL's own routable
SecretsPage cannot carry, because the other three family hosts render it under a globally
interactive router where a nested render mode throws. Routing straight to the RCL page
therefore produced a statically-rendered, dead page here: no circuit, @onclick inert.
So this wrapper owns the /admin/secrets route in THIS host (the RCL assembly is no longer
passed to either AdditionalAssemblies registration — doing both would make the route
ambiguous), carries the standard per-page render mode, re-states the RCL page's own
authorization policy (the router only enforces [Authorize] on the routed page itself,
which is now this one), and renders the RCL page as an ordinary child component. *@
<PageErrorBoundary>
<SecretsPage />
</PageErrorBoundary>