add optional context-fn setting
This commit is contained in:
parent
2c29f7fe71
commit
a88a24d303
|
@ -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
|
||||
|
|
|
@ -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))
|
Loading…
Reference in a new issue