saving a connection now tells the other panels
reported on the first successful save: everything still showed no data and the form stayed open, and a manual page refresh was the only way through. two faults, one report. the form did not close itself — nothing cleared ?config, so a save left the settings view sitting on top of a plugin that now worked. and the two reader panels are SIBLINGS in a workspace layout: they are mounted independently, neither owns the other, and ConnectionPanel cannot call into them. so they went on showing the failure they had loaded back when no connection existed. a channel is the sanctioned answer for exactly this — docs/navigation-audit.md puts addressable state in the URL and leaves channels for "something changed, re-read it". nobody wants to link to the moment after a save. the nonce is a plain module counter, copied deliberately from officerdev's channels.ts along with the reason: setSignal(n => n + 1) applies against the value captured at render, so two bumps in one render window both compute snapshot + 1 and the second overwrites the first — and nobody re-reads. Date.now() is the same bug at millisecond scale. disconnect bumps it too. the panels must stop showing hosts they can no longer reach. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
This commit is contained in:
+5
-1
@@ -4,6 +4,7 @@ import { useClient } from "hooks/useClient";
|
||||
import { useSearchParams } from "react-router";
|
||||
import { ConnectionPanel } from "./ConnectionPanel";
|
||||
import { readableError } from "./errors";
|
||||
import { useConnectionChanged } from "./channel";
|
||||
|
||||
/**
|
||||
* The proxy hosts, which is the thing anybody opens this plugin to see.
|
||||
@@ -66,6 +67,9 @@ export const HostsPanel = () => {
|
||||
// `?config=1` is the settings page; an unconfigured plugin shows it whether or not it was asked for.
|
||||
// In the URL rather than in state, so it survives a refresh and can be linked to — `docs/navigation-audit.md`.
|
||||
const configuring = params.get("config") === "1";
|
||||
// Re-read when the connection is saved or removed. Named as an effect dependency below — that IS the
|
||||
// subscription; there is nothing to unsubscribe from.
|
||||
const [connectionSignal] = useConnectionChanged();
|
||||
|
||||
const load = useCallback(async () => {
|
||||
try {
|
||||
@@ -79,7 +83,7 @@ export const HostsPanel = () => {
|
||||
|
||||
useEffect(() => {
|
||||
void load();
|
||||
}, [load]);
|
||||
}, [load, connectionSignal]);
|
||||
|
||||
const toggle = async (host: ProxyHost) => {
|
||||
setBusy(host.id);
|
||||
|
||||
Reference in New Issue
Block a user