diff options
| author | Adam Malczewski <[email protected]> | 2026-06-22 00:36:31 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-22 00:36:31 +0900 |
| commit | 250575df308469c58477a53865f8763084612e5f (patch) | |
| tree | 1966514e814faf6170ac7d2e7f76ac3ecaff77f6 /src/app/App.svelte | |
| parent | 3be12bccbd7eed767968e18f460693325093006a (diff) | |
| download | dispatch-web-250575df308469c58477a53865f8763084612e5f.tar.gz dispatch-web-250575df308469c58477a53865f8763084612e5f.zip | |
feat(tabs): cross-device tab sync via conversation lifecycle
Consume the conversation lifecycle handoff ([email protected], [email protected]).
Re-pinned file: deps + re-mirrored .dispatch/*.reference.md.
- fetchOpenConversations() on connect: GET /conversations?status=active,idle
restores the tab bar across devices (merges with localStorage — opens new
tabs, removes closed ones, updates titles from backend)
- conversation.statusChanged WS handler: closed → removeTabLocally (no
re-POST); active → open tab + spinner; idle → update status map
- conversation.compacted WS handler: dispose stale store + cache, reload
history from server
- TabBar shows a spinner on active conversations (statusFor prop)
- closeTab refactored to use removeTabLocally (extracted cleanup)
- conformance guards + WS adapter tests cover all 3 new WsServerMessage types
686 tests green.
Diffstat (limited to 'src/app/App.svelte')
| -rw-r--r-- | src/app/App.svelte | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/app/App.svelte b/src/app/App.svelte index 2b3b250..e065759 100644 --- a/src/app/App.svelte +++ b/src/app/App.svelte @@ -257,6 +257,7 @@ <TabBar tabs={store.tabs} activeConversationId={store.activeConversationId} + statusFor={(id) => store.conversationStatus(id)} onSelect={(id) => store.selectTab(id)} onClose={(id) => store.closeTab(id)} onNewDraft={() => store.newDraft()} |
