feat: instant sync — push on write, pull on reconnect, render from cache

- Add kick-ch to SyncedAtom: swap!/reset! trigger immediate push
  instead of waiting for the 15s sync loop interval
- SSE: pull on reconnect ("connected" message), not just on new events,
  so coming back online picks up missed server changes
- TodoMVC: render and bind events before IDB load completes; the watch
  re-renders automatically when cached data arrives
This commit is contained in:
Florian Schroedl
2026-04-16 19:09:08 +02:00
parent 38a15b7a34
commit 06d0fa5e05
3 changed files with 23 additions and 15 deletions

View File

@@ -247,18 +247,16 @@
:interval 15000})]
(reset! !conn conn)
(reset! !todos todos)
;; Wait for IDB load
(<! (pb/ready? todos))
;; Initial render
;; Render + bind immediately (empty or stale is fine)
(render!)
(bind-events!)
;; Re-render on any data change
;; Re-render on any data change (fires when IDB loads + server syncs)
(add-watch todos :render (fn [_ _ _ _] (render!)))
;; Re-render on filter change
(add-watch !filter :render (fn [_ _ _ _] (render!)))
;; Online/offline status updates
(.addEventListener js/window "online" (fn [_] (render!)))
(.addEventListener js/window "offline" (fn [_] (render!)))
;; Wait for IDB — watch triggers render automatically
(<! (pb/ready? todos))
(js/console.log "🔶 Pocketbook TodoMVC loaded —" (count @todos) "todos"))))
(init)