add optional context-fn setting
This commit is contained in:
parent
2c29f7fe71
commit
a88a24d303
|
@ -8,11 +8,12 @@
|
||||||
(defn configure-views!
|
(defn configure-views!
|
||||||
"performs browserchannel-specific initialization on the views system that is
|
"performs browserchannel-specific initialization on the views system that is
|
||||||
necessary to hook views and reagent-data-views together via browserchannel."
|
necessary to hook views and reagent-data-views together via browserchannel."
|
||||||
[]
|
[& {:keys [context-fn]}]
|
||||||
(views/set-send-fn!
|
(views/set-send-fn!
|
||||||
(fn [client-id [view-sig view-data]]
|
(fn [client-id [view-sig view-data]]
|
||||||
(log/trace client-id "refresh view" view-sig)
|
(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
|
(def middleware
|
||||||
"clj-browserchannel server-side event middleware. this should be included in the
|
"clj-browserchannel server-side event middleware. this should be included in the
|
||||||
|
|
|
@ -4,25 +4,32 @@
|
||||||
[views.core :as views]
|
[views.core :as views]
|
||||||
[reagent-data-views.utils :refer [relevant-event?]]))
|
[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!
|
(defn on-close!
|
||||||
[client-id context]
|
[client-id context]
|
||||||
(log/trace client-id "on-close, unsubscribing from all views")
|
(log/trace client-id "on-close, unsubscribing from all views")
|
||||||
(views/unsubscribe-all! client-id))
|
(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!
|
(defn on-receive!
|
||||||
[client-id data context]
|
[client-id data context]
|
||||||
(when (relevant-event? data)
|
(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
|
; for safety, since this is otherwise coming in un-altered from clients
|
||||||
view-sig (dissoc view-sig :namespace)]
|
view-sig (dissoc view-sig :namespace)]
|
||||||
(condp = event
|
(condp = event
|
||||||
|
@ -31,3 +38,7 @@
|
||||||
(log/warn client-id "unrecognized event" event "-- full received data:" data))
|
(log/warn client-id "unrecognized event" event "-- full received data:" data))
|
||||||
; indicating that we handled the received event
|
; indicating that we handled the received event
|
||||||
true)))
|
true)))
|
||||||
|
|
||||||
|
(defn set-context-fn!
|
||||||
|
[f]
|
||||||
|
(swap! views/view-system assoc-in [:reagent-data-views :context-fn] f))
|
Loading…
Reference in a new issue