From a88a24d30359b678c19aee37865565356f9ebc87 Mon Sep 17 00:00:00 2001 From: gered Date: Fri, 20 May 2016 13:02:09 -0400 Subject: [PATCH] add optional context-fn setting --- .../browserchannel/server.clj | 5 +-- .../src/reagent_data_views/server/core.clj | 33 ++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/reagent-data-views-browserchannel/src/reagent_data_views/browserchannel/server.clj b/reagent-data-views-browserchannel/src/reagent_data_views/browserchannel/server.clj index c0ae04a..fabf949 100644 --- a/reagent-data-views-browserchannel/src/reagent_data_views/browserchannel/server.clj +++ b/reagent-data-views-browserchannel/src/reagent_data_views/browserchannel/server.clj @@ -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 diff --git a/reagent-data-views/src/reagent_data_views/server/core.clj b/reagent-data-views/src/reagent_data_views/server/core.clj index 9049155..87d3869 100644 --- a/reagent-data-views/src/reagent_data_views/server/core.clj +++ b/reagent-data-views/src/reagent_data_views/server/core.clj @@ -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)) \ No newline at end of file