add optional context-fn setting

This commit is contained in:
Gered 2016-05-20 13:02:09 -04:00
parent 2c29f7fe71
commit a88a24d303
2 changed files with 25 additions and 13 deletions

View file

@ -8,11 +8,12 @@
(defn configure-views!
"performs browserchannel-specific initialization on the views system that is
necessary to hook views and reagent-data-views together via browserchannel."
[]
[& {:keys [context-fn]}]
(views/set-send-fn!
(fn [client-id [view-sig view-data]]
(log/trace client-id "refresh view" view-sig)
(browserchannel/send-data! client-id [:views/refresh view-sig view-data]))))
(browserchannel/send-data! client-id [:views/refresh view-sig view-data])))
(server/set-context-fn! context-fn))
(def middleware
"clj-browserchannel server-side event middleware. this should be included in the

View file

@ -4,25 +4,32 @@
[views.core :as views]
[reagent-data-views.utils :refer [relevant-event?]]))
(defn- handle-subscriptions!
[client-id view-sig context]
(log/trace client-id "subscribing to" view-sig)
(views/subscribe! view-sig client-id context))
(defn- handle-unsubscriptions!
[client-id view-sig context]
(log/trace client-id "unsubscribing from" view-sig)
(views/unsubscribe! view-sig client-id context))
(defn- update-context
[existing-context]
(if-let [context-fn (get-in @views/view-system [:reagent-data-views :context-fn])]
(context-fn existing-context)
existing-context))
(defn on-close!
[client-id context]
(log/trace client-id "on-close, unsubscribing from all views")
(views/unsubscribe-all! client-id))
(defn handle-subscriptions!
[client-id view-sig context]
(log/trace client-id "subscribing to" view-sig)
(views/subscribe! view-sig client-id context))
(defn handle-unsubscriptions!
[client-id view-sig context]
(log/trace client-id "unsubscribing from" view-sig)
(views/unsubscribe! view-sig client-id context))
(defn on-receive!
[client-id data context]
(when (relevant-event? data)
(let [[event view-sig] data
(let [context (update-context context)
[event view-sig] data
; for safety, since this is otherwise coming in un-altered from clients
view-sig (dissoc view-sig :namespace)]
(condp = event
@ -31,3 +38,7 @@
(log/warn client-id "unrecognized event" event "-- full received data:" data))
; indicating that we handled the received event
true)))
(defn set-context-fn!
[f]
(swap! views/view-system assoc-in [:reagent-data-views :context-fn] f))