Fix event-bridge + add client? primitive + header store foundation
- Event-bridge: rewrite island to use document-level addEventListener via effect + host-callback, bypassing broken container-ref + schedule-idle. Also use host-get for event-detail (WASM host handles). - Add client? primitive: false on server (sx_primitives._is_client ref), true in browser (sx_browser.ml sets ref). Enables SSR-safe conditional logic for client-only features like def-store. - Header island: use def-store for idx/shade signals when client? is true, falling back to plain signals on server. Foundation for SPA nav state preservation (store registry persistence still needs work). - Remove unused client? K.eval override from sx-platform.js. 100 passed, 1 skipped (isomorphic nav — store registry resets on SPA nav), 0 failed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -515,16 +515,14 @@
|
||||
|
||||
;; 14. Event bridge — lake→island communication via custom DOM events
|
||||
(defisland ~reactive-islands/index/demo-event-bridge ()
|
||||
(let ((container-ref (dict "current" nil))
|
||||
(messages (signal (list)))
|
||||
(_eff (schedule-idle (fn ()
|
||||
(let ((el (get container-ref "current")))
|
||||
(when el
|
||||
(on-event el "inbox:message"
|
||||
(fn (e)
|
||||
(swap! messages (fn (old)
|
||||
(append old (host-get (event-detail e) "text"))))))))))))
|
||||
(div :ref container-ref
|
||||
(let ((messages (signal (list)))
|
||||
(_eff (effect (fn ()
|
||||
(let ((cb (host-callback
|
||||
(fn (e) (swap! messages (fn (old)
|
||||
(append old (host-get (event-detail e) "text"))))))))
|
||||
(host-call (dom-document) "addEventListener" "inbox:message" cb)
|
||||
(fn () (host-call (dom-document) "removeEventListener" "inbox:message" cb)))))))
|
||||
(div
|
||||
(p :class "text-xs font-semibold text-stone-500 mb-2" "Event Bridge Demo")
|
||||
(p :class "text-sm text-stone-600 mb-2"
|
||||
"The buttons below simulate server-rendered content dispatching events into the island.")
|
||||
|
||||
Reference in New Issue
Block a user