feat(app): Multi-Threading UI — Focus-One-View + Drawer + Queue-Status-Dots
Phase 2 vom Multi-Threading-Redesign. Chat zeigt jetzt genau EINEN Kontext (Hauptchat oder Projekt X) — die anderen laufen im Brain weiter, sichtbar nur ueber Status-Dots im Drawer. ChatScreen: - Reorder-Trick + collapsible Project-Bloecke raus. messagesForRender filtert jetzt direkt auf focusedProjectId. - Neuer Focus-Header oben: ☰ Drawer-Toggle + Kontext-Name + Status-Dot (gruen idle / gelb queue / rot arbeitet). Drawer-Icon kriegt ein Badge mit der Anzahl OTHERE aktiver Kontexte. - Focus in AsyncStorage gespiegelt — Neustart restauriert den letzten Blick. - brainApi.getProjectQueueStatus() alle 2s gepollt fuer Status-Dots. - project_changed-Event steuert Focus-Wechsel (App-lokal, kein Brain-Roundtrip). brainApi: - Neuer Typ QueueContextStatus + ProjectQueueStatus. - Methode getProjectQueueStatus() → /projects/queue-status. ProjectsBrowser: - Nimmt queueStatus als Prop, rendert Status-Dot pro Zeile (Hauptchat + Projekte). - switchTo ruft NICHT mehr brainApi.switchProject (kein globaler active mehr) — direkt onActiveChanged mit dem Projekt-Objekt aus der Liste, schliesst danach die Modal. - Label ✓ FOCUS statt ✓ AKTIV — praeziser fuer's neue Modell. SettingsScreen: - File-Manager-Filter-Default nutzt AsyncStorage statt Brain-Query. Bewusst nicht drin (Follow-up): - OS-Push wenn Projekt fertig ist — braucht Firebase-Setup, kommt separat wenn die visuellen Dots nicht reichen. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -735,11 +735,11 @@ const SettingsScreen: React.FC = () => {
|
||||
brainApi.listProjects(true)
|
||||
.then(list => setFileFilterProjects(list.map(p => ({ id: p.id, name: p.name }))))
|
||||
.catch(() => {});
|
||||
// Default-Filter: aktives Projekt (falls vorhanden), sonst "alle".
|
||||
brainApi.getProjectStatus()
|
||||
.then(s => {
|
||||
if (s.active_id) setFileFilterProjectId(s.active_id);
|
||||
})
|
||||
// Default-Filter: fokussiertes Projekt aus AsyncStorage (falls Stefan
|
||||
// grade in einem drin ist), sonst "alle". Multi-Threading: Focus ist
|
||||
// App-lokal, kein Brain-Query mehr.
|
||||
AsyncStorage.getItem('aria_focused_project_id')
|
||||
.then(pid => { if (pid) setFileFilterProjectId(pid); })
|
||||
.catch(() => {});
|
||||
}, [fileManagerOpen]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user