fix(projects): Live-Sync verstecken zwischen App und Diagnostic (ohne Refresh)
Kern-Bug: der Diagnostic-Server reichte ein von RVS empfangenes project_changed NIE an die Browser weiter — der Handler in index.html war toter Code, der Diagnostic aktualisierte die Projektliste also nie live. - server.js: RVS-Handler forwardet project_changed jetzt an die Browser-Tabs; der /api/brain-Proxy broadcastet project_changed (RVS + lokal) nach jeder erfolgreichen Projekt-Mutation (create/switch/end/archive/PATCH inkl. hidden). - App ProjectsBrowser: sendet project_changed nach dem Verstecken/Sichtbar- machen und laedt bei eingehendem project_changed selbst neu. Damit: verstecken in der App -> sofort im Diagnostic weg (und umgekehrt), ohne Seiten-Refresh. Diagnostic-Hide funktionierte schon (Daten/Proxy/Logik korrekt) — versteckte sind per "Versteckte anzeigen (N)"-Toggle sichtbar. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,17 @@ export const ProjectsBrowser: React.FC<Props> = ({ visible = true, onClose, onAc
|
||||
return () => unsub();
|
||||
}, [visible, load]);
|
||||
|
||||
// Live-Sync: ein anderer Client (Diagnostic / andere App) hat ein Projekt
|
||||
// geaendert (verstecken/anlegen/beenden/…) → project_changed ueber RVS →
|
||||
// Liste neu laden, ohne dass Stefan manuell refreshen muss.
|
||||
useEffect(() => {
|
||||
if (!visible) return;
|
||||
const unsub = rvs.onMessage((msg: any) => {
|
||||
if (msg?.type === 'project_changed') load();
|
||||
});
|
||||
return () => unsub();
|
||||
}, [visible, load]);
|
||||
|
||||
const switchTo = useCallback((id: string) => {
|
||||
// Multi-Threading: Focus-Wechsel ist reine App-lokale UI-Entscheidung.
|
||||
// Brain wird nicht mehr benachrichtigt (kein globaler active_project mehr).
|
||||
@@ -161,11 +172,18 @@ export const ProjectsBrowser: React.FC<Props> = ({ visible = true, onClose, onAc
|
||||
]);
|
||||
}, [load]);
|
||||
|
||||
// Nach einer Projekt-Mutation die anderen Clients (Diagnostic, weitere
|
||||
// App-Instanzen) live aktualisieren — via RVS project_changed. RVS echot
|
||||
// NICHT an den Sender zurueck, darum laden wir lokal zusaetzlich selbst.
|
||||
const broadcastProjectsChanged = useCallback(() => {
|
||||
try { rvs.send('project_changed' as any, { reason: 'app' }); } catch {}
|
||||
}, []);
|
||||
|
||||
const toggleHidden = useCallback((p: Project) => {
|
||||
brainApi.setProjectHidden(p.id, !p.hidden)
|
||||
.then(() => load())
|
||||
.then(() => { broadcastProjectsChanged(); load(); })
|
||||
.catch(e => Alert.alert('Fehler', String(e?.message || e)));
|
||||
}, [load]);
|
||||
}, [load, broadcastProjectsChanged]);
|
||||
|
||||
const archiveProject = useCallback((p: Project) => {
|
||||
Alert.alert(`"${p.name}" archivieren?`,
|
||||
|
||||
Reference in New Issue
Block a user